मैथमेटिका, 159 100 87 86 85 बाइट्स
n=3;1-Mean@Sign[##&@@Norm/@({1,0,0,-1}~t~n.Partition[#,2,1,1])&/@{1,-1}~(t=Tuples)~n]
बदलने के लिए nसिर्फ शुरुआत में चर परिभाषा बदल जाते हैं।
चूंकि यह जानवर बल है, यह काफी धीमा है, लेकिन यहां पहले आठ परिणाम हैं:
n P(n)
1 1/2
2 3/8
3 7/32
4 89/512
5 269/2048
6 903/8192
7 3035/32768
8 169801/2097152
आखिरी वाला पहले से ही 231 सेकंड का समय ले चुका था और रनटाइम बुरी तरह से घातीय है।
व्याख्या
जैसा कि मैंने कहा कि यह क्रूर बल है। अनिवार्य रूप से, मैं बस सभी संभव गणना कर रहा हूं Aऔर B, हर संभव जोड़ी के लिए दो डॉट उत्पादों की गणना करता हूं और फिर जोड़े के अंश का पता लगाता हूं जो कि उपज है {0, 0}। मैथेमेटिका के कॉम्बिनेटरिक्स और लीनियर अलजेब्रा फ़ंक्शंस इस गोल्फिंग में काफी मददगार थे:
{1,-1}~(t=Tuples)~n
यह सभी n-tuples युक्त 1या -1सभी संभव बनाता है A। उसके लिए n = 3यह है:
{{1, 1, 1},
{1, 1, -1},
{1, -1, 1},
{1, -1, -1},
{-1, 1, 1},
{-1, 1, -1},
{-1, -1, 1},
{-1, -1, -1}}
गणना करने के लिए Bहम लगभग वही करते हैं:
{1,0,0,-1}~t~n
दोहराने से 0, हम प्रत्येक के लिए प्रत्येक टपल को डुप्लिकेट करते 0हैं, जिसमें 0दो बार संभव होता है 1या जैसा कि संभव है -1। n = 3एक उदाहरण के रूप में फिर से उपयोग :
{{-1, -1, -1},
{-1, -1, 0}, {-1, -1, 0},
{-1, -1, 1},
{-1, 0, -1}, {-1, 0, -1},
{-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
{-1, 0, 1}, {-1, 0, 1},
{-1, 1, -1},
{-1, 1, 0}, {-1, 1, 0},
{-1, 1, 1},
{0, -1, -1}, {0, -1, -1},
{0, -1, 0}, {0, -1, 0}, {0, -1, 0}, {0, -1, 0},
{0, -1, 1}, {0, -1, 1},
{0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1},
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
{0, 0, 1}, {0, 0, 1}, {0, 0, 1}, {0, 0, 1},
{0, 1, -1}, {0, 1, -1},
{0, 1, 0}, {0, 1, 0}, {0, 1, 0}, {0, 1, 0},
{0, 1, 1}, {0, 1, 1},
{1, -1, -1},
{1, -1, 0}, {1, -1, 0},
{1, -1, 1},
{1, 0, -1}, {1, 0, -1},
{1, 0, 0}, {1, 0, 0}, {1, 0, 0}, {1, 0, 0},
{1, 0, 1}, {1, 0, 1},
{1, 1, -1},
{1, 1, 0}, {1, 1, 0},
{1, 1, 1}}
अब, प्रत्येक संभव के लिए A, हम उन Bदोनों में से प्रत्येक का डॉट उत्पाद चाहते हैं , दोनों के साथ A[1 .. n]और A[2 .. n+1]। जैसे अगर हमारा करंट Aहै {1, 1, -1}, तो हम डॉट प्रोडक्ट को दोनों के {1, 1, -1}साथ और उसके साथ चाहते हैं {1, -1, 1}। चूँकि हमारे सभी Bपहले से ही एक मैट्रिक्स की पंक्तियों में सुविधाजनक हैं, हम चाहते हैं कि हम दो उप-कलाकारों Aको एक और मैट्रिक्स के कॉलम के रूप में दें, ताकि हम उनके बीच एक साधारण डॉट उत्पाद की गणना कर सकें। लेकिन ट्रांसपोसिंग {{1, 1, -1}, {1, -1, 1}}बस देता है, {{1, 1}, {1, -1}, {-1, 1}}जो सभी 2-तत्व चक्रीय सब्लिस्ट की एक सूची है A। यही वह करता है:
Partition[#,2,1,1]
तो हम गणना करते हैं और हमारी सूची के साथ डॉट उत्पाद लेते हैं B। चूँकि अब हम एक नेस्टेड सूची प्राप्त करते हैं (चूंकि प्रत्येक संभव Aएक अलग वेक्टर पैदा करता है), हम उन लोगों के साथ समतल करते हैं ##&@@।
यह जानने के लिए एक जोड़ी {x, y}है {0, 0}हम गणना Sign[Norm[{x,y}]] जहां Normदेता है √(x²+y²)। यह देता है 0या 1।
अंत में, चूँकि हम अब केवल 1s की सूची में 0s के अंशों को जानना चाहते हैं और 1हम सभी की आवश्यकता सूची का अंकगणितीय माध्य है। हालांकि, यह कम से कम एक डॉट उत्पाद के गैर-शून्य होने की संभावना पैदा करता है, इसलिए हम 1वांछित परिणाम प्राप्त करने के लिए इसे घटाते हैं ।
nमददगार होंगे। इसके अलावा शायद ए, बी और दो आंतरिक उत्पादों का एक स्पष्ट उदाहरण मदद कर सकता है।