Betrachten wir eine Grammatik über dem Alphabet { 0, 1, ?, :} durch die definierte Produktionsregel
s →
0┃1┃0?s:s ┃1?s:s
Analysieren Sie einen aus s generierten String als Ausdruck, bei dem es sich um einen rechtsassoziativen Ausdruck ?:handelt (z. B. a?B?X:Y:c?d:e?f:gMittelwert a?(B?X:Y):(c?d:(e?f:g))), und werten Sie ihn mit der folgenden Semantik aus:
eval(0) = 0
eval(1) = 1
eval(0?a:b) = eval(b)
eval(1?a:b) = eval(a)
Wenn das Ergebnis 0 ist , geben Sie einen festen Wert aus. Wenn der Ausgang 1 ist , wird ein anderer fester Wert ausgegeben. Geben Sie in Ihrer Antwort die von Ihnen gewählten Ausgabewerte (z. B. 0/ 1oder False/ True) an.
Testfälle
0 -> 0
1 -> 1
0?0:1 -> 1
0?1:0 -> 0
1?0:1 -> 0
1?1:0 -> 1
0?1?0:1:1 -> 1
1?0?1:1:1 -> 1
1?0:1?0:1?1:1 -> 0
1?1?1:0?1?0:0:0:0 -> 1
1?0:1?0?1:1?1:0:1?1?1:1:1?0:1 -> 0
1?1?1:0?0?1:1:0?1:0:1?1?0?0:0:1?1:0:0?1?0:1:1?0:1 -> 1
0?0?1?0?0:1:0?0:0:0?0?1:1:1?0:1:0?0?0?1:0:0?1:1:1?1?0:1:1 -> 0
Regeln
- In einigen Programmiersprachen (z. B. JavaScript / Perl / Ruby / Python's
eval) dürfen keine integrierten Sprachen verwendet werden, die Zeichenfolgen als Code interpretieren und ausführen . - Dies vorausgeschickt , ist der Code nicht tatsächlich zu parsen und dann bewertet die Eingabezeichenfolge. Sie können jeden Ansatz wählen, um gleichwertige Ergebnisse zu erzielen, und verstoßen nicht gegen die vorherige Regel.
- Ihr Programm wird gegen geprüft
perl -le 'print eval<>'. - Der kürzeste Code (in Bytes) gewinnt.
S → T | T ? S : S, T → 0 | 1die Notwendigkeit zu entfernen über Assoziativität zu sprechen?