Vous recevez un ensemble d'instructions logiques. Votre défi consiste à supprimer celles qui contredisent les autres, mais de la manière optimale (c'est-à-dire en supprimant un nombre minimal de déclarations).
Défi
Vous allez écrire un programme ou une fonction qui prend en entrée une liste d'instructions, supprime le nombre minimal d'instructions de sorte qu'il existe une solution et génère le reste.
Logique
Les instructions se composent de variables A-Z
et d' opérateurs entre elles.
Il existe 5 opérateurs : -
(pas), v
(ou), ^
(et), ->
(si) et <->
(ssi).
Table de vérité:
A | B | -A | AvB | A^B | A->B | A<->B
0 | 0 | 1 | 0 | 0 | 1 | 1
0 | 1 | 1 | 1 | 0 | 1 | 0
1 | 0 | 0 | 1 | 0 | 0 | 0
1 | 1 | 0 | 1 | 1 | 1 | 1
Ces opérateurs peuvent être combinés avec des parenthèses ()
:
A | B | -(AvB) | Av(-A) | A^(-A) | (AvB)->(-B)
0 | 0 | 1 | 1 | 0 | 1
0 | 1 | 0 | 1 | 0 | 0
1 | 0 | 0 | 1 | 0 | 1
1 | 1 | 0 | 1 | 0 | 0
Les systèmes logiques se composent d'une ou plusieurs instructions .
Une solution au système logique est un état où toutes les déclarations sont simultanément vraies.
Exemples de systèmes logiques:
AvB
-(A<->B)
(AvB)->(-B)
La seule solution est A = 1, B = 0
.
A^B
-(B<->A)
Celui-ci n'a pas de solution ; sans combinaison de A
et les B
deux affirmations sont vraies.
Contribution
Vous recevrez un ensemble de relevés en entrée. Cela peut être pris via STDIN ou des arguments de fonction, formatés comme un tableau (dans un format pratique) ou une chaîne séparée par des sauts de ligne ou des espaces.
Les relevés seront de la forme suivante (en quasi- ABNF ):
statement = variable / operation
operation = not-operation / binary-operation
not-operation = "-" operand
binary-operation = operand binary-operator operand
operand = variable / "(" operation ")"
variable = "A"-"Z"
binary-operator = "v" / "^" / "->" / "<->"
Exemples d'instructions:
A
Av(-B)
(A<->(Q^C))v((-B)vH)
Production
Vous devez renvoyer l'ensemble (éventuellement) réduit de relevés, sous la forme exacte que vous les avez reçue. Encore une fois, la liste peut être formatée sous la forme d'un tableau de chaînes ou d'une chaîne séparée par des sauts de ligne ou des espaces.
Règles
- Vous devez toujours supprimer le nombre minimal d'instructions. S'il existe plusieurs solutions possibles, sortez l'une d'entre elles.
- Vous pouvez supposer que l'entrée contient toujours au moins 1 instruction et qu'aucune instruction n'est répétée dans l'entrée.
- Vous ne pouvez pas supposer que la sortie contient toujours une instruction. (voir exemples)
- L'utilisation de failles standard contredit la validité de votre réponse et l'une d'entre elles doit être supprimée.
- Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte.
Exemples
Contribution:
A^(-A)
Production:
(nothing)
Contribution:
A^B A<->(-B) A<->B
Production:
A^B A<->B
Contribution:
["AvB","A^B"]
Production:
["AvB","A^B"]
(AvB)->-B
devrait l'être(AvB)->(-B)
)A<->(Q^C))v((-B)vH
sont en purée.Réponses:
Rubis,
299298283279 octetsNon golfé:
la source
Python 3, 431 octets
Pas très golfé en ce moment, mais je pense que je pourrais lancer la balle avec une réponse. Essayez-le ici ,
g()
c'est la fonction principale.la source
v
est -or
.