Arka fon
Çok sayıda kod golfü yaparsanız, muhtemelen bitsel XOR işleminin farkındasınızdır . İki tamsayı 1verildiğinde, iki girişin farklı olduğu bitlerde s ile başka bir tamsayı verir . Yani, örneğin 1010 XOR 0011 = 1001,.
"Nim sum" olarak bilinen oyun teorisinde çok faydalı olduğu ortaya çıktı. İki oyunun toplamına sahipseniz (yani, bir seferde bir oyunda hamle yapıyorsunuz), pozisyonun değeri , her bir oyundaki pozisyonların değerlerinin nim toplamıdır.
Ama bunu bir adım daha ileri götürebiliriz. Nim ilavesi ve nim çarpımının uygun bir tanımı ile , negatif olmayan tamsayılardan bir alan oluşturabiliriz. Bu yüzden zorluk golf nim çarpma.
Tanım
Nim çarpımı aşağıdaki kurallara uyar:
Fermat 2-power n = (2 ^ (2 ^ k)) nim ürünü daha küçük bir sayı ile normal üründür.
Kendisiyle birlikte bir Fermat 2-power n'nin nim ürünü 3n / 2'dir.
Nim çarpımı, nim ilavesine göre dağılır.
Nim çarpımı değişmeli ve birleştiricidir (nim ilavesi gibi).
Çarpıcı kimlik 1'dir (ve ek kimlik 0'dır).
Herhangi bir negatif olmayan tamsayı, ikisinin farklı güçlerinin nim toplamı olarak yazılabilir ve ikinin herhangi bir gücü, farklı Fermat sayılarının ürünü olarak yazılabilir, bu nedenle tüm negatif olmayan tamsayılar için nim çarpımını tanımlamak için yeterlidir.
Misal
Hepsi oldukça soyuttu, bu yüzden bir örnek üzerinde çalışalım. Ben +nim ilavesi (XOR) ve *nim çarpımı için kullanacağım .
6 * 13
= (4 + 2) * (8 + 4 + 1)
= (4 + 2) * ((4 * 2) + 4 + 1)
= (4 * 4 * 2) + (4 * 2 * 2) + (4 * 4) + (4 * 2) + (4 * 1) + (2 * 1)
= (6 * 2) + (4 * 3) + 6 + 8 + 4 + 2
= ((4 + 2) * 2) + 12 + 6 + 8 + 4 + 2
= (4 * 2) + (2 * 2) + 12 + 6 + 8 + 4 + 2
= 8 + 3 + 12 + 6 + 8 + 4 + 2
= 15
Ek Test Durumları
4, 4 -> 6
4, 3 -> 12
4, 7 -> 10
2, 4 -> 8
2, 3 -> 1
1, 42 -> 42
Meydan okuma
Herhangi bir uygun biçimde iki negatif olmayan tam sayı verildiğinde, nim ürünlerini hesaplayan bir program veya işlev yazın.
Bu kod golf , çok kısa teslim kazanır.