Continuación de este desafío porque el autor se ha ido y la pregunta está cerrada.
Lo que debe hacer es crear un analizador booleano.
Las expresiones booleanas, en caso de que aún no haya oído hablar de ellas, tienen dos entradas y una salida.
Hay cuatro "puertas" en la aritmética booleana, a saber:
- O (representado por
|
) (operador binario, entre argumentos) - AND (representado por
&
) (operador binario, entre argumentos) - XOR (representado por
^
) (operador binario, entre argumentos) - NOT (representado por
!
) (operador unario, argumento a la derecha)
Estas puertas operan en sus entradas que son verdaderas (representadas por 1
) o falsas (representadas por 0
). Podemos enumerar las posibles entradas ( A
y B
en este caso) y las salidas ( O
) usando una tabla de verdad de la siguiente manera:
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
Un ejemplo de entrada sería 1^((1|0&0)^!(1&!0&1))
, que se evaluaría para:
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
La salida sería 1
.
Detalles
- Como se ve en el ejemplo, no hay un orden de prevalencia. Todos se evalúan de izquierda a derecha, excepto cuando están entre paréntesis, que deben evaluarse primero.
- La entrada solo contendrá
()!^&|01
. - Puede elegir cualquier carácter de 8 bytes para reemplazar los 8 caracteres anteriores, pero deben tener una asignación de 1 a 1 y deben indicarse.
- Específicamente,
eval
no se permite usar la función en ninguna cadena derivada de la entrada . Específicamente, la funcióninput
(o el equivalente en el lenguaje) y cualquier función que lo llame no puede ser utilizada poreval
. Tampoco puede concatenarinput
en su cadena dentro deeval
.
Puntuación
Este es el código de golf . La solución más corta en bytes gana.