एसिमेट्रिकल कोथ: कैच द कैट
अद्यतन : जीआईएस-फाइलें अद्यतन की जाती हैं (नियंत्रक के रूप में नई उप-जेलों सहित)। यह अब त्रुटियों और अपवादों को पकड़ता है और उन्हें प्रिंट भी करता है।
इस चुनौती में दो धागे शामिल हैं, यह पकड़ने वाला धागा है, बिल्ली का धागा यहां पाया जा सकता है ।
कंट्रोलर को यहां से डाउनलोड किया जा सकता है ।
यह एक विषम 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 191674 8 flawr
StupidFill 214246 9 flawr
Achilles 76820 6 The E
Agamemnon 74844 5 The E
CloseCatcher 54920 4 randomra
ForwordCatcher 94246 7 MegaTom
Dijkstra 46500 2 TheNumberOne
HexCatcher 48832 3 randomra
ChoiceCatcher 43828 1 randomra
RandCat 77928 7 flawr
StupidRightCat 81794 6 flawr
SpiralCat 93868 5 CoolGuy
StraightCat 82452 9 CoolGuy
FreeCat 106304 3 randomra
RabidCat 77770 8 cain
Dijkstra's Cat 114670 1 TheNumberOne
MaxCat 97768 4 Manu
ChoiceCat 113356 2 randomra
PRINT_STEPS = true
, तो फ़ाइल में अधिक विस्तृत सेटिंग्स MyFrame.java
)। फिर मैंने इसे लिसेक के साथ रिकॉर्ड किया और इसे जीआईएमपी के साथ संपादित किया । यदि आपके पास और प्रश्न हैं तो बस पूछें!