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.
code-golf
arithmetic
base-conversion
binary
Stewie Griffin
źródło
źródło
110/10
, czy jest do11.0
przyjęcia?Odpowiedzi:
Japt,
7772626062 *605951 bajtówObjaśnienie (mniej więcej takie samo jak w przypadku odpowiedzi JS):
Wypróbuj online!
* nie podzielił się poprawnie
źródło
eval
jest przypisanyOx
. Zobaczę, czy można to dalej skrócić.OxUf"[2-9]" ?U:`({Ur"\\d+(\\.\\d+)?""(($&e14+P).n(2)/16384)"}).s(2)
prawdopodobnie można wygenerować kod Japt zamiast JS, a następnie użyć goOv
do oceny.OvUf"[2-9]" ?U:Ur"\\d+(\\.\\d+)?""~~[$&e14+P n2 /16384]" +" s2
Jest~~[...]
to konieczne, ponieważ niedopasowane nawiasy w łańcuchu bałaganu z transpilerem .OvUf"[2-9]" ?U:"({Ur"[\\d.]+""º$&e14+P n2 /2pE¹"})¤
JavaScript ES6,
8797 1100 2106 310210198100 4938886 bajtówDemo + objaśnienie:
1 - zapomniałem o floatach
2 - znowu problem z floatami: parseInt podłogi binarne, więc muszę pomnożyć przez 1e14, a następnie podzielić przez 16384
3 - mam nadzieję, że osiągnięto podane zadanie, teraz zacznij grać w golfa: D
4 - wystąpił błąd przy dzieleniu
źródło
e.match(/[2-9]/g)
nae.match`[2-9]`
.('0b'+$&*1e14)/1638
to powinno działać, ale nie jestem w 100% pewienJolf, 31 bajtów, niekonkurujący
Dodałem przyzwoitą liczbę funkcji zainspirowanych tym wyzwaniem i dlatego uważa się je za niekonkurencyjne. Cieszę się, ponieważ w końcu zaimplementowałem jednoargumentowe funkcje (jak
(H,S,n)=>val
w ES6, ale są obsługiwane w ES5!)Zestaw testów , Spróbuj własne wejście , lub ręcznie ustawić wejście .
źródło
Bash, 60 bajtów
Przykładowy przebieg:
źródło
dc
wymagałby odwrotnej polskiej kolejności operacji, co jest niedozwolone przez wyzwanie.𝔼𝕊𝕄𝕚𝕟 2, 46 znaków / 72 bajty
Try it here (Firefox only).
Wyjaśnienie
źródło
PowerShell, 107 bajtów
Nie golfił
Przykład
źródło