Gegeben ein arithmetischer Ausdruck, der Klammern ( ()
), Exponenten ( ^
), Division ( /
) und Multiplikation ( *
), Addition ( +
) und Subtraktion ( -
) (in dieser Reihenfolge der Operation) enthalten kann, wie z
a ^ (2 / 3) * 9 * 3 - 4 * 6
Den gleichen Ausdruck in Präfixnotation ausgeben.
(- (* (* (^ a (/ 2 3)) 9) 3) (* 4 6))
Leerzeichen sind sowohl in der Eingabe als auch in der Ausgabe optional. Sie können davon ausgehen, dass alle Operatoren linksassoziativ sind und dass alle Zahlen im Ausdruck einstellige Ganzzahlen sind [0-9]
.
Dies ist eine Code-Golf-Herausforderung, daher gewinnt die kürzeste Lösung.
3+4-5+6 = (((3+4)-5)+6)
oder((3+4)-(5+6))
?*
und/
haben die gleiche Priorität wie+
amd-
.Antworten:
Rubin 1,9 - 134
Ziemlich böse, aber es funktioniert:
quelle
Python, 222 Zeichen
Ähnlich wie Ruby, außer dass Sie in Python nicht die globalen Operationen neu definieren können, sondern nur die Operationen einer Klasse.
quelle
Perl 6 (146 | 150)
Der einfachste Weg, dies zu tun, besteht darin, die Subroutinen, die die Operatoren implementieren, gegen neue auszutauschen.
Die absolute Mindestanzahl von Bytes dafür ist:
146 Bytes, obwohl es sinnvoller ist, Grapheme in Perl 6 zu zählen.
Dies setzt voraus, dass " denselben Ausdruck in Präfixnotation ausgeben " sich nur auf das Ergebnis des Ausdrucks beziehen könnte, nicht unbedingt auf die Ausgabe des Programms.
Sie müssten
say
vor dem Ausdruck hinzufügen , damit das Programm ihn in STDOUT druckt. (150 Bytes)quelle
Unix TMG , 189 Bytes
Die Lösung ist fast direkt aus dem Handbuch für die Sprache, mit nur einfachen Golfspielen.
Erweitert:
quelle