Problema
¡Tengo un GRAN programa nuevo que cambiará la forma en que pensamos sobre las matemáticas en la informática, tomando cadenas de funciones algebraicas y haciendo cosas INCREÍBLES con ellas! El único problema es que solo soy capaz de analizar álgebra específica, de lo contrario, el universo se pliega en sí mismo, lo cual es malo. Afortunadamente, solo necesito algunas operaciones básicas en la increíble entrada de este nuevo programa, ¡pero todavía necesito que se expanda!
Reglas
Una respuesta debe poder simplificar las siguientes expresiones
2+2
debería reducir a4
(5+x)+6
debería reducir ax+11
(x+2)^2
debería reducir ax^2+4*x+4
(x-5)*(3+7*x)
debería reducir a7*x^2-32*x-15
5*x+9*x
debería reducir a14*x
(2*x^2)*x^3
debería reducir a2*x^5
Las respuestas deben poder COMPLETAMENTE eliminar el paréntesis, lo que implica que toda la distribución debe tener lugar.
Las respuestas deberían poder manejar todos los siguientes operadores y tokens estándar:
+
(La función de suma)-
(La función de resta)*
(La función de multiplicación)(
(El paréntesis izquierdo, usado para indicar un grupo))
(El paréntesis derecho, usado para indicar el final del último grupo iniciado)x
(La variable estándar)[0-9]+
(números literales no negativos)
Las respuestas deben ser capaces de al menos cuadrar, usando la notación expr ^ 2, incluyendo (expr) ^ 2 recursivamente, ya que (expr) es en sí misma una expresión;)
Una solución debe estar en una notación infija estándar, ¡ninguna de las tonterías RPN!
No hay funciones de biblioteca como Mathematica
Simplify
para hacer esto por usted.La solución debe ser una función que tome un solo argumento y devuelva la versión expandida
Como se trata de código de golf, la respuesta con la menor cantidad de golpes (clave) gana, 1 semana desde OP.
Notas
¡No hay espacios en este mundo de las matemáticas, por supuesto! Solo paréntesis.
Por lo tanto, no se requiere división para salvar del factoring
Se aplica el orden estándar de operaciones.
Soy consciente de que parte de lo que estoy pidiendo es simplificación (por ejemplo 2+2=4
) donde otras partes son realmente lo opuesto, como expandirse (x+1)^2
para ser x^2+2x+1
. Esto es intencional :)
-25 trazos para una solución que puede hacer (expr) ^ n en lugar de solo (expr) ^ 2
-15 trazos para una solución capaz de evaluar la multiplicación yuxtapuesta, como 4x+5x
== 9x
o 4(x+1)
=4x+4
-5 trazos para una solución capaz de manejar múltiples variables (una variable es exactamente un carácter minúsculo del alfabeto)
-5 golpes para una solución capaz de eliminar los ceros a la izquierda ( 007
a solo 7
[¡No hoy, Bond!] [Por Dios, ahora siento que estoy escribiendo Lisp])