Syntaxe
~
pas
/\
et
\/
ou
t
vrai
f
faux
P
, Q
, FISH
, etc: les variables
(Les opérateurs sont indiqués par ordre de priorité)
introduction
Certaines formules booléennes peuvent être modifiées en différentes formes pour les raccourcir. Par exemple, la formule
~(~P /\ ~Q)
peut être changé en forme plus courte
P\/Q
tandis que la formule
P \/ ~P
peut être changé en forme plus courte
t
Défi
Dans ce défi, vous devez écrire un programme qui, étant donné une formule booléenne en utilisant seulement /\
, \/
, ~
, t
, f
, entre parenthèses, les variables booléennes (en majuscules), et les espaces, émet une forme plus courte (car il peut y avoir plus d'une forme plus courte ) en caractères de cette expression qui est équivalente pour toutes les affectations des variables. Le code le plus court (dans n'importe quelle langue) gagne. Les E / S peuvent être effectuées de toute manière raisonnable.
De plus, comme les réponses sont difficiles à vérifier, il serait utile (mais pas obligatoire) d'inclure une brève explication du fonctionnement du code.
BooleanMinimize
)b9c98d088b78c30bb2108008a064a7b95722a4694d90ddad94a025c2eb4ed30a
. Je posterai le code réel à une date ultérieure, car je ne veux pas étouffer la créativité.Réponses:
Oh oui, j'ai oublié de poster ma réponse. Il utilise essentiellement la même approche exacte que celle utilisée par la réponse de KSab , mais n'imprime que l'expression valide la plus courte.
Python3, 493
Notez que le hachage que j'ai calculé plus tôt incluait la nouvelle ligne de fin et était avant de jouer
def e(x): return
au golf poure=lambda x:
la source
Python 616
Pas particulièrement efficace, mais fonctionne dans un délai raisonnable pour les entrées dont les résultats sont d'environ 5 ou 6 caractères. Pour vérifier une chaîne pour voir si elle correspond, elle parcourt toutes les combinaisons possibles de valeurs vrai / faux pour toutes les variables et s'assure que chacune est d'accord. En utilisant cela, il vérifie chaque chaîne possible composée des caractères pertinents (pas même nécessairement une syntaxiquement correcte).
Il affichera en fait toutes les expressions équivalentes (de toutes les tailles) et ne se terminera jamais.
Code:
Entrée / sortie:
la source