Die Multiplikation zwischen 2 ganzen Zahlen kann wie folgt zu einer Reihe von Additionen reduziert werden
3 * 5 = 3 + 3 + 3 + 3 + 3 = 5 + 5 + 5
Die Potenzierung (Erhöhen von a zur Potenz von b ) kann auch in eine Reihe von Multiplikationen reduziert werden:
5 ^ 3 = 5 * 5 * 5
Daher kann die Exponentiation durch Erzeugen eines Multiplikationsausdrucks in eine Reihe von Additionen und dann in eine Reihe von Additionen reduziert werden. Zum Beispiel kann 5 ^ 3
(5 Würfel) als umgeschrieben werden
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
Ihre Aufgabe ist es, gegebene Ausdrücke, die aus Exponentiation, Multiplikation und Addition bestehen, auf die kürzeste Additionsserie zu reduzieren. Der "kürzeste" Ausdruck ist definiert als der Ausdruck mit der geringsten Anzahl von +
Symbolen, wobei immer noch nur eine der beiden Zahlen im ursprünglichen Ausdruck verwendet wird. Zum Beispiel kann der kürzeste Ausdruck 10 * 2
ist 10 + 10
.
Die an der Eingabe beteiligten Zahlen sind alle positive Ganzzahlen, und der Ausdruck besteht nur aus +
(Addition), *
(Multiplikation) und ^
(Exponentiation) sowie aus Ganzzahlen und Klammern ( ()
), um die Vorrangstellung anzuzeigen.
Die Ausgabe sollte nur aus positiven Ganzzahlen und +
Symbolen bestehen. Sie sollten nicht die einzelnen Reduktionsschritte ausgeben, sondern nur die endgültige Ausgabe. Die Ausgabe darf keine Zahlen enthalten, die nicht in der Eingabe enthalten sind. Sie können jedoch auch 3 verschiedene Symbole anstelle von verwenden +*^
. Geben Sie jedoch an, um welche Symbole es sich handelt
Die Leerzeichen zwischen Ein- und Ausgängen können in Ihren Programmen verwendet werden oder auch nicht, dh sie 3 * 5
können entweder als 5 + 5 + 5
oder ausgegeben werden 5+5+5
.
Beachten Sie, dass die Addition in den meisten Fällen nicht durchgeführt wird. Der einzige Fall, in dem das Hinzufügen durchgeführt werden soll, ist, wenn Sie so etwas 5 ^ (1 + 2)
haben. In diesem Fall ist das Hinzufügen erforderlich, um fortzufahren -> 5 ^ 3 -> 5 * 5 * 5 -> ...
. Siehe Testfall 4.
Ihr Code muss keine Eingaben verarbeiten, die zu einem mehrdeutigen Ausdruck führen. Zum Beispiel (2 + 2) * (4 + 1)
. Aufgrund der bisher festgelegten Regeln ist es nicht das Ziel, die Antwort zu berechnen, sondern das Ziel, das Hinzufügen zu vereinfachen. Das Ergebnis kann je nach der Reihenfolge, in der Ausdrücke aufgelöst oder umgewandelt werden, unterschiedlich sein (welche Zusätze sind zu vereinfachen, welche zu belassen?). Ein weiteres ungültig Beispiel: ((3 + 2) ^ 2) ^ 3 -> ((3 + 2) * (3 + 2)) ^ 3 -> ???
.
Das ist Code-Golf, also gewinnt der kürzeste Code
Testfälle
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.
, kann der ursprüngliche Ausdruck aber mehr als zwei Zahlen haben. Ich verstehe nicht, warum 8 + 8
keine gültige Ausgabe für ist 2 ^ 1 + 2 ^ 1 + 2 ^ 2 + 8 ^ 1
. Diese Frage ist mir noch ziemlich unklar.
**
statt verwenden^
?