Ich sehe deine BIDMAS und ziehe dir ein BADMIS auf
Herausforderung
Wenn eine Reihe von Zahlen mit Operatoren dazwischen gegeben ist: "5 + 4 * 9/3 - 8", geben Sie alle möglichen Ergebnisse des Ausdrucks für jede Permutation in der Reihenfolge der Grundoperationen zurück: [/, *, +, -].
Regeln
- Standardlücken verboten
- I / O
- Die Eingabe muss mit Infix-Operationen bestellt werden, dies ist jedoch am einfachsten (Zeichenfolge oder Array).
- Sie müssen keine unären Operatoren unterstützen (z. B. "-3 * 8 / +2")
- Ganzzahlen können durch Gleitkommazahlen für Sprachen ersetzt werden, die den Typ implizit analysieren (z. B. 45 ⟶ 45.0).
- Die Ausgabe muss alle möglichen Ergebnisse des Ausdrucks enthalten, kein bestimmtes Format oder keine bestimmte Reihenfolge
- Alle Eingaben sind gültig (z. B. muss nicht mit "7/3 + *" umgegangen werden). Dies bedeutet auch, dass Sie niemals durch Null teilen müssen.
- Operatoren sind alle linksassoziativ, so dass "20/4/2" = "(20/4) / 2"
- Dies ist Code Golf, so dass die geringste Anzahl von Bytes gewinnt
Testfälle (mit Erläuterung)
- "2 + 3 * 4" = [14, 20]
- 2 + (3 * 4) ≤ 2 + (12) ≤ 14
- (2 + 3) * 4 ≤ (5) * 4 ≤ 20
- "18/3 * 2 - 1" = [11, 2, 6]
- ((18/3) * 2) - 1 ≤ ((6) * 2) - 1 ≤ (12) - 1 ≤ 11
- (18/3) * (2 - 1) ≤ (6) * (1) ≤ 6
- (18 / (3 * 2)) - 1 ⟶ (18 / (6)) - 1 ⟶ (3) - 1 ⟶ 2
- 18 / (3 * (2 - 1)) ≤ 18 / (3 * (1)) ≤ 6
- 18 / ((3 * 2) - 1) ≤ 18/5 ≤ 3.6
Testfälle (ohne Erklärung)
- "45/8 + 19/45 * 3" = [6.891666666666667, 18.1416666666666, 0.11111111111111113, 0.01234567901234568, 0.01234567901234568, 5.765740740740741]
- "2 + 6 * 7 * 2 + 6/4" = [112 196 23 87.5]
code-golf
permutations
Freddie R
quelle
quelle
2 - 3 + 4
=>[-5, 3]
2*3-6+2-9/6*8+5/2-9
24 eindeutige Ergebnisse.Antworten:
JavaScript (V8) ,
118112 BytesDruckt die Ergebnisse.
Probieren Sie es online!
Oder sehen Sie sich die deduplizierten Ergebnisse an .
quelle
C # (Visual C # Interactive Compiler) , 285 Byte
Probieren Sie es online!
quelle
JavaScript (Node.js) , 132 Byte
Probieren Sie es online!
Dies ermöglicht doppelte Ausgaben.
JavaScript (Node.js) ,
165161155153152137 BytesProbieren Sie es online!
Nimmt eine Zeichenfolge mit Leerzeichen zwischen Operatoren und Zahlen.
quelle
[3, -5]
jetzt ausgegeben werden .Perl 6 ,
92 9088 BytesProbieren Sie es online!
Nimmt eine Zeichenfolge mit einem Leerzeichen hinter Operatoren und gibt eine Reihe von Zahlen zurück. Dies funktioniert hauptsächlich, indem alle Instanzen von
n op n
durch das ausgewertete Ergebnis für alle Permutationen der Operatoren ersetzt werden.Erläuterung:
quelle
set
, da die Bedingung zum Entfernen von Duplikaten entfernt wurde. Netter Code.Python 3 , 108 Bytes
Probieren Sie es online!
Die Funktion nimmt eine einzelne Zeichenfolge als Eingabe und gibt eine Liste möglicher Ergebnisse zurück.
Ungolfed
Probieren Sie es online!
quelle
Gelee , 30 Bytes
Probieren Sie es online!
Ein paar Links. Der zweite Link ist der Hauptlink und basiert auf einer Jelly-Liste von Gleitkommazahlen / Ganzzahlen, die mit den Operatoren als Zeichen durchsetzt sind. Dies ist eine abgeflachte Version der Art und Weise, wie Jelly seine Eingabe aufnimmt, wenn es als vollständiges Programm mit Befehlszeilenargumenten ausgeführt wird. Der Rückgabewert des Links ist eine Liste mit Listen einzelner Mitglieder, von denen jede einen möglichen Wert für den Ausdruck darstellt.
Erläuterung
Hilfslink
Nimmt eine Liste von Gleitkommazahlen / Ganzzahlen im Wechsel mit Operatoren (als Zeichen) als linkes Argument und einen Operator als Zeichen als rechtes Argument; Gibt die Eingabeliste zurück, nachdem die durch den entsprechenden Operator getrennten Zahlen von links nach rechts ausgewertet wurden.
Hauptlink
Erstellt eine Liste von Gleitkommazahlen / Ganzzahlen im Wechsel mit Operatoren (als Zeichen)
quelle
Python 2 ,
182172 BytesProbieren Sie es online!
Nimmt Eingaben mit als Gleitkommazahlen formatierten Ints entgegen (siehe "Ganzzahlen können durch Gleitkommazahlen für Sprachen ersetzt werden, die implizit den Typ analysieren").
quelle
Julia 1,2 , 88 (82) Bytes
Nimmt ein Band in Form eines Vektors von Zahlen und Infixfunktionen, wertet jeden einzelnen Funktionsaufruf aus und übergibt jedes resultierende Band rekursiv an sich selbst, bis nur noch eine einzige Zahl übrig ist. Funktioniert
get(t, (), ...)
in Julia 1.0 leider nicht richtig, daher wird eine neuere Version benötigt.Sechs Bytes können gespeichert werden, wenn eine Reihe verschachtelter Arrays als Ausgabe zulässig ist:
Ausgabe:
quelle
Perl 5 (
-alp
), 89 BytesTIO
oder eindeutige Werte, 99 Bytes
quelle