Continuação deste desafio porque o autor se foi e a pergunta está encerrada.
O que você precisa fazer é criar um analisador booleano.
Expressões booleanas, caso você ainda não as tenha ouvido, têm duas entradas e uma saída.
Existem quatro "portas" na aritmética booleana, a saber:
- OR (representado por
|
) (operador binário, entre argumentos) - AND (representado por
&
) (operador binário, entre argumentos) - XOR (representado por
^
) (operador binário, entre argumentos) - NOT (representado por
!
) (operador unário, argumento à direita)
Esses portões operam em suas entradas que são verdadeiras (representadas por 1
) ou falsas (representadas por 0
). Podemos listar as entradas possíveis ( A
e B
, neste caso) e as saídas ( O
) usando uma tabela verdade da seguinte maneira:
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
Um exemplo de entrada seria 1^((1|0&0)^!(1&!0&1))
, que seria avaliado 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
A saída seria 1
.
Detalhes
- Como visto no exemplo, não há ordem de prevalência. Todos são avaliados da esquerda para a direita, exceto quando entre parênteses, que devem ser avaliados primeiro.
- A entrada conterá apenas
()!^&|01
. - Você pode escolher qualquer caractere de 8 bytes para substituir os 8 caracteres acima, mas eles devem ter um mapeamento de 1 para 1 e devem ser indicados.
- Especificamente, a função
eval
não pode ser usada em nenhuma sequência derivada da entrada . Especificamente, a funçãoinput
(ou o equivalente no idioma) e qualquer função que a chama não podem ser usadaseval
. Você também não pode concatenar oinput
em sua string dentro doeval
.
Pontuação
Isso é código-golfe . A solução mais curta em bytes vence.