Sintaxe
~
não
/\
e
\/
ou
t
verdadeiros
f
falsos
P
, Q
, FISH
, etc: variáveis
(Os operadores são dados em ordem de precedência)
Introdução
Algumas fórmulas booleanas podem ser alteradas para formas diferentes para torná-las mais curtas. Por exemplo, a fórmula
~(~P /\ ~Q)
pode ser alterado para a forma mais curta
P\/Q
enquanto a fórmula
P \/ ~P
pode ser alterado para a forma mais curta
t
Desafio
Neste desafio, você é obrigado a escrever um programa que, dado qualquer fórmula booleana usando apenas /\
, \/
, ~
, t
, f
, parênteses variáveis booleanas (em letras maiúsculas), e espaços em branco, produz uma forma mais curta (uma vez que pode haver mais de uma forma mais curta ) em caracteres dessa expressão que é equivalente a todas as atribuições das variáveis. O código mais curto (em qualquer idioma) vence. A E / S pode ser feita de qualquer maneira razoável.
Além disso, como as respostas são difíceis de verificar, seria útil (mas não obrigatório) incluir uma breve explicação de como o código funciona.
BooleanMinimize
)b9c98d088b78c30bb2108008a064a7b95722a4694d90ddad94a025c2eb4ed30a
. Postarei o código real em uma data posterior, pois não quero sufocar a criatividade.Respostas:
Ah, claro, eu esqueci de realmente postar minha resposta. Ele usa essencialmente a mesma abordagem que a resposta do KSab usa, mas imprime apenas a expressão válida mais curta.
Python3, 493
Observe que o hash que eu calculei anteriormente incluía a nova linha à direita e foi antes de jogar
def e(x): return
parae=lambda x:
fonte
Python 616
Não é particularmente eficiente, mas funciona em tempo razoável para entradas cujos resultados estão em torno de 5 ou 6 caracteres. Para verificar uma string para ver se ela corresponde, ela percorre todas as combinações possíveis de valores verdadeiros / falsos para todas as variáveis e garante que cada uma concorda. Usando isso, ele verifica todas as sequências possíveis compostas pelos caracteres relevantes (nem mesmo necessariamente as sintaticamente corretas).
Na verdade, ele imprime todas as expressões equivalentes (de todos os tamanhos) e nunca termina.
Código:
Entrada / Saída:
fonte