এই চ্যালেঞ্জটি আমাকে সম্প্রতি একটি সাধারণ গেমের জন্য লিখতে হয়েছিল এমন প্রকৃত সংঘর্ষ সনাক্তকরণের ভিত্তিতে।
এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা দুটি বস্তু প্রদত্ত হয়ে দুটি বস্তুর সংঘর্ষে রয়েছে (যেমন ছেদ করে) বা না হয় তার উপর নির্ভর করে সত্যবাদী বা মিথ্যা মান দেয় ।
আপনাকে তিন ধরণের অবজেক্টকে সমর্থন করতে হবে:
- লাইন বিভাগ : দুটি সমাপ্তি নির্দেশক, অর্থাৎ (x 1 , y 1 ) এবং (x 2 , y 2 ) 4 টি ভাসমান দ্বারা প্রতিনিধিত্ব করা হয় । আপনি ধরে নিতে পারেন যে শেষের পয়েন্টগুলি অভিন্ন নয় (সুতরাং লাইন বিভাগটি অধঃপতন নয়)।
- ডিস্ক : অর্থাত চেনাশোনা ভরা, 3 ভাসে, কেন্দ্র দুটি দ্বারা প্রতিনিধিত্ব (X, Y) ব্যাসার্ধ জন্য এবং এক (ধনাত্মক) দ ।
- গহ্বর : এগুলি একটি ডিস্কের পরিপূরক। অর্থাৎ একটি গহ্বর একটি কেন্দ্র এবং ব্যাসার্ধ দ্বারা নির্দিষ্ট একটি বৃত্তাকার অঞ্চল ব্যতীত 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]]