Giriş
Hayattaki göreviniz basit: İnternette yanlış olduğunu kanıtlayın!
Bunu yapmak için genellikle ifadelerini dikkatlice analiz eder ve içlerindeki çelişkiyi belirtirsiniz.
Bunu otomatikleştirmenin zamanı geldi, ancak tembel olduğumuz için, mümkün olan en az çabayla (okuma: en kısa kod) insanları yanlış kanıtlamak istiyoruz.
Şartname
Giriş
Girişiniz normal normal formda bir formül olacaktır . Format için, aşağıdaki formatı kullanabilir veya kendi dilinizi, kendi dilinizin ihtiyaçlarına göre tanımlayabilirsiniz (formatta saf CNF'den daha fazla kodlayamayabilirsiniz). Bununla birlikte, test senaryoları (burada) aşağıdaki formatta verilmiştir (kendinizinkini oluşturmak çok zor olmasa da).
Girişiniz bir değişkenler listesinin listesi olacaktır (dizeleri de okuyabilirsiniz / dizeleri de isteyebilirsiniz). Bu girdi , her biri iki listenin bir listesi olan bir dizi cümle olarak yazılmış, konjonktif normal formda (CNF) bir formüldür . Maddede ilk liste olumlu değişmezleri (değişkenler), ikinci liste olumsuz (olumsuzlanmış) değişmezleri (değişkenleri) kodlar. Maddede her değişken birlikte OR'lü ve tüm maddeler birlikte AND'lu.
Netleştirmek için: [[[A,B],[C]],[[C,A],[B]],[[B],[A]]]
olarak okunabilir:
(A OR B OR (NOT C)) AND (C OR A OR (NOT B)) AND (B OR (NOT A))
Çıktı
Çıktı boolean, örneğin, bazı truthy değeri veya bazı falsy değeri.
Ne yapalım?
Çok basit: Eldeki formülün tatmin edici olup olmadığını kontrol edin; örneğin, genel formülün "true" vereceği şekilde tüm değişkenlere bazı doğru ve yanlış atamalarının olup olmadığını kontrol edin. Çıktı, formül doyurucuysa "true", değilse doyurucu "false" olacaktır.
Eğlence Gerçeği: Bu, genel durum için NP tamamlayıcı bir sorundur.
Not: Bir doğruluk tablosu oluşturmak ve elde edilen herhangi bir girişin doğru olup olmadığını kontrol etmek mümkündür.
Köşe Kılıfları
Boş bir 3. seviye listesi alırsanız, o maddede böyle bir (pozitif / negatif) değişken yoktur - geçerli bir giriş.
İsterseniz diğer köşe kılıflarını tanımsız bırakabilirsiniz.
Ayrıca boş bir formülde (1. seviye listesi) true ve boş bir maddeye (2. seviye listesi) yanlış dönebilirsiniz.
Kim kazanır?
Bu kod-golf yani bayt cinsinden en kısa cevap kazanır!
Standart kurallar elbette geçerlidir.
Test-vakalar
[[[P],[Q,R]],[[Q,R],[P]],[[Q],[P,R]]] -> true
[[[],[P]],[[S],[]],[[R],[P]],[[U],[Q]],[[X],[R]],[[Q],[S]],[[],[P,U]],[[W],[Q,U]]] -> true
[[[],[P,Q]],[[Q,P],[]],[[P],[Q]],[[Q],[P]]] -> false
[[[P],[]],[[],[P,S]],[[P,T],[]],[[Q],[R]],[[],[R,S]],[[],[P,Q,R]],[[],[P]]] -> false
optional behavior (not mandatory, may be left undefined):
[] -> true (empty formula)
[[]] -> false (empty clause)
[[[],[]]] -> false (empty clause)
{{P,Q},{P,!Q},{!P,Q},{!P,!Q}}
(bu sırada değil) kolayca gösterilebilecek olan bir çelişkidir. 4): Bu önemsiz bir çelişki çünkü P AND ... AND (NOT P)
P'nin hiçbir değeri için kesinlikle doğru olamayacak bir şey.
(A OR B OR (NOT C)) AND (C OR A OR (NOT B)) AND (B OR (NOT A))
?