A ve B olmak üzere iki ikili değişken için 16 farklı boole işlevi vardır :
A B | F0 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | F13 | F14 | F15
-----------------------------------------------------------------------------------------
0 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1
0 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1
1 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1
1 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1
Operatör daha az <
normal DEĞİL gibi bir mantık operatörü olarak düşünülebilir VE veya VEYA değildir, boole değerlerine uygulanan bu fonksiyonların (F4) gerçeği birinde olur:
A B | A < B
-----------
0 0 | 0
0 1 | 1
1 0 | 0
1 1 | 0
İlginç bir şekilde, sadece sembolleri içeren ifadeleri kullanarak diğer 15 fonksiyondan herhangi birini simüle edebiliriz ()<AB10
. Bu ifadeler tıpkı birçok standart programlama dilinde olduğu gibi okunur ve değerlendirilir, örneğin parantezler eşleşmeli ve <
her iki tarafında da argümanlar bulunmalıdır.
Özellikle, bu ifadeler aşağıdaki dilbilgisine ( Backus-Naur formunda verilir ) uygun olmalıdır:
element ::= A | B | 1 | 0
expression ::= element<element | (expression)<element | element<(expression) | (expression)<(expression)
Bu, işe yaramaz parantezlere ve formun ifadelerine A<B<1
izin verilmediği anlamına gelir .
Dolayısıyla ifade A<B
F4 işleviyle eşleşir ve veya A<B<1
olarak değiştirilmelidir .(A<B)<1
A<(B<1)
Diğer 15 fonksiyonun hepsinin ifadeye dönüştürülebildiğini kanıtlamak için, işlevsel olarak tamamlanmış bir dizi ifade oluşturmak yeterlidir , çünkü daha sonra tanım gereği, herhangi bir fonksiyon için ifadelere dönüştürülebilirler.
İfadelerin Bu gibi bir dizi x<1
(burada x
olduğu A
ya da B
) olan ¬x
, ve (((B<A)<1)<A)<1
ki, A → B
. Negation ( ¬
) ve implication ( →
) işlevlerinin işlevsel olarak tamamlandığı bilinmektedir .
Meydan okuma
Karakterleri kullanarak, ()<AB10
16 farklı boolean fonksiyonunun her birine eşdeğer olan yukarıda açıklanan formda 16 ifade yazın.
Amaç, ifadelerin her birini mümkün olduğunca kısa yapmaktır. Puanınız, 16 ifadenizin her birindeki karakter sayısının toplamıdır. En düşük puan kazanır. Tiebreaker en erken cevaba gider (daha sonra başka birinden alınan daha kısa ifadelerle cevaplarını düzenlemedikleri takdirde).
Bu yarışma için teknik olarak herhangi bir gerçek kod yazmanız gerekmez, ancak ifadeleri oluşturmanıza yardımcı olacak herhangi bir program yazdıysanız, bunları yayınlamanız şiddetle tavsiye edilir.
İfadelerinizin beklenenleri yapıp yapmadığını kontrol etmek için bu Yığın Snippet'ini kullanabilirsiniz: