Składnia
~
nie
/\
i
\/
czy
t
prawdziwe
f
fałszywe
P
, Q
, FISH
itp: zmienne
(Operatory są podane w kolejności pierwszeństwa)
Wprowadzenie
Niektóre formuły logiczne można zmienić na różne formy, aby je skrócić. Na przykład formuła
~(~P /\ ~Q)
można zmienić na krótszą formę
P\/Q
podczas gdy formuła
P \/ ~P
można zmienić na krótszą formę
t
Wyzwanie
W tym wyzwaniem, które są wymagane, aby napisać program, który mając każdy logiczna formuły przy użyciu tylko /\
, \/
, ~
, t
, f
, nawiasów zmiennych logicznych (w wielkie litery), a spacje, wyjścia najkrótszej formy (ponieważ nie może być więcej niż jedna najkrótsza forma ) w znakach tego wyrażenia, które jest równoważne dla wszystkich przypisań zmiennych. Najkrótszy kod (w dowolnym języku) wygrywa. I / O można wykonać w dowolny rozsądny sposób.
Ponieważ odpowiedzi są trudne do zweryfikowania, pomocne byłoby (ale nie jest to wymagane) podanie krótkiego wyjaśnienia, jak działa kod.
BooleanMinimize
)b9c98d088b78c30bb2108008a064a7b95722a4694d90ddad94a025c2eb4ed30a
. Właściwy kod opublikuję później, ponieważ nie chcę stłumić kreatywności.Odpowiedzi:
No tak, zapomniałem opublikować moją odpowiedź. Wykorzystuje dokładnie to samo podejście, którego używa odpowiedź KSab , ale drukuje tylko najkrótsze prawidłowe wyrażenie.
Python3, 493
Zauważ, że hash I obliczane wcześniej obejmował nowej linii spływu i było zanim ja grałem
def e(x): return
nae=lambda x:
źródło
Python 616
Nie jest szczególnie wydajny, ale działa w rozsądnym czasie dla danych wejściowych, których wyniki mają około 5 lub 6 znaków. Aby sprawdzić ciąg znaków, aby sprawdzić, czy pasuje, przechodzi przez każdą możliwą kombinację wartości prawda / fałsz dla wszystkich zmiennych i upewnia się, że każda z nich się zgadza. Za pomocą tego sprawdza każdy możliwy ciąg znaków złożony z odpowiednich znaków (nawet niekoniecznie poprawny pod względem składniowym).
W rzeczywistości wydrukuje każde równoważne wyrażenie (każdego rozmiaru) i tak naprawdę nigdy się nie zakończy.
Kod:
Wejście / Ouput:
źródło