Sintaxis
~
No
/\
y
\/
o
t
verdaderos
f
falsos
P
, Q
, FISH
, etc: Variables
(Los operadores se dan en orden de precedencia)
Introducción
Algunas fórmulas booleanas se pueden cambiar a diferentes formas para acortarlas. Por ejemplo, la fórmula
~(~P /\ ~Q)
se puede cambiar a la forma más corta
P\/Q
mientras que la fórmula
P \/ ~P
se puede cambiar a la forma más corta
t
Desafío
En este desafío, se le requiere para escribir un programa que, dado cualquier fórmula booleana utilizando únicamente /\
, \/
, ~
, t
, f
, paréntesis variables booleanas (en mayúsculas), y un espacio en blanco, da salida a una forma más corta (ya que puede haber más de una forma más corta ) en caracteres de esa expresión que es equivalente para todas las asignaciones de las variables. El código más corto (en cualquier idioma) gana. La E / S se puede hacer de cualquier manera razonable.
Además, dado que las respuestas son difíciles de verificar, sería útil (pero no es obligatorio) incluir una breve explicación de cómo funciona el código.
BooleanMinimize
)b9c98d088b78c30bb2108008a064a7b95722a4694d90ddad94a025c2eb4ed30a
. Publicaré el código real en una fecha posterior, ya que no quiero sofocar la creatividad.Respuestas:
Ah, claro, olvidé publicar mi respuesta. Utiliza esencialmente el mismo enfoque que utiliza la respuesta de KSab , pero imprime solo la expresión válida más corta.
Python3, 493
Tenga en cuenta que el hash computé anterior incluido el salto de línea final y era antes Jugamos al golf
def e(x): return
ae=lambda x:
fuente
Python 616
No es particularmente eficiente, pero funciona en un tiempo razonable para entradas cuyos resultados son de alrededor de 5 o 6 caracteres. Para verificar una cadena para ver si coincide, recorre todas las combinaciones posibles de valores de verdad / falso para todas las variables y se asegura de que cada una esté de acuerdo. Con esto, verifica cada cadena posible compuesta por los caracteres relevantes (ni siquiera necesariamente uno sintácticamente correcto).
En realidad imprimirá cada expresión equivalente (de cada tamaño) y en realidad nunca termina.
Código:
Entrada / salida:
fuente