एसिमेट्रिकल कोथ: कैच द कैट
अद्यतन : gist-files को अपडेट किया जाता है (नए सबमिसिसिस सहित) कंट्रोलर के रूप में। Java एक्सेप्शन (केवल त्रुटियां) को नहीं पकड़ता है। यह अब त्रुटियों और अपवादों को पकड़ता है और उन्हें प्रिंट भी करता है।
इस चुनौती में दो धागे होते हैं, यह बिल्ली का धागा है, यहाँ पकड़ने वाला धागा मिल सकता है ।
कंट्रोलर को यहां से डाउनलोड किया जा सकता है ।
यह एक विषम KOTH है: प्रत्येक सबमिशन एक बिल्ली या एक पकड़ने वाला है । प्रत्येक बिल्ली और पकड़ने वाले की जोड़ी के बीच खेल होते हैं। बिल्लियों और पकड़ने वालों की अलग-अलग रैंकिंग है।
कैचर
एक हेक्सागोनल ग्रिड पर एक बिल्ली है। अपने काम के लिए यह संभव के रूप में तेजी से पकड़ने के लिए है। हर मोड़ पर, आप एक ग्रिड सेल पर पानी की बाल्टी रख सकते हैं ताकि बिल्ली को वहां जाने से रोका जा सके। लेकिन बिल्ली (शायद) उस गूंगे नहीं है, और जब भी आप एक बाल्टी डालते हैं, तो बिल्ली दूसरे ग्रिड सेल में चली जाएगी। चूंकि ग्रिड हेक्सागोनल है, बिल्ली 6 अलग-अलग दिशाओं में जा सकती है। आपका लक्ष्य बिल्ली को पानी की बाल्टियों से घेरना है, जितना जल्दी बेहतर होगा।
बिल्ली
तुम्हें पता है कि पकड़ने वाला तुम्हारे चारों ओर पानी की बाल्टी रखकर तुम्हें पकड़ना चाहता है। बेशक आप बाहर निकलने की कोशिश करते हैं, लेकिन जैसा कि आप एक आलसी बिल्ली हैं (बिल्लियों के रूप में) आप बिल्कुल उस समय एक कदम उठाते हैं। इसका मतलब है कि आप उसी जगह पर नहीं रह सकते हैं, लेकिन आपको आसपास के छह स्थानों में से एक पर जाना होगा। जब भी आप देखते हैं कि पकड़ने वाले ने एक नई पानी की बाल्टी रखी है तो आप दूसरे सेल में जाते हैं। बेशक आप यथासंभव लंबे समय से बचने की कोशिश करते हैं।
ग्रिड
ग्रिड हेक्सागोनल है, लेकिन जैसा कि हमारे पास हेक्सागोनल डेटा संरचना नहीं है, हम एक 11 x 11
वर्ग 2 डी सरणी लेते हैं और हेक्सागोनल 'व्यवहार' की नकल करते हैं कि बिल्ली केवल 6 दिशाओं में आगे बढ़ सकती है:
टोपोलॉजी टॉरॉयडल है, इसका मतलब है कि यदि आप सरणी के 'सेल' के बाहर कदम रखते हैं, तो आपको बस सरणी के दूसरी तरफ संबंधित सेल में स्थानांतरित किया जाएगा।
खेल
ग्रिड में दी गई स्थिति पर बिल्ली बाहर निकलने लगती है। पकड़ने वाला पहला कदम कर सकता है, फिर बिल्ली और उसका पकड़ने वाला वैकल्पिक तब तक चलता है जब तक बिल्ली को पकड़ा नहीं जाता है। चरणों की संख्या उस गेम का स्कोर है। बिल्ली जितना संभव हो उतना शानदार स्कोर प्राप्त करने की कोशिश करती है, पकड़ने वाला जितना संभव हो उतना कम स्कोर पाने की कोशिश करता है। आपके द्वारा भाग लिए गए सभी खेलों में औसत योग आपके सबमिशन का स्कोर होगा। दो अलग-अलग रैंकिंग हैं, एक बिल्ली के लिए, एक पकड़ने वालों के लिए।
नियंत्रक
दिए गए नियंत्रक को जावा में लिखा गया है। एक कैचर या एक बिल्ली के रूप में आपको प्रत्येक को एक जावा वर्ग को पूरा करना होगा (पहले से ही कुछ आदिम उदाहरण हैं) और इसे players
पैकेज में रखें (और नियंत्रक वर्ग में बिल्लियों / कैचर्स की सूची को अपडेट करें), लेकिन आप भी लिख सकते हैं उस वर्ग के भीतर अतिरिक्त कार्य। नियंत्रक सरल बिल्लियों / पकड़ने वाले वर्गों के प्रत्येक दो कार्यशील उदाहरणों के साथ आता है।
क्षेत्र एक 11 x 11
2D- int
सरणी है जो कोशिकाओं की वर्तमान स्थिति के मूल्यों को संग्रहीत करता है। यदि कोई कक्ष रिक्त है, तो उसका मान है 0
, यदि कोई बिल्ली है तो उसका मूल्य है -1
और यदि एक बाल्टी है तो एक है 1
।
दिए गए कुछ कार्य हैं जिनका आप उपयोग कर सकते हैं: isValidMove()
/ isValidPosition()
यह जाँचने के लिए हैं कि आपकी चाल (बिल्ली) / स्थिति (कैचर) वैध है या नहीं।
हर बार जब आपकी बारी है, तो आपका कार्य takeTurn()
कहा जाता है। तर्क में वर्तमान ग्रिड की एक प्रति है जिसमें read(i,j)
सेल को पढ़ने के लिए तरीके हैं (i,j)
, साथ ही isValidMove()/ isValidPosition()
यह आपके उत्तर की वैधता की जांच करता है। यह टॉरॉयडल टोपोलॉजी के रैपिंग ओवर का भी प्रबंधन करता है, इसका मतलब है कि भले ही ग्रिड केवल 11 x 11 है, आप अभी भी सेल (-5,13) तक पहुंच सकते हैं।
विधि को int
दो तत्वों की एक सरणी लौटना चाहिए , जो संभावित चालों का प्रतिनिधित्व करते हैं। बिल्लियों के लिए ये हैं {-1,1},{0,1},{-1,0},{1,0},{0,-1},{1,-1}
जो बिल्ली के जाने के स्थान के सापेक्ष स्थिति का प्रतिनिधित्व करते हैं, और पकड़ने वाले जहां वे एक बाल्टी रखना चाहते हैं, के पूर्ण निर्देशांक को वापस करते हैं {i,j}
।
यदि आपका तरीका एक अमान्य चाल पैदा करता है, तो आपका सबमिशन अयोग्य हो जाएगा। इस कदम को अमान्य माना जाता है, यदि आपकी मंजिल पर पहले से ही एक बाल्टी है या इस कदम को अनुमति नहीं है / गंतव्य पर पहले से ही कब्जा कर लिया गया है (एक बिल्ली के रूप में), या अगर पहले से ही एक बाल्टी / बिल्ली (एक पकड़ने वाले के रूप में) है। आप दिए गए कार्यों के साथ हाथ से पहले जाँच कर सकते हैं।
आपका सबमिशन काफी तेजी से काम करना चाहिए। यदि आपकी विधि प्रत्येक चरण के लिए 200ms से अधिक समय लेती है तो यह भी अयोग्य हो जाएगा। (अधिमानतः बहुत कम ...)
कार्यक्रमों को चरणों के बीच जानकारी संग्रहीत करने की अनुमति है।
प्रस्तुतियाँ
- आप जितने चाहें उतने सबमिशन बना सकते हैं।
- कृपया आपके द्वारा पहले से सबमिट की गई सबमिशन में बहुत फेरबदल न करें।
- कृपया एक नए उत्तर में प्रत्येक प्रस्तुतियाँ।
- प्रत्येक जमा को अधिमानतः यह अद्वितीय नाम होना चाहिए।
- सबमिशन में आपकी कक्षा का कोड और साथ ही एक विवरण होना चाहिए जो हमें बताता है कि आपका सबमिशन कैसे काम करता है।
<!-- language: lang-java -->
स्वचालित सिंटैक्स हाइलाइटिंग प्राप्त करने के लिए आप अपने सोर्सकोड की रेखा को लिख सकते हैं।
स्कोरिंग
सभी बिल्लियां सभी कैचर्स के खिलाफ एक ही समय में प्रतिस्पर्धा करेंगी । मैं वर्तमान स्कोर को बार-बार अपडेट करने की कोशिश करूंगा, विजेताओं का निर्धारण तब होगा जब गतिविधि कम हो जाएगी।
यह चुनौती इस पुराने फ़्लैश खेल से प्रेरित है
धन्यवाद @PhiNotPi परीक्षण और कुछ रचनात्मक प्रतिक्रिया देने के लिए।
वर्तमान स्कोर (प्रति जोड़ी 100 खेल)
Name Score Rank Author
RandCatcher 191962 8 flawr
StupidFill 212688 9 flawr
Achilles 77214 6 The E
Agamemnon 74896 5 The E
CloseCatcher 54776 4 randomra
ForwordCatcher 93814 7 MegaTom
Dijkstra 47558 2 TheNumberOne
HexCatcher 48644 3 randomra
ChoiceCatcher 43834 1 randomra
RandCat 77490 9 flawr
StupidRightCat 81566 6 flawr
SpiralCat 93384 5 CoolGuy
StraightCat 80930 7 CoolGuy
FreeCat 106294 3 randomra
RabidCat 78616 8 cain
Dijkstra's Cat 115094 1 TheNumberOne
MaxCat 98400 4 Manu
ChoiceCat 113612 2 randomra
main.Controller
, कॉल करने getCatchers()
और अनुकरण / तोड़फोड़ करने से रोकता है takeTurn
?