बिंदुओं की सूची को देखते हुए, सबसे छोटा रास्ता खोजें जो सभी बिंदुओं पर जाता है और शुरुआती बिंदु पर लौटता है।
यात्रा विक्रेता की समस्या कंप्यूटर विज्ञान के क्षेत्र में अच्छी तरह से जाना जाता है, के रूप में गणना / यह अनुमान लगाने के लिए कई तरीके हैं। इसे अंकों के बहुत बड़े समूहों के लिए हल किया गया है, लेकिन कुछ सबसे बड़े सीपीयू-वर्षों को समाप्त करने के लिए लेते हैं।
आलू से जला मत करो।
हॉट पोटैटो एक ऐसा खेल है जिसमें 2+ खिलाड़ी एक "आलू" एक सर्कल में चारों ओर से गुजरते हैं, जबकि संगीत बजाते हैं। ऑब्जेक्ट इसे अगले खिलाड़ी को जल्दी से पास करना है। यदि आप संगीत बंद होने पर आलू पकड़ रहे हैं, तो आप बाहर हैं।
हॉट आलू सेल्समैन का उद्देश्य है:
100 अनूठे बिंदुओं के एक सेट को देखते हुए , उन बिंदुओं को बेहतर क्रम में लौटाएं ( आगे की ओर नीचे की ओर कम दूरी )। यह अगले खिलाड़ी के लिए समस्या को "पास" कर देगा। उन्हें इसे सुधारना होगा और इसे अगले पास करना होगा, आदि। यदि कोई खिलाड़ी इसमें सुधार नहीं कर सकता है, तो वे आउट होते हैं और खेलते रहते हैं जब तक कि एक खिलाड़ी शेष न हो।
इसे "ब्रूट-फोर्स-मी-ए-पाथ" प्रतियोगिता होने से रोकने के लिए, ये वजीफे हैं:
आलू को पास करने में आपको एक मिनट से ज्यादा नहीं लग सकता है । यदि आपने एक मिनट भी कम समय तक नहीं पाया है और एक छोटा सा उपाय किया है, तो आप बाहर हैं।
आप 25 से अधिक बिंदुओं की स्थिति नहीं बदल सकते । सटीक होने के लिए,
>= 75अंक उसी स्थिति में होना चाहिए , जब आप उन्हें प्राप्त कर चुके हों। इससे कोई फर्क नहीं पड़ता है कि आप किन लोगों को बदलने का फैसला करते हैं, बस आप कितनी राशि बदलते हैं।
जब केवल एक खिलाड़ी को छोड़ दिया जाता है, तो वह उस गेम का विजेता होता है, और एक अंक प्राप्त करता है। एक टूमनी में 5*nखेल होते हैं , जहां nखिलाड़ियों की संख्या होती है। प्रत्येक खेल, शुरुआती खिलाड़ी को घुमाया जाएगा , और शेष खिलाड़ी के आदेश को बदल दिया जाएगा । अंत में सबसे अधिक अंक पाने वाला खिलाड़ी टूमनी का विजेता होता है। यदि टूरनी पहले स्थान पर टाई के साथ समाप्त होता है, तो केवल उन प्रतियोगियों के साथ एक नया टूर्नामेंट खेला जाएगा। यह तब तक जारी रहेगा जब तक कोई टाई न हो।
प्रत्येक गेम के लिए शुरुआती खिलाड़ी बिना किसी विशेष क्रम के छद्म रूप से चयनित बिंदुओं का एक सेट प्राप्त करेगा।
अंक x,yएक कार्टियरियन ग्रिड पर पूर्णांक निर्देशांक की एक जोड़ी के रूप में परिभाषित किए गए हैं । दूरी का उपयोग कर मापा जाता है मैनहट्टन दूरी , |x1-x2| + |y1-y2|। सभी निर्देशांक [0..199]सीमा में होंगे।
इनपुट
इनपुट एकल स्ट्रिंग तर्क के साथ दिया गया है। इसमें मौजूदा खिलाड़ियों की संख्या ( m) और 100 अंकों का प्रतिनिधित्व करने वाले 201 अल्पविराम से अलग पूर्णांक शामिल होंगे :
m,x0,y0,x1,y1,x2,y2,...,x99,y99
इन बिंदुओं का क्रम वर्तमान पथ है। प्रत्येक बिंदु से अगले ( dist(0,1) + dist(1,2) + ... + dist(99,0)) तक की दूरी को जोड़कर कुल दूरी प्राप्त की जाती है । कुल दूरी की गणना करते समय शुरू करने के लिए वापस जाने के लिए मत भूलना!
ध्यान दें कि mहै नहीं खिलाड़ियों है कि खेल शुरू कर दिया की संख्या, यह नंबर है कि अभी भी में हो रहा है।
उत्पादन
आउटपुट उसी तरह दिया जाता है जैसे इनपुट, माइनस m; अल्पविराम से अलग किए गए एकल तार को उनके नए क्रम में बिंदुओं का प्रतिनिधित्व करने वाले पूर्णांक।
x0,y0,x1,y1,x2,y2,...,x99,y99
नियंत्रण कार्यक्रम केवल एक मिनट के लिए आउटपुट का इंतजार करेगा। जब आउटपुट प्राप्त होता है, तो यह सत्यापित करेगा कि:
- आउटपुट अच्छी तरह से बनता है
- आउटपुट में केवल और सभी 100 बिंदु होते हैं जो इनपुट में मौजूद होते हैं
>=75अंक उनके मूल पदों में हैं- पथ की लंबाई पिछले पथ से कम है
यदि इनमें से कोई भी चेक विफल हो जाता है (या कोई आउटपुट नहीं है), तो आप बाहर हैं और खेल अगले खिलाड़ी के लिए आगे बढ़ेगा।
नियंत्रण कार्यक्रम
आप इस लिंक पर नियंत्रण कार्यक्रम पा सकते हैं । नियंत्रण कार्यक्रम स्वयं नियतात्मक है, और डमी बीज के साथ पोस्ट किया गया है 1। स्कोरिंग के दौरान इस्तेमाल किया जाने वाला बीज अलग होगा, इसलिए इसे मोड़ने वाले टर्न ऑर्डर / पॉइंट लिस्ट का विश्लेषण करने की कोशिश न करें।
मुख्य वर्ग है Tourney। इसे चलाने वाले तर्क के रूप में दिए गए प्रतियोगियों के साथ एक पूर्ण टूर्नामेंट करेंगे। यह अंत में प्रत्येक खेल के विजेता और एक टैली को बाहर निकालता है। दो स्वैबोट्स के साथ एक नमूना टूमनी जैसा दिखता है:
Starting tournament with seed 1
(0) SwapBot wins a game! Current score: 1
(1) SwapBot wins a game! Current score: 1
(1) SwapBot wins a game! Current score: 2
(1) SwapBot wins a game! Current score: 3
(0) SwapBot wins a game! Current score: 2
(1) SwapBot wins a game! Current score: 4
(1) SwapBot wins a game! Current score: 5
(1) SwapBot wins a game! Current score: 6
(1) SwapBot wins a game! Current score: 7
(1) SwapBot wins a game! Current score: 8
Final Results:
Wins Contestant
2 (0) SwapBot
8 (1) SwapBot
यदि आप एक बार में सिर्फ एक गेम का परीक्षण करना चाहते हैं, तो आप Gameइसके बजाय कक्षा चला सकते हैं । यह तर्क के रूप में दिए गए क्रम में खिलाड़ियों के साथ एक गेम चलाएगा। डिफ़ॉल्ट रूप से, यह वर्तमान खिलाड़ी और पथ की लंबाई दिखाते हुए एक प्ले-बाय-प्ले भी प्रिंट करेगा।
भी शामिल कुछ परीक्षण खिलाड़ी हैं: SwapBot, BlockPermuter, और TwoSwapBot। पहले दो रन स्कोरिंग में शामिल नहीं होंगे, इसलिए परीक्षण के दौरान उनका उपयोग और दुरुपयोग करने के लिए स्वतंत्र महसूस करें। TwoSwapBot को शामिल करने में शामिल किया जाएगा , और वह कोई भी कमी नहीं है, इसलिए अपना ए-गेम लाएं।
मिश्रण
आप राज्य की जानकारी नहीं बचा सकते हैं, और प्रत्येक मोड़ आपके प्रोग्राम का एक अलग रन है। प्रत्येक मोड़ पर आपको प्राप्त होने वाली एकमात्र जानकारी अंकों का समूह है।
आप बाहरी संसाधनों का उपयोग नहीं कर सकते। इसमें नेटवर्क कॉल और फ़ाइल एक्सेस शामिल है।
आप TSP समस्या या इसके वेरिएंट के साथ हल / सहायता के लिए डिज़ाइन किए गए लाइब्रेरी फ़ंक्शंस का उपयोग नहीं कर सकते।
आप किसी भी तरह से अन्य खिलाड़ियों के साथ छेड़छाड़ या हस्तक्षेप नहीं कर सकते।
आप नियंत्रण कार्यक्रम या किसी भी तरह से शामिल वर्गों या फ़ाइलों के साथ हेरफेर या हस्तक्षेप नहीं कर सकते।
मल्टी-थ्रेडिंग की अनुमति है।
प्रति उपयोगकर्ता एक सबमिशन। यदि आप एक से अधिक प्रविष्टि जमा करते हैं, तो मैं केवल पहले एक प्रविष्टि दर्ज करूंगा। यदि आप अपना सबमिशन बदलना चाहते हैं, तो मूल को संपादित / हटाएं।
टूर्नामेंट एक कंप्यूटर पर i7-3770K सीपीयू और 16 जीबी रैम के साथ, उबंटू 13.04 पर चल रहा होगा । यह एक वीएम में नहीं चलाया जाएगा। मुझे जो कुछ भी दुर्भावनापूर्ण लगता है, वह आपके द्वारा प्रस्तुत वर्तमान और भविष्य की प्रविष्टि को अयोग्य घोषित कर देगा।
सभी प्रविष्टियों को कमांड लाइन से फ्री ( बीयर में ) सॉफ्टवेयर के साथ चलाया जाना चाहिए । अगर मुझे आपकी प्रविष्टि को संकलित / चलाने में समस्या है, तो मैं टिप्पणियों में सहायता का अनुरोध करूंगा। यदि आप जवाब नहीं देते हैं या मैं अंततः इसे नहीं चला सकता हूं, तो यह अयोग्य होगा।
परिणाम (22 मई 2014)
नए परिणाम में हैं! अनटंगलबोट ने प्रतियोगिता को काफी शानदार ढंग से हराया है। TwoSwapBot ने सात जीत हासिल कीं, और SANNbot ने इसमें भी जीत हासिल की। यहाँ एक स्कोरबोर्ड है, और कच्चे आउटपुट का लिंक है :
Wins Contestant
22 (2) ./UntangleBot
7 (0) TwoSwapBot
1 (5) SANNbot.R
0 (1) BozoBot
0 (3) Threader
0 (4) DivideAndConquer
जैसा कि यह अब खड़ा है , अनटंगलबोट ने चेकमार्क जीता है। हालांकि, आपको प्रवेश करने से हतोत्साहित न करें, हालांकि, चूंकि मैं टूर्नामेंट को चलाऊंगा, क्योंकि अधिक प्रतियोगी दिखाई देंगे और तदनुसार स्वीकृत उत्तर को बदल देंगे।