Biorąc pod uwagę wyrażenie arytmetyczne, które może obejmować nawiasy ( ()
), wykładniki ( ^
), dzielenie ( /
) i mnożenie ( *
), dodawanie ( +
) i odejmowanie ( -
) (w tej kolejności operacji), takie jak
a ^ (2 / 3) * 9 * 3 - 4 * 6
wypisuje to samo wyrażenie w notacji przedrostkowej.
(- (* (* (^ a (/ 2 3)) 9) 3) (* 4 6))
Spacje są opcjonalne na wejściu i wyjściu. Możesz założyć, że wszystkie operatory są lewostronne i że wszystkie liczby w wyrażeniu są jednocyfrowymi liczbami całkowitymi (tj [0-9]
.).
To wyzwanie dla golfa, więc wygrywa najkrótsze rozwiązanie.
3+4-5+6 = (((3+4)-5)+6)
czy((3+4)-(5+6))
?*
i/
mają taki sam priorytet, jak+
amd-
.Odpowiedzi:
Rubinowy 1,9 - 134
Całkiem złe, ale działa:
źródło
Python, 222 znaki
Podobnie jak Ruby, z wyjątkiem tego, że Python nie pozwala ci na nowo zdefiniować globalnych operacji, tylko operacje klasy.
źródło
Perl 6 (146 | 150)
Najprostszym sposobem na to jest zamiana podprogramów implementujących operatory na nowe.
Absolutna minimalna ilość bajtów do zrobienia tego w ten sposób wynosi:
146 bajtów, chociaż bardziej sensowne jest liczenie grafemów w Perlu 6.
Zakłada się, że „ wypisuje to samo wyrażenie w notacji przedrostkowej ” może po prostu odnosić się do wyniku wyrażenia, niekoniecznie wyjścia programu.
Trzeba by dodać
say
przed wyrażeniem, aby program wydrukował go do STDOUT. (150 bajtów)źródło
Unix TMG , 189 bajtów
Rozwiązanie jest prawie prosto z podręcznika dla języka, z tylko podstawowymi golfami.
Rozszerzony:
źródło