La multiplicación entre 2 enteros se puede reducir en una serie de sumas así
3 * 5 = 3 + 3 + 3 + 3 + 3 = 5 + 5 + 5
La exponenciación (elevar a a la potencia b ) también se puede reducir en una serie de multiplicaciones:
5 ^ 3 = 5 * 5 * 5
Por lo tanto, la exponenciación puede reducirse en una serie de adiciones, creando una expresión de multiplicación y luego en una serie de adiciones. Por ejemplo, 5 ^ 3
(5 cubos) se puede reescribir como
5 ^ 3 = 5 * 5 * 5
= (5 + 5 + 5 + 5 + 5) * 5
= (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5)
= 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5
Su tarea es, dadas expresiones agregadas juntas que consisten en exponenciación, multiplicación y suma, reducirla a la serie más corta de adiciones. La expresión "más corta" se define como la expresión con el menor número de +
símbolos, utilizando solo uno de los dos números en la expresión original. Por ejemplo, la expresión más corta de 10 * 2
es 10 + 10
.
Los números involucrados en la entrada serán todos enteros positivos, y la expresión consistirá solo en +
(suma), *
(multiplicación) y ^
(exponenciación), junto con enteros y corchetes (()
) para indicar la precedencia.
La salida debe consistir en enteros positivos y +
símbolos solamente. No debe generar los pasos individuales de las reducciones, solo el resultado final. La salida puede no consistir en ningún número que no aparezca en la entrada. Sin embargo, puede usar 3 símbolos distintos en lugar de +*^
, pero diga qué símbolos son
Los espacios que separan las entradas y las salidas pueden o no usarse en sus programas, es decir, 3 * 5
pueden salir como 5 + 5 + 5
o 5+5+5
.
Tenga en cuenta que en la mayoría de los casos, la adición no se realiza realmente. El único caso en el que se debe realizar la suma es cuando tiene algo como 5 ^ (1 + 2)
, en cuyo caso, la adición es necesaria para continuar-> 5 ^ 3 -> 5 * 5 * 5 -> ...
. Ver caso de prueba # 4.
Su código no necesita manejar entradas que llegan a una expresión ambigua. Por ejemplo, (2 + 2) * (4 + 1)
. Debido a las reglas establecidas hasta ahora, el objetivo no es calcular la respuesta, sino simplificar las adiciones. Entonces, el resultado podría ser diferente dependiendo del orden en que las expresiones se resuelvan o conmuten (¿qué adiciones simplificar, cuáles dejar?). Otro ejemplo válido: ((3 + 2) ^ 2) ^ 3 -> ((3 + 2) * (3 + 2)) ^ 3 -> ???
.
Esto es código golf por lo que el código más corto gana
Casos de prueba
Input => output
5 ^ 3 + 4 * 1 ^ 5 => 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 4
2 ^ 1 * 2 + 3 + 9 => 2 + 2 + 3 + 9
2 ^ 1 * (2 + 3) + 9 => 2 + 3 + 2 + 3 + 9
2 ^ (1 * (2 + 3)) + 9 => 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 9
10 + 3 * 2 + 33 ^ 2 => 10 + 3 + 3 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33
100 * 3 => 100 + 100 + 100
2 ^ 1 + 2 ^ 1 + 2 ^ 2 + 8 ^ 1 => 2 + 2 + 2 + 2 + 8
(1 + 2 + 5 * 8 + 2 ^ 4) * 2 => 1 + 2 + 8 + 8 + 8 + 8 + 8 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 1 + 2 + 8 + 8 + 8 + 8 + 8 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2
using only one of the two numbers in the original expression.
pero la expresión original puede tener más de dos números. No entiendo por qué 8 + 8
no es una salida válida para 2 ^ 1 + 2 ^ 1 + 2 ^ 2 + 8 ^ 1
. Esta pregunta todavía no está clara para mí.
**
lugar de^
?