Kürzlich habe ich eine neue Sprache geschrieben , um die Reihenfolge der Operationen nicht zu ändern. Ich setze einfach die einzelnen Ausdrücke in Klammern, um dies vollständig zu vermeiden.
Da sich die Klammern bei den Zeichencodes 40-41 befinden, muss Ihr Code so kurz wie möglich sein.
Beispiele
1+2*3
(1+(2*3))
2*(3+4)
(2*(3+4))
2*3/4+3
(((2*3)/4)+3)
342*32/8
((342*32)/8)
Regeln
Die einzigen Operationen, die Sie ausführen müssen, sind: *
(Multiplikation), /
(Division), +
(Addition) und -
(Subtraktion).
- Die Reihenfolge der Operationen ist:
- Klammer
- Multiplikation, Division
- Addition, Subtraktion
- Sie sollten es vorziehen, von links nach rechts zu gehen
- Die eingegebenen Zahlen sind immer positive ganze Zahlen (siehe Boni)
Boni
-20% bei Negation:
3+-5
(3+(-5))
-5%, wenn Sie Leerzeichen innerhalb der Eingabe zulassen:
3 + 4
(3+4)
-10%, wenn Sie Dezimalstellen in der Eingabe verarbeiten können:
1+.12
(1+.12)
1+0.21/3
(1+(0.21/3))
500 Kopfgeld: Wenn Sie es schaffen, eine Antwort in Unbenannt / Blöcke zu schreiben
code-golf
arithmetic
balanced-string
Downgoat
quelle
quelle
1+2+3+4
(welche bestimmten Lösungen könnten in Klammern stehen((1+2)+(3+4))
)Antworten:
Python 153 * 0,9 = 137,7 Bytes
Dieses Programm verarbeitet die Dezimaleingabe.
Die zweite Zeile beginnt mit einem Leerzeichen, die zweite mit einem Tabulator, die dritte mit zwei Tabulatoren und die dritte mit einem Leerzeichen. Dies sparte ein Byte. Hier ist ein Hexdump (
xxd
pp):Hier ist ein Programm, das ich zum Testen verwendet habe: (Speichern Sie das Programm oben als
paren.py
)Stellen Sie sicher, dass Ihr Terminal den
\033[38;5;<COL>m
Escape-Code für Farben verwendet.quelle
prefer to go left-right
. Probieren Sie den Testfall 3 im OP aus, Ihr Ergebnis ist nicht korrekt. Dies kann beispielsweise bei Ganzzahlarithmetik ein echtes Problem sein((2*(3/4))+3)
(((2*3)/4)+3)
JavaScript (ES6) 179 (263 -20% -5% -10%)
Da die beiden anderen Antworten derzeit beide falsch sind, werde ich meine posten. Es ist eine Variation des Ausdrucksparsers, den ich hier und hier und woanders verwendet habe. Hier finden Sie genauere Erklärungen zu den Algorithmen.
Es ist ziemlich sperrig, aber es sollte funktionieren.
Testschnipsel
quelle
Python, 241 * 0,8 * 0,95 * 0,9 = 164,84 Zeichen
Ich verwende die ast-Bibliothek (Abstract Syntax Trees) und ein Homebrew-String-Ersetzungsdiktat. Das Ersetzen der Saiten kostet viel, aber der Bonus hilft dabei, die Punktzahl etwas niedrig zu halten. Vielleicht kann (das Saitenersatzteil) weiter Golf gespielt werden.
Beachten Sie, dass diese Lösung jeder Zahl einen zusätzlichen Satz von Klammern hinzufügt, aber ich denke, dass dies dem Sinn der Frage entspricht
Testsuite:
Ausgabe der Testsuite:
quelle
import ast
in Ihrem Code