पृष्ठभूमि
यदि आप बहुत कोड गोल्फिंग करते हैं, तो आप बिटवाइज़ XOR ऑपरेशन के बारे में जानते हैं । दो पूर्णांकों को देखते हुए, यह 1बिट्स में एस के साथ एक और पूर्णांक देता है जहां दोनों इनपुट भिन्न होते हैं। तो, उदाहरण के लिए, 1010 XOR 0011 = 1001।
यह खेल के सिद्धांत में बहुत उपयोगी है, जहां इसे "निम योग" के रूप में जाना जाता है। आप दो मैचों का योग है (यह है कि, आप एक समय में एक खेल में चाल कर रहे हैं), मूल्य स्थिति के प्रत्येक व्यक्ति के खेल में पदों के मूल्यों के nim योग है।
लेकिन हम इसे एक कदम आगे ले जा सकते हैं। निम जोड़ के साथ और निम गुणन की एक उपयुक्त परिभाषा के साथ , हम nonnegative पूर्णांक से एक क्षेत्र बना सकते हैं। तो चुनौती गोल्फ निम गुणा करने की है।
परिभाषा
निम गुणन निम्नलिखित नियमों का पालन करता है:
किसी भी छोटी संख्या के साथ एक Fermat 2-पॉवर n = (2 ^ (2 ^ k)) का निम उत्पाद साधारण उत्पाद है।
एक Fermat 2-n की nim उत्पाद अपने आप में 3n / 2 है।
निम गुणन nim जोड़ पर वितरित करता है।
निम गुणा गुणात्मक और साहचर्य है (जैसा कि निम जोड़ है)।
गुणक पहचान 1 है (और योजक पहचान 0 है)।
किसी भी nonnegative पूर्णांक को दो की अलग-अलग शक्तियों के निम योग के रूप में लिखा जा सकता है, और दो की किसी भी शक्ति को अलग-अलग Fermat संख्याओं के उत्पाद के रूप में लिखा जा सकता है, इसलिए यह सभी nonnegative integers के लिए nim गुणन को परिभाषित करने के लिए पर्याप्त है।
उदाहरण
यह सब बहुत सार था, तो आइए एक उदाहरण के माध्यम से काम करते हैं। मैं +nim जोड़ (XOR) और *nim गुणन के लिए निरूपित करूँगा ।
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
अतिरिक्त परीक्षण मामले
4, 4 -> 6
4, 3 -> 12
4, 7 -> 10
2, 4 -> 8
2, 3 -> 1
1, 42 -> 42
चुनौती
एक प्रोग्राम या फ़ंक्शन लिखें, जो किसी भी सुविधाजनक रूप में दो nonnegative पूर्णांकों को देखते हुए, उनके nim उत्पाद की गणना करता है।
यह कोड-गोल्फ है , इसलिए कम से कम सबमिशन जीतता है।