Mathematica, 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}
คอมมิเนทีฟของ Mathematica และฟังก์ชันพีชคณิตเชิงเส้นค่อนข้างมีประโยชน์ในการตีกอล์ฟ:
{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
เราซ้ำแต่ละ tuple สำหรับแต่ละ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
เป็นคอลัมน์ของเมทริกซ์อื่นเพื่อให้เราสามารถคำนวณผลคูณแบบจุดแบบง่ายระหว่างพวกมันได้ แต่ transposing {{1, 1, -1}, {1, -1, 1}}
เพียงแค่ให้{{1, 1}, {1, -1}, {-1, 1}}
ซึ่งเป็นเพียงรายชื่อของทั้ง 2 องค์ประกอบ sublists A
วงจรของ นั่นคือสิ่งที่ทำ:
Partition[#,2,1,1]
ดังนั้นเราคำนวณและนำดอทโปรดัคกับรายการของB
เรา เนื่องจากขณะนี้เราได้รับรายชื่อที่ซ้อนกัน (เพราะแต่ละที่เป็นไปได้A
ที่อัตราผลตอบแทนเวกเตอร์ที่แยกต่างหาก) ##&@@
เราแผ่ผู้ที่มี
หากต้องการค้นหาว่าคู่{x, y}
คือ{0, 0}
เราคำนวณSign[Norm[{x,y}]]
ที่จะช่วยให้Norm
√(x²+y²)
นี้จะช่วยให้หรือ0
1
ในที่สุดเนื่องจากตอนนี้เราแค่อยากรู้เศษส่วนของ1
s ในรายการ0
s และ1
s ทั้งหมดที่เราต้องการคือค่าเฉลี่ยเลขคณิตของรายการ อย่างไรก็ตามสิ่งนี้ให้ความน่าจะเป็นของทั้งสองจุดอย่างน้อยหนึ่งผลิตภัณฑ์ที่ไม่ใช่ศูนย์ดังนั้นเราจึงลบมันออก1
เพื่อให้ได้ผลลัพธ์ที่ต้องการ
n
จะเป็นประโยชน์ นอกจากนี้อาจเป็นตัวอย่างที่ชัดเจนของ A, B และผลิตภัณฑ์ภายในทั้งสองอาจช่วยได้