Fortsetzung dieser Herausforderung, weil der Autor weg ist und die Frage geschlossen ist.
Sie müssen lediglich einen booleschen Parser erstellen.
Boolesche Ausdrücke haben, falls Sie noch nichts davon gehört haben, zwei Eingänge und einen Ausgang.
In der Booleschen Arithmetik gibt es vier "Tore", nämlich:
- ODER (dargestellt durch
|
) (binärer Operator zwischen Argumenten) - UND (dargestellt durch
&
) (binärer Operator zwischen Argumenten) - XOR (dargestellt durch
^
) (binärer Operator zwischen Argumenten) - NICHT (dargestellt durch
!
) (unärer Operator, Argument rechts)
Diese Gatter arbeiten mit ihren Eingängen, die entweder wahr (dargestellt durch 1
) oder falsch (dargestellt durch 0
) sind. Wir können die möglichen Eingaben ( A
und B
in diesem Fall) und die Ausgaben ( O
) unter Verwendung einer Wahrheitstabelle wie folgt auflisten:
XOR
A|B|O
-----
0|0|0
0|1|1
1|0|1
1|1|0
OR
A|B|O
-----
0|0|0
0|1|1
1|0|1
1|1|1
AND
A|B|O
-----
0|0|0
0|1|0
1|0|0
1|1|1
NOT
A|O
---
0|1
1|0
Eine Beispieleingabe wäre 1^((1|0&0)^!(1&!0&1))
, die Folgendes auswerten würde:
1^((1|0&0)^!(1&!0&1))
=1^(( 1 &0)^!(1&!0&1))
=1^( 0 ^!(1&!0&1))
=1^( 0 ^!(1& 1&1))
=1^( 0 ^!( 1 &1))
=1^( 0 ^! 1 )
=1^( 0 ^ 0 )
=1^0
=1
Die Ausgabe wäre 1
.
Einzelheiten
- Wie im Beispiel zu sehen ist, gibt es keine Reihenfolge der Prävalenz. Alle werden von links nach rechts ausgewertet, außer in Klammern, die zuerst ausgewertet werden sollten.
- Die Eingabe enthält nur
()!^&|01
. - Sie können ein beliebiges 8-Byte-Zeichen auswählen, um die oben genannten 8 Zeichen zu ersetzen. Sie müssen jedoch eine 1-zu-1-Zuordnung aufweisen und angegeben werden.
- Insbesondere
eval
darf die Funktion nicht für Zeichenfolgen verwendet werden, die von der Eingabe abgeleitet wurden . Insbesondere können die Funktioninput
(oder das Äquivalent in der Sprache) und jede Funktion, die sie aufruft, nicht von verwendet werdeneval
. Sie können das auch nichtinput
in Ihre Zeichenfolge innerhalb der verketteneval
.
Wertung
Das ist Code-Golf . Die kürzeste Lösung in Bytes gewinnt.