Napisz funkcję lub program, który nie jest w stanie wykonać prostej arytmetyki (dodawanie, odejmowanie, mnożenie i dzielenie) zarówno w bazie 10, jak i 2.
Funkcja przyjmie wyrażenie matematyczne jako dane wejściowe i wyświetli poprawny wynik we właściwej podstawie. Dane wejściowe będą n
liczbami oddzielonymi przez jednego lub kilku operatorów ( + - * /
).
Jeśli wszystkie wartości wejściowe zawierają tylko 0 i 1, wszystkie wartości są uważane za binarne. Jeśli przynajmniej jedna cyfra jest 2-9
, wszystkie wartości są uważane za podstawę 10.
Zasady:
- Możesz założyć, że między liczbami będzie tylko jeden operator (
10*-1
nie pojawi się) - Możesz założyć, że nie będzie nawiasów.
- Normalne pierwszeństwo operatora (w razie wątpliwości wypróbuj wyrażenie w kalkulatorze Google).
- Nie możesz zakładać, że będą tylko liczby całkowite
- Nie będzie żadnych zer wiodących na wejściu lub wyjściu
- Możesz założyć, że podane zostaną tylko prawidłowe dane wejściowe
- Możesz założyć, że wszystkie wartości wejściowe są dodatnie (ale operator minus może umożliwić ujemne wyjście
1-2=-1
i10-100=-10
) - REPL nie jest akceptowane
- Możesz wziąć dane wejściowe jako osobne argumenty lub jako pojedynczy argument, ale dane wejściowe muszą być w odpowiedniej kolejności.
- Czyli może reprezentować
1-2
z argumentów wejściowych1
,-
,2
, ale nie1
,2
,-
.
- Czyli może reprezentować
- Musisz zaakceptować symbole
+ - * /
na wejściu, nieplus
,minus
itd. - Musisz obsługiwać wartości zmiennoprzecinkowe (lub do maksymalnego limitu swojego języka, jednak obsługa tylko liczb całkowitych nie jest akceptowana).
eval
jest akceptowany
Przykłady:
1+1
10
1010+10-1
1011
102+10-1
111
1+2+3
6
10*10*10
1000
11*11*11
11011
10*11*12+1
1321
10.1*10.1
110.01
20.2*20.2
408.04
10/5
2
110/10
11
Also accepted (optional line or comma-separated input):
10
+
10
-
1
11 <-- This is the output
To jest kod golfowy, więc wygra najkrótszy kod w bajtach.
110/10
, czy jest do11.0
przyjęcia?