Problema
Eu tenho um GRANDE programa novo que mudará a maneira como pensamos em matemática na computação, absorvendo cadeias de funções algébricas e fazendo coisas INCRÍVEIS com elas! O único problema é que sou capaz de analisar álgebra específica, caso contrário o universo se dobra em si mesmo, o que é ruim. Felizmente, só preciso de algumas operações básicas na entrada deste incrível novo programa, mas ainda preciso expandi-la!
Regras
Uma resposta deve ser capaz de simplificar as seguintes expressões
2+2deve reduzir a4(5+x)+6deve reduzir ax+11(x+2)^2deve reduzir ax^2+4*x+4(x-5)*(3+7*x)deve reduzir a7*x^2-32*x-155*x+9*xdeve reduzir a14*x(2*x^2)*x^3deve reduzir a2*x^5
As respostas devem poder COMPLETAMENTE remover parênteses, o que implica que toda a distribuição deve ocorrer.
As respostas devem poder lidar com todos os seguintes operadores e tokens padrão:
+(A função de adição)-(A função de subtração)*(A função de multiplicação)((O parêntese esquerdo, usado para indicar um grupo))(O parêntese direito, usado para indicar o final do último grupo iniciado)x(A variável padrão)[0-9]+(números literais não negativos)
As respostas devem ser capazes de, pelo menos, quadrado, usando a notação expr ^ 2, incluindo (expr) ^ 2 recursivamente, pois (expr) é uma expressão;)
Uma solução deve estar em uma notação de infixo padrão, nenhum dos absurdos da RPN!
Nenhuma biblioteca funciona como a do Mathematica
Simplifypara fazer isso por você.A solução deve ser uma função que recebe um único argumento e retorna a versão expandida
Como se trata de código-golfe, a resposta com o menor número de pressionamentos (chave) vence, 1 semana a partir do OP.
Notas
Não há espaços neste mundo da matemática, é claro! Apenas parênteses.
Portanto, nenhuma divisão é necessária para salvar da fatoração
A ordem padrão de operações se aplica.
Estou ciente de que parte do que estou pedindo é simplificação (por exemplo 2+2=4), onde outras partes são realmente o oposto, como expandir (x+1)^2para ser x^2+2x+1. Isso é intencional. :)
-25 golpes para uma solução que pode fazer (expr) ^ n em vez de apenas (expr) ^ 2
-15 traçados para uma solução capaz de avaliar a multiplicação justaposta, como 4x+5x== 9xou 4(x+1)=4x+4
-5 traços para uma solução capaz de lidar com várias variáveis (uma variável sendo exatamente um caractere do alfabeto em minúsculas)
-5 golpes para uma solução capaz de remover os 0s iniciais ( 007apenas 7[hoje não, Bond!] [Caramba, agora sinto que estou escrevendo o Lisp])