2 डी अंतरिक्ष में कोने की एक सूची द्वारा परिभाषित एक संभावित स्व-प्रतिच्छेद बहुभुज पर विचार करें। उदाहरण के लिए
{{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
(नहीं 24
या 33
अन्य परिभाषाओं के रूप में या क्षेत्र उपज सकता है)।
ध्यान दें कि इस परिभाषा के तहत बहुभुज का क्षेत्र इसके घुमावदार क्रम से स्वतंत्र है।
चुनौती
पूर्णांक के साथ कोने की सूची को देखते हुए एक बहुभुज को परिभाषित करने वाले निर्देशांक, सम-विषम नियम के तहत इसका क्षेत्र निर्धारित करें।
आप STDIN या निकटतम विकल्प, कमांड-लाइन तर्क या फ़ंक्शन तर्क के माध्यम से एक फ़ंक्शन या प्रोग्राम लिख सकते हैं, और परिणाम को वापस कर सकते हैं या इसे STDOUT या निकटतम विकल्प पर प्रिंट कर सकते हैं।
आप किसी भी सुविधाजनक सूची या स्ट्रिंग प्रारूप में इनपुट ले सकते हैं, जब तक कि यह प्रीप्रोसेस न हो।
परिणाम या तो फ्लोटिंग पॉइंट नंबर होना चाहिए, 6 महत्वपूर्ण (दशमलव) अंकों के लिए सटीक या एक तर्कसंगत परिणाम जिसका फ्लोटिंग पॉइंट प्रतिनिधित्व 6 महत्वपूर्ण अंकों के लिए सटीक है। (यदि आप तर्कसंगत परिणाम देते हैं तो वे सटीक होने की संभावना है, लेकिन मुझे इसकी आवश्यकता नहीं है, क्योंकि मेरे पास संदर्भ के लिए सटीक परिणाम नहीं हैं।)
आप उचित डेस्कटॉप मशीन पर 10 सेकंड के भीतर नीचे दिए गए प्रत्येक परीक्षण मामलों को हल करने में सक्षम होना चाहिए। (इस नियम में कुछ नियम है, इसलिए अपने सर्वोत्तम निर्णय का उपयोग करें। यदि यह मेरे लैपटॉप पर 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 सेपरेटर के बीच रूपांतरण।}, {
बस बन जाता हैlineto
, और एक्स और वाई के बीच अल्पविराम हटा दिया जाता है, और उद्घाटन और समापन ब्रेसिज़ को एक स्थिर हेडर और पाद के साथ बदल दिया जाता है ...)