Hedef:
Formül önerme mantığında (bundan sonra mantıksal ifade veya ifade olarak anılır ) alan ve bu formülü konjonktif normal formda çıkaran eksiksiz bir program veya işlev yazın . Orada iki sabittir, ⊤
ve ⊥
bir tek terimli operatör, doğru ve yanlış temsil ¬
olumsuzlamasıydı temsil ve ikili operatörler ⇒
, ⇔
, ∧
ve ∨
ima, eşdeğerlik, bağlaç, ve ayrılmalara temsil sırasıyla hangi (olağan mantıksal işlemlerin hepsi itaat DeMorgan kanunu , çift olumsuzluk ortadan kaldırılması , vb.).
Konjonktif normal form aşağıdaki gibi tanımlanır:
- Herhangi bir atomik ifade (
⊤
ve dahil⊥
) konjonktif normal formdadır. - Önceden oluşturulmuş herhangi bir ifadenin reddi, konjonktif normal formdadır.
- Önceden oluşturulmuş herhangi iki ifadenin ayrılması, konjonktif normal formdadır.
- Önceden oluşturulmuş herhangi iki ifadenin birleşimi, konjonktif normal formdadır.
- Başka herhangi bir ifade konjonktif normal formda değildir.
Herhangi bir mantıksal ifade, konjonktif normal formda mantıksal olarak eşdeğer bir ifadeye dönüştürülebilir (benzersiz olmayan) ( bu algoritmaya bakınız ). Bu algoritmayı kullanmanıza gerek yoktur.
Giriş:
Herhangi bir uygun formatta girdi alabilirsiniz; örneğin, sembolik bir mantıksal ifade (diliniz destekliyorsa), bir dize, başka bir veri yapısı. Burada yaptığım gibi doğru, yanlış ve mantıksal işleçler için aynı sembolleri kullanmanıza gerek yoktur, ancak seçiminiz tutarlı olmalı ve net değilse cevabınızda seçimlerinizi açıklamalısınız. Başka bir girişi kabul edemez veya giriş biçiminizdeki ek bilgileri kodlayamazsınız. Rastgele sayıda atom ifadesini ifade etmenin bir yoluna sahip olmalısınız; tamsayılar, karakterler, dizgiler vb.
Çıktı:
Formül konjonktif normal formda, yine herhangi bir uygun formatta. Girişinizle aynı formatta olması gerekmez, ancak herhangi bir fark olup olmadığını açıklamanız gerekir.
Test senaryoları:
P ∧ (P ⇒ R) -> P ∧ R
P ⇔ (¬ P) -> ⊥
(¬ P) ∨ (Q ⇔ (P ∧ R)) -> ((¬ P) ∨ ((¬ Q) ∨ R)) ∧ ((¬ P) ∨ (Q ∨ (¬ R)))
Notlar:
- Giriş ifadesi bir totoloji ise,
⊤
geçerli bir çıktı olur. Benzer şekilde, girdi ifadesi bir çelişki ise,⊥
geçerli bir çıktı olur. - Hem giriş hem de çıkış biçimleriniz, tüm olası mantıksal ifadeleri ifade edebilen iyi tanımlanmış bir işlem sırasına sahip olmalıdır. Bir çeşit parantez gerekebilir.
- Mantıksal işlemler için iyi tanımlanmış herhangi bir infix, önek veya postfix gösterimi kullanabilirsiniz. Seçiminiz standarttan farklıysa (olumsuzlama önek, geri kalanı infix), lütfen cevabınızda bunu açıklayın.
- Konjonktif normal form genel olarak benzersiz değildir (yeniden sıralamaya kadar bile değil). Sen çıkış gereken tek bir geçerli formu.
- Atom ifadelerini temsil etmenize rağmen, mantıksal sabitlerden, işleçlerden ve gruplama sembollerinden (bunlara sahipseniz) farklı olmaları gerekir.
- Konjonktif normal formu hesaplayan yerleşiklere izin verilir.
- Standart boşluklar yasaktır.
- Bu kod golfü ; en kısa cevap (bayt cinsinden) kazanır.
P
ve (P ∨ Q) ∧ (P ∨ (¬Q))
her ikisi de konjonktif normal formdadır.