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:g
Mittelwert 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
/ 1
oder 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 | 1
die Notwendigkeit zu entfernen über Assoziativität zu sprechen?