Utwórz program, który rozwiązuje wyrażenie matematyczne, używając elementów z naprzemiennych stron wyrażenia. Robi się to tak, że zamiast czytać od lewej do prawej, czytasz pierwszy znak, potem ostatni, potem drugi, potem od drugiego do ostatniego itd. To da ci nowe wyrażenie, które musisz ocenić i wygenerować.
a*b/c+d-e
135798642 <-- Order you read the expression in
ae*-bd/+c <-- Order of operation.
Przykład:
1*3/2+4-5
15*-34/+2 = -255
Jeśli wyrażenie nie «działa», 1należy wstawić a w niezbędne pozycje, aby działało.
Kilka przykładów prawdopodobnie lepiej to zilustruje:
Input: 1+1+1+1+1
Result: 23 // Because 1+1+1+1+1 -> 11++11++1 -> 23
Input: 1+2-3+12-5
Result: -19 // Because 1+2-3+12-5 -> 15+-22-13+ -> 15+-22-13+1 -> -19
// |
// Not valid expression
Input: 2*2*2*2*2
Result: 968 // Because 2*2*2*2*2 -> 22**22**2 -> 22*1*22*1*2 -> 968
// || ||
// Not valid, 1 must be inserted
Input: 17/2
Output: 127 // Because 17/2 = 127/ -> 127/1 -> 127
Obsługiwani są operatorzy + - * /. Nie będzie nawiasów. Stosowane są normalne reguły matematyczne i „składnia”, więc na przykład **nie oznacza to potęgowania. a++++1jest równoważne a+1(tj. styl MATLAB, a nie C ++).
W razie wątpliwości niektóre prawidłowe operacje to:
-a
+a
a++b
a+-b
a*-b
a*+b
a*++b
a/b
a/-b
a/+b
-a/--b
Chociaż wszystkie poniższe elementy są nieprawidłowe. Pokazano, co należy zastąpić:
a+ | a+1
a- | a-1
a++++ | a++++1 (This is equivalent to a+1)
a*+++ | a*+++1 (This is equivalent to a*1)
a**b | a*1*b
a*/b | a*1/b
a/*b | a/1*b
a* | a*1
*a | 1*a
***a | 1*1*1*a
Zasady:
- Kod może być funkcją lub pełnym programem
- Danymi wejściowymi może być STDIN lub argument funkcji
- Dane wejściowe muszą być prawidłowym wyrażeniem matematycznym bez cudzysłowów
''lub"". - Wynik powinien być odpowiedzią na nowe wyrażenie, jako liczbę całkowitą, dziesiętną lub ułamek uproszczony.
- Muszą być obsługiwane co najmniej trzy cyfry po przecinku. Więc
1/3 = 0.333nie0.33.0.333333333jest akceptowane. ans = ...jest akceptowane.- Wiodące i końcowe znaki nowej linii i spacje są akceptowane.
- Dane wejściowe będą tylko liczbami całkowitymi
- Dzielenie przez zero może skutkować błędem, NaN, Inf itp. Podanie liczby nie jest akceptowane.
Jak zawsze wygrywa najkrótszy kod w bajtach. Zwycięzca zostanie wybrany tydzień po opublikowaniu wyzwania. Odpowiedzi zamieszczone później mogą nadal wygrywać, jeśli są krótsze niż aktualny lider.
0/0jeśli wyrażenie zmienia się na dzielenie całkowite lub modulo przez zero?
x/0jest to poprawny wynik. Dopóki nie wyświetli niepoprawnej odpowiedzi, jest OK. Błąd i „Brak liczby” jest z definicji poprawny, a nieskończoność jest „wystarczająco poprawna”,
2^64, czy powinienem ją zawinąć lub zawinąć, jeśli przejdziesz?