Schreiben Sie eine Funktion oder ein Programm, die bzw. das eine einfache Arithmetik (Addition, Subtraktion, Multiplikation und Division) sowohl in Basis 10 als auch in Basis 2 ausführen kann.
Die Funktion nimmt einen mathematischen Ausdruck als Eingabe und gibt das richtige Ergebnis in der richtigen Basis aus. Bei der Eingabe handelt es sich um n
Zahlen, die durch einen oder mehrere Operatoren ( + - * /
) getrennt werden.
Wenn alle Eingabewerte nur 0 und 1 enthalten, werden alle Werte als binär betrachtet. Wenn mindestens eine Ziffer vorhanden ist 2-9
, werden alle Werte als Basis 10 betrachtet.
Regeln:
- Sie können davon ausgehen, dass es nur einen Operator zwischen den Nummern gibt (
10*-1
wird nicht angezeigt). - Sie können davon ausgehen, dass es keine Klammern gibt.
- Normale Operatorrangfolge (im Zweifelsfall den Ausdruck im Google-Rechner verwenden).
- Sie können nicht davon ausgehen, dass es nur ganze Zahlen geben wird
- Es gibt keine führenden Nullen in der Eingabe oder Ausgabe
- Sie können davon ausgehen, dass nur gültige Eingaben gemacht werden
- Sie können davon ausgehen, dass alle Eingabewerte positiv sind (der Minus-Operator kann jedoch eine negative Ausgabe ermöglichen
1-2=-1
und10-100=-10
). - REPL wird nicht akzeptiert
- Sie können die Eingabe als separate Argumente oder als einzelnes Argument verwenden, die Eingabe muss jedoch in der richtigen Reihenfolge erfolgen.
- Dh Sie repräsentieren kann
1-2
mit den Eingabeargumente1
,-
,2
, aber nicht1
,2
,-
.
- Dh Sie repräsentieren kann
- Sie müssen die Symbole akzeptieren
+ - * /
in der Eingabe, nichtplus
,minus
usw. - Sie müssen Gleitkommawerte unterstützen (oder bis zur maximalen Grenze Ihrer Sprache, es werden jedoch keine Ganzzahlen unterstützt).
eval
ist akzeptiert
Beispiele:
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
Dies ist Codegolf, also gewinnt der kürzeste Code in Bytes.
code-golf
arithmetic
base-conversion
binary
Stewie Griffin
quelle
quelle
110/10
ist11.0
akzeptabel?Antworten:
Japt,
7772626062 *605951 BytesErklärung (mehr oder weniger die gleiche wie für die JS-Antwort):
Probieren Sie es online!
* nicht richtig geteilt
quelle
eval
zugeordnetOx
. Ich werde sehen, ob es weiter verkürzt werden kann.OxUf"[2-9]" ?U:`({Ur"\\d+(\\.\\d+)?""(($&e14+P).n(2)/16384)"}).s(2)
Es ist wahrscheinlich möglich, Japt-Code anstelle von JS zu generieren und diesen dannOv
zur Auswertung zu verwenden.OvUf"[2-9]" ?U:Ur"\\d+(\\.\\d+)?""~~[$&e14+P n2 /16384]" +" s2
Das~~[...]
ist notwendig, weil nicht übereinstimmende Klammern in einer Zeichenfolge mit dem Transpiler durcheinander sind .OvUf"[2-9]" ?U:"({Ur"[\\d.]+""º$&e14+P n2 /2pE¹"})¤
JavaScript ES6,
8797 1100 2106 310210198100 4938886 ByteDemo + Erklärung:
1 - Floats vergessen
2 - Floats-Problem erneut: parseInt Floors binär, daher muss ich mit 1e14 multiplizieren und dann durch 16384 dividieren
3 - Ich hoffe, dass die vorgegebene Aufgabe erfüllt ist, fange jetzt mit dem Golf an: D
4 - Es gab einen Fehler beim Teilen
quelle
e.match(/[2-9]/g)
zue.match`[2-9]`
.('0b'+$&*1e14)/1638
dies sollte funktionieren, aber ich bin nicht 100% sicherJolf, 31 Bytes, nicht konkurrierend
Ich habe eine anständige Anzahl von Funktionen hinzugefügt, die von dieser Herausforderung inspiriert sind, und daher wird sie als nicht konkurrierend angesehen. Ich bin glücklich, weil ich endlich unäre Funktionen implementiert habe (wie
(H,S,n)=>val
in ES6, aber in ES5 unterstützt!)Testsuite , versuchen Sie Ihren eigenen Eingang , oder manuell den Eingang eingestellt .
quelle
Bash, 60 Bytes
Beispiellauf:
quelle
dc
würde eine umgekehrte Reihenfolge der Operationen erfordern, was von der Herausforderung nicht zugelassen wird.𝔼𝕊𝕄𝕚𝕟 2, 46 Zeichen / 72 Bytes
Try it here (Firefox only).
Erläuterung
quelle
PowerShell, 107 Byte
Ungolfed
Beispiel
quelle