Considere una gramática sobre el alfabeto { 0
, 1
, ?
, :
} definido por la regla de producción
s →
0
┃1
┃0
?
s:
s ┃1
?
s:
s
Dada una cadena generada a partir de s , analícela como una expresión donde ?:
sea asociativa a la derecha (por ejemplo, a?B?X:Y:c?d:e?f:g
significa a?(B?X:Y):(c?d:(e?f:g))
) y evalúela con la siguiente semántica:
eval(0) = 0
eval(1) = 1
eval(0?a:b) = eval(b)
eval(1?a:b) = eval(a)
Si el resultado es 0 , genera un valor fijo; si la salida es 1 , genera un valor fijo diferente. Especificar sus valores de salida elegidos (por ejemplo, 0
/ 1
o False
/ True
) en su respuesta.
Casos de prueba
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
Reglas
- No puede utilizar el lenguaje incorporado que interpreta cadenas como código en algún lenguaje de programación y ejecutarlo (como JavaScript / Perl / Ruby / Python
eval
). - Dicho esto, su código en realidad no tiene que analizar y luego evaluar la cadena de entrada. Puede adoptar cualquier enfoque que logre resultados equivalentes y no viole la regla anterior.
- Su programa será verificado contra
perl -le 'print eval<>'
. - El código más corto (en bytes) gana.
S → T | T ? S : S
, T → 0 | 1
, la eliminación de la necesidad de hablar de asociatividad?