একটি সম্ভাব্য স্ব-ছেদকারী বহুভুজটি বিবেচনা করুন, 2D স্পেসের শীর্ষে অবস্থিত একটি তালিকা দ্বারা সংজ্ঞায়িত। যেমন
{{0, 0}, {5, 0}, {5, 4}, {1, 4}, {1, 2}, {3, 2}, {3, 3}, {2, 3}, {2, 1}, {4, 1}, {4, 5}, {0, 5}}
এই জাতীয় বহুভুজের ক্ষেত্রটি নির্ধারণ করার জন্য বেশ কয়েকটি উপায় রয়েছে তবে সর্বাধিক আকর্ষণীয় একটি হচ্ছে সম-বিজোড় নিয়ম। বিমানের যে কোনও বিন্দু নিয়ে, বিন্দু থেকে অনন্ত (যে কোনও দিকে) দিকে একটি লাইন আঁকুন। যদি সেই রেখাটি বহুভুজকে একটি বিজোড় সংখ্যার বার অতিক্রম করে, তবে বিন্দুটি বহুভুজের ক্ষেত্রফলের অংশ, যদি বহুভুজটিকে বহুবার অতিক্রম করে, তবে বিন্দুটি বহুভুজের অংশ নয় of উপরোক্ত উদাহরণ বহুভুজের জন্য, এখানে এর বাহ্যরেখা পাশাপাশি এর সম-বিজোড় অঞ্চল উভয়ই রয়েছে:
বহুভুজটি সাধারণত অরথোগোনাল হবে না। অঞ্চলটি গণনা করা আরও সহজ করার জন্য আমি কেবল এমন একটি সাধারণ উদাহরণ বেছে নিয়েছি।
এই উদাহরণের ক্ষেত্রটি হল 17
(না 24
বা 33
অন্যান্য সংজ্ঞা বা ক্ষেত্রফল পেতে পারে)।
নোট করুন যে এই সংজ্ঞার অধীনে বহুভুজের ক্ষেত্রটি তার ঘুরানোর ক্রম থেকে পৃথক।
চ্যালেঞ্জ
বহুভুজকে সংজ্ঞায়িত করে পূর্ণসংখ্য স্থানাঙ্কের সাথে শীর্ষে অবস্থিত একটি তালিকা দেওয়া হয়েছে, এর ক্ষেত্রটি সম-বিচিত্র নিয়মের অধীনে নির্ধারণ করে।
আপনি STDIN বা নিকটতম বিকল্প, কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে কোনও ফাংশন বা প্রোগ্রাম লিখতে পারেন অথবা ফলাফলটি প্রত্যাবর্তন করতে পারেন বা এটি STDOUT বা নিকটতম বিকল্পে মুদ্রণ করতে পারেন।
আপনি যেকোন সুবিধাজনক তালিকা বা স্ট্রিং ফর্ম্যাটে ইনপুট নিতে পারেন, যতক্ষণ না এটি প্রাকপ্রসেসড নয়।
ফলটি হয় ভাসমান পয়েন্ট সংখ্যা, 6 টি গুরুত্বপূর্ণ (দশমিক) অঙ্কের সাথে সঠিক হওয়া বা একটি যুক্তিযুক্ত ফলাফল যার ভাসমান পয়েন্ট উপস্থাপনা 6 টি উল্লেখযোগ্য সংখ্যার সাথে সঠিক। (আপনি যদি যুক্তিসঙ্গত ফলাফল উত্পাদন করেন তবে সেগুলি সম্ভবত সঠিক হতে চলেছে, তবে রেফারেন্সের জন্য আমার সঠিক ফলাফল না পাওয়ায় আমার এটি প্রয়োজন হতে পারে না))
আপনি অবশ্যই একটি যুক্তিসঙ্গত ডেস্কটপ মেশিনে 10 সেকেন্ডের মধ্যে নীচের প্রতিটি পরীক্ষার কেস সমাধান করতে সক্ষম হবেন। (এই নিয়মের কিছুটা অবকাশ রয়েছে, সুতরাং আপনার সর্বোত্তম রায়টি ব্যবহার করুন my আমার ল্যাপটপে যদি এটি 20 সেকেন্ড সময় নেয় আমি আপনাকে সন্দেহের সুবিধা দেব, যদি এটি এক মিনিট সময় নেয় তবে আমি করব না)) আমি মনে করি এই সীমাটি খুব উদার হওয়া উচিত তবে আপনি কেবলমাত্র পর্যাপ্ত সূক্ষ্ম গ্রিড এবং গণনাতে বহুভুজকে বিচ্ছিন্ন করতে বা মন্টি কার্লোর মতো সম্ভাব্য পন্থাগুলি ব্যবহার করার উপায়গুলি অস্বীকার করার কথা। একজন ভাল খেলোয়াড় হন এবং এই পদ্ধতির অনুকূলিতকরণের চেষ্টা করবেন না যাতে আপনি যেভাবে সময় সীমা পূরণ করতে পারেন। ;)
আপনি বহুভুজ সরাসরি সম্পর্কিত কোন বিদ্যমান ফাংশন ব্যবহার করা উচিত নয়।
এটি কোড গল্ফ, তাই সংক্ষিপ্ততম জমা (বাইটে) জিতেছে।
অনুমিতি
- সকল স্থানাঙ্ক সীমার মধ্যে পূর্ণসংখ্যা
0 ≤ x ≤ 100
,0 ≤ y ≤ 100
। - কমপক্ষে
3
এবং বেশিরভাগ শীর্ষে থাকবে50
। - কোনও পুনরাবৃত্তি উল্লম্ব হবে না। উভয় প্রান্তই অন্য প্রান্তে থাকবে না। ( তবে তালিকায় কলিনারি পয়েন্ট থাকতে পারে))
পরীক্ষার মামলা
{{0, 0}, {5, 0}, {5, 4}, {1, 4}, {1, 2}, {3, 2}, {3, 3}, {2, 3}, {2, 1}, {4, 1}, {4, 5}, {0, 5}}
17.0000
{{22, 87}, {6, 3}, {98, 77}, {20, 56}, {96, 52}, {79, 34}, {46, 78}, {52, 73}, {81, 85}, {90, 43}}
2788.39
{{90, 43}, {81, 85}, {52, 73}, {46, 78}, {79, 34}, {96, 52}, {20, 56}, {98, 77}, {6, 3}, {22, 87}}
2788.39
{{70, 33}, {53, 89}, {76, 35}, {14, 56}, {14, 47}, {59, 49}, {12, 32}, {22, 66}, {85, 2}, {2, 81},
{61, 39}, {1, 49}, {91, 62}, {67, 7}, {19, 55}, {47, 44}, {8, 24}, {46, 18}, {63, 64}, {23, 30}}
2037.98
{{42, 65}, {14, 59}, {97, 10}, {13, 1}, {2, 8}, {88, 80}, {24, 36}, {95, 94}, {18, 9}, {66, 64},
{91, 5}, {99, 25}, {6, 66}, {48, 55}, {83, 54}, {15, 65}, {10, 60}, {35, 86}, {44, 19}, {48, 43},
{47, 86}, {29, 5}, {15, 45}, {75, 41}, {9, 9}, {23, 100}, {22, 82}, {34, 21}, {7, 34}, {54, 83}}
3382.46
{{68, 35}, {43, 63}, {66, 98}, {60, 56}, {57, 44}, {90, 52}, {36, 26}, {23, 55}, {66, 1}, {25, 6},
{84, 65}, {38, 16}, {47, 31}, {44, 90}, {2, 30}, {87, 40}, {19, 51}, {75, 5}, {31, 94}, {85, 56},
{95, 81}, {79, 80}, {82, 45}, {95, 10}, {27, 15}, {18, 70}, {24, 6}, {12, 73}, {10, 31}, {4, 29},
{79, 93}, {45, 85}, {12, 10}, {89, 70}, {46, 5}, {56, 67}, {58, 59}, {92, 19}, {83, 49}, {22,77}}
3337.62
{{15, 22}, {71, 65}, {12, 35}, {30, 92}, {12, 92}, {97, 31}, {4, 32}, {39, 43}, {11, 40},
{20, 15}, {71, 100}, {84, 76}, {51, 98}, {35, 94}, {46, 54}, {89, 49}, {28, 35}, {65, 42},
{31, 41}, {48, 34}, {57, 46}, {14, 20}, {45, 28}, {82, 65}, {88, 78}, {55, 30}, {30, 27},
{26, 47}, {51, 93}, {9, 95}, {56, 82}, {86, 56}, {46, 28}, {62, 70}, {98, 10}, {3, 39},
{11, 34}, {17, 64}, {36, 42}, {52, 100}, {38, 11}, {83, 14}, {5, 17}, {72, 70}, {3, 97},
{8, 94}, {64, 60}, {47, 25}, {99, 26}, {99, 69}}
3514.46
upath
এবং এমন lineto
শব্দগুলি মনে হয় যে আপনি প্রকৃতপক্ষে ইনপুটটিকে প্রসেসরোস করছেন। অর্থাৎ আপনি স্থানাঙ্কগুলির একটি তালিকা না নিয়ে একটি আসল বহুভুজ।
CrossingPolygon
।
upath
অপারেটর দিয়ে পুরো জিনিসটি পার্স করতে পারি । (এটি প্রকৃতপক্ষে পৃথককারীদের মধ্যে একটি অত্যন্ত সাধারণ 1: 1 রূপান্তর}, {
just স্রেফ হয়ে যায়lineto
এবং x এবং y এর মধ্যে কমাটি সরিয়ে ফেলা হয়, এবং খোলার এবং