Sie erhalten eine Reihe von logischen Anweisungen. Ihre Herausforderung besteht darin, diejenigen zu entfernen, die im Widerspruch zu den anderen stehen, jedoch auf optimale Weise (dh, eine minimale Anzahl von Anweisungen zu entfernen).
Herausforderung
Sie schreiben ein Programm oder eine Funktion, die eine Liste von Anweisungen als Eingabe verwendet, die minimale Anzahl von Anweisungen entfernt, sodass es eine Lösung gibt, und den Rest ausgibt.
Logik
Anweisungen bestehen aus Variablen A-Z
und Operatoren zwischen ihnen.
Es gibt 5 Operatoren : -
(nicht), v
(oder), ^
(und), ->
(wenn) und <->
(wennf).
Wahrheitstabelle:
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
Diese Operatoren können mit Klammern kombiniert werden ()
:
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
Logiksysteme bestehen aus einer oder mehreren Anweisungen .
Eine Lösung für das Logiksystem ist ein Zustand, in dem alle Aussagen gleichzeitig wahr sind.
Beispiele für Logiksysteme:
AvB
-(A<->B)
(AvB)->(-B)
Die einzige Lösung ist A = 1, B = 0
.
A^B
-(B<->A)
Dieser hat keine Lösung ; Ohne Kombination von A
und sind B
beide Aussagen wahr.
Eingang
Sie erhalten eine Reihe von Anweisungen als Eingabe. Dies kann über STDIN oder Funktionsargumente erfolgen, die als Array (in einem geeigneten Format) oder als durch Zeilenumbrüche oder Leerzeichen getrennte Zeichenfolge formatiert sind.
Die Aussagen haben die folgende Form (fast in 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" / "^" / "->" / "<->"
Beispielanweisungen:
A
Av(-B)
(A<->(Q^C))v((-B)vH)
Ausgabe
Sie müssen die (möglicherweise) reduzierten Aussagen in der genauen Form zurücksenden, in der Sie sie erhalten haben. Auch hier kann die Liste als Array von Zeichenfolgen oder als durch Zeilenumbrüche oder Leerzeichen getrennte Zeichenfolge formatiert werden.
Regeln
- Sie sollten immer die minimale Anzahl von Anweisungen entfernen. Wenn es mehrere mögliche Lösungen gibt, geben Sie eine davon aus.
- Sie können davon ausgehen, dass die Eingabe immer mindestens 1 Anweisung enthält und dass in der Eingabe keine Anweisungen wiederholt werden.
- Sie können nicht davon ausgehen, dass die Ausgabe immer eine Anweisung enthält. (siehe Beispiele)
- Die Verwendung von Standardlücken widerspricht der Gültigkeit Ihrer Antwort und eine davon muss entfernt werden.
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Beispiele
Eingang:
A^(-A)
Ausgabe:
(nothing)
Eingang:
A^B A<->(-B) A<->B
Ausgabe:
A^B A<->B
Eingang:
["AvB","A^B"]
Ausgabe:
["AvB","A^B"]
(AvB)->-B
sollte es sein(AvB)->(-B)
)A<->(Q^C))v((-B)vH
sind falsch gestampft.Antworten:
Ruby,
299298283279 BytesUngolfed:
quelle
Python 3, 431 Bytes
Im Moment nicht sehr golfen, aber ich denke, ich würde den Ball mit einer Antwort ins Rollen bringen. Probieren Sie es hier ,
g()
ist die Hauptfunktion.quelle
v
heißtor
.