Otrzymujesz zestaw instrukcji logicznych. Twoim wyzwaniem jest usunięcie tych, które są sprzeczne z innymi, ale w optymalny sposób (tj. Usunięcie minimalnej liczby instrukcji).
Wyzwanie
Napisz program lub funkcję, która pobiera jako listę listę instrukcji, usuwa minimalną liczbę instrukcji, tak aby istniało rozwiązanie, i wypisuje resztę.
Logika
Instrukcje składają się ze zmiennych A-Z
i operatorów między nimi.
Istnieje 5 operatorów : -
(nie), v
(lub), ^
(i), ->
(jeśli) i <->
(iff).
Tabela prawdy:
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
Operatory te można łączyć z nawiasami ()
:
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
Systemy logiczne składają się z 1 lub więcej instrukcji .
Rozwiązanie do układu logicznego jest stan, w którym wszystkie wypowiedzi są jednocześnie prawdziwe.
Przykłady układów logicznych:
AvB
-(A<->B)
(AvB)->(-B)
Jedynym rozwiązaniem jest A = 1, B = 0
.
A^B
-(B<->A)
Ten nie ma rozwiązania ; bez połączenia A
i B
oba stwierdzenia są prawdziwe.
Wejście
Otrzymasz zestaw instrukcji jako danych wejściowych. Można to zrobić za pomocą argumentów STDIN lub funkcji, sformatowanych jako tablica (w wygodnym formacie) lub ciąg znaków oddzielony znakiem nowej linii lub znak odstępu.
Oświadczenia będą miały następującą formę (w prawie 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" / "^" / "->" / "<->"
Przykładowe instrukcje:
A
Av(-B)
(A<->(Q^C))v((-B)vH)
Wynik
Musisz zwrócić (ewentualnie) zredukowany zestaw instrukcji w dokładnie takiej formie, w jakiej je otrzymałeś. Ponownie, lista może być sformatowana jako tablica ciągów znaków lub ciąg znaków oddzielony znakiem nowej linii lub znak odstępu.
Zasady
- Zawsze powinieneś usunąć minimalną liczbę instrukcji. Jeśli istnieje wiele możliwych rozwiązań, wypisz jedno z nich.
- Możesz założyć, że dane wejściowe zawsze zawierają co najmniej 1 instrukcję i że żadna instrukcja nie jest powtarzana w danych wejściowych.
- Nie można zakładać, że dane wyjściowe zawsze zawierają instrukcję. (patrz przykłady)
- Korzystanie ze standardowych luk jest sprzeczne z prawidłową odpowiedzią i jedną z nich należy usunąć.
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Przykłady
Wejście:
A^(-A)
Wynik:
(nothing)
Wejście:
A^B A<->(-B) A<->B
Wynik:
A^B A<->B
Wejście:
["AvB","A^B"]
Wynik:
["AvB","A^B"]
(AvB)->-B
powinno być(AvB)->(-B)
)A<->(Q^C))v((-B)vH
mish-mashed.Odpowiedzi:
Rubinowy,
299298283279 bajtówNie golfowany:
źródło
Python 3, 431 bajtów
W tej chwili niezbyt golfa, ale myślę, że rzuciłbym piłkę z odpowiedzią. Spróbuj tutaj ,
g()
to główna funkcja.źródło
v
jestor
.