গণিত, 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
এটি সমস্ত এন-টিপলস যুক্ত 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
।
অবশেষে, যেহেতু আমরা এখন শুধু ভগ্নাংশ জানতে চাই 1
এর একটি তালিকায় গুলি 0
s এবং 1
আমাদের যা দরকার গুলি তালিকার গাণিতিক গড় হয়। যাইহোক, এটি কমপক্ষে একটি ডট পণ্য উভয়ের শূন্য-না হওয়ার সম্ভাবনা অর্জন করে, তাই আমরা 1
কাঙ্ক্ষিত ফলাফল পেতে এটিকে বিয়োগ করি ।
n
সহায়ক হবে। এছাড়াও সম্ভবত এ, বি এবং দুটি অভ্যন্তরীণ পণ্যগুলির স্পষ্ট উদাহরণ হতে পারে।