यह चुनौती वास्तविक टकराव का पता लगाने पर आधारित है जिसे मुझे हाल ही में एक साधारण खेल के लिए लिखना था।
एक प्रोग्राम या फ़ंक्शन लिखें, जिसमें दो ऑब्जेक्ट दिए गए हों, दो वस्तुओं के टकराव (यानी प्रतिच्छेदन) में हैं या नहीं , इसके आधार पर एक सत्य या मिथ्या मूल्य देता है ।
आपको तीन प्रकार की वस्तुओं का समर्थन करने की आवश्यकता है:
- लाइन सेगमेंट : 4 फ्लोट्स द्वारा दर्शाया गया है, जो दो समापन बिंदुओं ( यानी 1 x , y 1 ) और (x 2 , y 2 ) को दर्शाता है । आप मान सकते हैं कि एंडपॉइंट समान नहीं हैं (इसलिए लाइन सेगमेंट पतित नहीं है)।
- डिस्क : यानी भरे हुए सर्कल, 3 फ्लोट्स द्वारा दर्शाए गए, केंद्र के लिए दो (x, y) और त्रिज्या r के लिए एक (पॉजिटिव) ।
- गुहाएं : ये एक डिस्क के पूरक हैं। यही है, एक गुहा एक केंद्र और त्रिज्या द्वारा निर्दिष्ट एक परिपत्र क्षेत्र को छोड़कर , सभी 2 डी अंतरिक्ष को भरता है ।
आपके प्रोग्राम या फ़ंक्शन को पहचानकर्ता पूर्णांक (अपनी पसंद का) और उनकी 3 या 4 फ़्लोट्स के रूप में दो ऐसी वस्तुएं प्राप्त होंगी। आप STDIN, ARGV या फ़ंक्शन तर्क के माध्यम से इनपुट ले सकते हैं। आप किसी भी सुविधाजनक रूप में इनपुट का प्रतिनिधित्व कर सकते हैं जो प्रीप्रोसेस नहीं है, उदाहरण के लिए 8 से 10 व्यक्तिगत संख्याएं, दो अल्पविराम द्वारा अलग-अलग मान या दो सूची। परिणाम लौटाया जा सकता है या STDOUT को लिखा जा सकता है।
आप मान सकते हैं कि वस्तुएं कम-से-कम 10 -10 लंबाई की इकाइयाँ हैं या उससे अधिक अंतर करती हैं, इसलिए आपको फ़्लोटिंग पॉइंट प्रकारों की सीमाओं के बारे में चिंता करने की आवश्यकता नहीं है।
यह कोड गोल्फ है, इसलिए सबसे छोटा उत्तर (बाइट्स में) जीतता है।
परीक्षण के मामलों
सूची-आधारित इनपुट प्रारूप का उपयोग करते हुए 0, रेखाओं के साथ 1और सेगमेंट के साथ , सेगमेंट का प्रतिनिधित्व 2करते हुए, निम्नलिखित सभी को एक सच्चाई का उत्पादन करना चाहिए:
[0,[0,0],[2,2]], [0,[1,0],[2,4]] # Crossing line segments
[0,[0.5,0],[-0.5,0]], [1,[0,0],1] # Line contained in a disc
[0,[0.5,0],[1.5,0]], [1,[0,0],1] # Line partially within disc
[0,[-1.5,0.5],[1.5,0.5]], [1,[0,0],1] # Line cutting through disc
[0,[0.5,2],[-0.5,2]], [2,[0,0],1] # Line outside cavity
[0,[0.5,0],[1.5,0]], [2,[0,0],1] # Line partially outside cavity
[0,[-1.5,0.5],[1.5,0.5]], [2,[0,0],1] # Line cutting through cavity
[1,[0,0],1], [1,[0,0],2] # Disc contained within another
[1,[0,0],1.1], [1,[2,0],1.1] # Intersecting discs
[1,[3,0],1], [2,[0,0],1] # Disc outside cavity
[1,[1,0],0.1], [2,[0,0],1] # Disc partially outside cavity
[1,[0,0],2], [2,[0,0],1] # Disc encircling cavity
[2,[0,0],1], [2,[0,0],1] # Any two cavities intersect
[2,[-1,0],1], [2,[1,0],1] # Any two cavities intersect
जबकि निम्नलिखित सभी में एक मिथ्या आउटपुट होना चाहिए
[0,[0,0],[1,0]], [0,[0,1],[1,1]] # Parallel lines
[0,[-2,0],[-1,0]], [0,[1,0],[2,0]] # Collinear non-overlapping lines
[0,[0,0],[2,0]], [0,[1,1],[1,2]] # Intersection outside one segment
[0,[0,0],[1,0]], [0,[2,1],[2,3]] # Intersection outside both segments
[0,[-1,2],[1,2]], [1,[0,0],1] # Line passes outside disc
[0,[2,0],[3,0]], [1,[0,0],1] # Circle lies outside segment
[0,[-0.5,0.5],[0.5,-0.5]], [2,[0,0],1] # Line inside cavity
[1,[-1,0],1], [1,[1,1],0.5] # Non-intersecting circles
[1,[0.5,0],0.1], [2,[0,0],1] # Circle contained within cavity
[0,[-2,0],[-1,0]], [0,[1,0],[2,0]]


