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 ( Ay Ben 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,
evalno 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 concatenarinputen su cadena dentro deeval.
Puntuación
Este es el código de golf . La solución más corta en bytes gana.