दोनों: मारो और डूबो


12

परिचय

मेरे 5 वें KOTH के लिए, मैं आपके सामने कुछ ट्विस्ट के साथ जाने-माने गेम बैटलशिप के आधार पर एक चुनौती पेश करता हूं । आप केवल एक जहाज की कमान करेंगे, जिसका प्रकार आप 5 "परंपरावादी" वर्गों के बीच चयन करने में सक्षम होंगे, लेकिन आप हर क्रिया को करने में सक्षम होंगे, जिसमें हर मोड़ शामिल है! यह एक एफएफए (फ्री फॉर ऑल) के रूप में खेला जाता है और आपका लक्ष्य आखिरी खड़े होने वाला जहाज होगा।

सिद्धांत

खेल टर्न-आधारित है। खेल की शुरुआत में, आपको अपने जहाज का वर्ग चुनना होगा। फिर प्रत्येक मोड़, खिलाड़ी अपने जहाज के आधार पर कई कार्यों को निष्पादित करने में सक्षम होंगे।

खेल 2 डी ग्रिड (एक्स, वाई) पर होता है जिसका पक्ष इस तरह से परिभाषित किया गया है:
X = 30 + numberOfPlayer
Y = 30 + numberOfPlayer
प्रत्येक जहाज की शुरुआती स्थिति यादृच्छिक है।

प्ले ऑर्डर को प्रत्येक मोड़ पर यादृच्छिक किया जाता है, और आपको "कतार" में अपनी स्थिति का पता नहीं चलेगा और न ही खिलाड़ियों की संख्या। खेल 100 मोड़ तक रहता है या जब तक केवल एक जहाज जीवित बचा हो।

हर बार जब आप एक दुश्मन जहाज को मारते हैं या हिट हो जाते हैं, तो आप अंक अर्जित करेंगे या खो देंगे। उच्चतम स्कोर वाला खिलाड़ी जीतता है। विजेता को पुरस्कार दिया जाएगा (प्रतिभागियों की संख्या के आधार पर मूल्य)।

नियंत्रक आपको कमांड तर्कों के माध्यम से इनपुट प्रदान करता है, और आपके प्रोग्राम को स्टडआउट के माध्यम से आउटपुट करना होता है।

वाक्य - विन्यास

पहली बारी

आपके कार्यक्रम को एक बार बिना किसी तर्क के बुलाया जाएगा । आपको अपने जहाज का चयन करने के लिए 1 और 5 (सम्मिलित) के बीच पूर्णांक बनाना होगा:

1: विध्वंसक [लंबाई: 2, चाल / मोड़: 3, शॉट्स / मोड़: 1, रेंज: 9, खान: 4]
कौशल : नि: शुल्क जहाज रोटेशन (कोई cooldown)

2: पनडुब्बी [लंबाई: 3, चाल / मोड़: 2, शॉट्स / मोड़: 1, रेंज: 5, माइंस: 4]
कौशल : कैन प्लंज / सरफेस (आउटपुट देखें)। पानी के नीचे रहते हुए, आप केवल "आंदोलन" क्रियाओं का उपयोग कर सकते हैं और केवल एक स्कैन के साथ देखा जा सकता है। आप एक शॉट से मारा नहीं जा सकता, लेकिन खानों से नुकसान उठा सकते हैं।

3: क्रूजर [लंबाई: 3, चाल / मोड़: 1, शॉट्स / मोड़: 2, रेंज: 9, माइंस: 2]
कौशल : मरम्मत कर सकते हैं (आउटपुट देखें)

4: युद्धपोट [लंबाई: ४, चाल / मोड़: १, शॉट्स / मोड़: ३, रेंज: length, खान: १]
कौशल : कैन शील्ड (आउटपुट देखें)

5: कैरियर [लंबाई: 5, चाल / मोड़: 1, शॉट्स / मोड़: 1, रेंज: 7, खानों: 3]
कौशल : शॉट्स लक्ष्य के लिए एओई (प्रभाव का क्षेत्र) क्षति का सौदा करते हैं (1 रेंज स्प्लैश क्षति)। यदि लक्ष्य को गोली से मारा जाता है, तो इस जहाज की 2 कोशिकाएं भी क्षतिग्रस्त हो जाएंगी।

बदल जाता है

इनपुट

हर बार जब आपका कार्यक्रम कहा जाता है, तो उसे इस प्रारूप में तर्क प्राप्त होंगे:

Round;YourPlayerId;X,Y,Direction;Hull;Moves,Shots,Mines,Cooldown;Hits,Sunken,Damage;Underwater,Shield,Scan;Map

सीमा 1-अनुक्रमित हैं।

उदाहरण इनपुट

1;8;1,12,0;111;1,2,2,0;0,0,0;0,0,0;UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUXXXX.......UUUUUUUUXXXX.......UUUUUUUUXXXX.......UUUUUUUUXXXX.......UUUUUUUUXXXX.......UUUUUUUUXXXX.O.....UUUUUUUUXXXX.O.....UUUUUUUUXXXX.O.....UUUUUUUUXXXX.......UUUUUUUUXXXX.......UUUUUUUUXXXX.......UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU

यहां, यह पहला राउंड है, आप खिलाड़ी हैं।
आपका जहाज एक्स (1 = 1, वाई = 12) पर स्थित है और आपकी दिशा शीर्ष (0 = शीर्ष, 1 = दाएं, 2 = नीचे, 3 = बाएं) की ओर है )।
आपका पतवार क्षतिग्रस्त नहीं है (आपके जहाज की लंबाई 3 है, और प्रत्येक बिट सही है [1 = ठीक है, 0 = क्षतिग्रस्त])। आप 1 बार स्थानांतरित कर सकते हैं, 2 बार शूट कर सकते हैं, 2 खानों को छोड़ दिया है और आपका "कौशल" उपलब्ध है (कोल्डाउन = 0)।
आपने कुछ भी नहीं मारा, और न ही किसी जहाज को धराशायी किया है और आपको कोई चोट नहीं लगी है।
आप पानी के नीचे नहीं हैं, आपके ढाल (यदि कोई हो) सक्रिय नहीं हैं और आपका स्कैन भी नहीं है।
बाद में मानचित्र पर अधिक ...

उत्पादन

आपको एक स्ट्रिंग का उत्पादन करना होगा जिसमें यह वर्णन किया जाएगा कि आप इस मोड़ पर क्या कार्रवाई करेंगे। आपके आउटपुट स्ट्रिंग के पात्रों का क्रम क्रियाओं के क्रम को परिभाषित करेगा। यदि आप अपने जहाज की सीमा से अधिक नहीं करते हैं तो आप एक ही क्रिया को कई बार आउटपुट कर सकते हैं। यदि एक या कई कार्य अमान्य हैं, तो प्रत्येक को अलग-अलग माना जाएगा W। यहां उपलब्ध कार्यों की सूची दी गई है:

M: 1 सेल को उस दिशा में ले जाएँ, जिसका आप सामना कर रहे हैं (1 चाल का उपभोग करें)
B: जिस दिशा का आप सामना कर रहे हैं उससे 1 सेल वापस जाएँ (1 चाल का उपभोग
Cकरें ) : अपने जहाज को दक्षिणावर्त घुमाएँ (विध्वंसक के लिए 1 चाल / मुफ़्त का उपभोग करें)
K: अपने जहाज़ को घुमाएँ वामावर्त (डेस्ट्रोयर्स के लिए 1 चाल / मुफ़्त का उपभोग करें)
A: अपने जहाज का सामना उस दिशा में करें जहाँ आप काम कर रहे हैं (यदि कोई अन्य जहाज आपके द्वारा सामना की जा रही दिशा में सेल पर कब्जा कर रहा है / अपने जहाज को स्थानांतरित नहीं करता है / सभी चालों का उपभोग करता है)
F: रेंज में एक सेल में आग 1 शॉट (खपत 1 शॉट)। इस प्रारूप में लक्षित सेल द्वारा पालन किया जाना चाहिए ([+ -] एक्स [+ -]) हां / उदाहरण: F+2-3)
N: प्लेस 1 एक सेल अपने जहाज करने के लिए आसन्न करने के लिए मेरा (सभी दृश्यों और 1 मेरा उपभोग)। इस प्रारूप में लक्षित सेल द्वारा पालन किया जाना चाहिए ([+ -] एक्स [+ -]) हां / उदाहरण: N+0+1)
S: अगले मोड़ के लिए अपने स्कैन को सक्रिय करें (सभी शॉट्स का उपभोग करें)
R: अपने जहाज के "सिर" के निकटतम क्षतिग्रस्त पतवार की मरम्मत करें (सभी शॉट्स का उपभोग करें, cooldown = 3 मोड़ / क्रूजर केवल)
P: डुबकी / सतह (सभी शॉट्स का उपभोग करें ) , cooldown = 3 बदल जाता है, अधिकतम अवधि = 5 मोड़ / केवल पनडुब्बी)
D: अपनी ढाल को अपने अगले मोड़ के दौरान अगली क्षति को रोकने के लिए सक्रिय करें (सभी शॉट्स का उपभोग करें, cooldown = 3 / युद्धपोट केवल)
W: रुको (कुछ नहीं करता है)

स्पष्टता : "सभी चाल / शॉट्स का उपभोग करें" का अर्थ है कि आप इस क्रिया का उपयोग केवल तभी कर सकते हैं जब आपने इस मोड़ के दौरान अपनी किसी भी चाल / शॉट का उपयोग नहीं किया हो।

उदाहरण आउटपुट

MF+9-8CM : 1 सेल को स्थानांतरित करता है, फिर उस सेल पर आग लगाता है जिसकी आपके जहाज के "सिर" के सापेक्ष स्थिति है (लक्ष्यएक्सएक्स = एक्स + 9, लक्ष्यवाई = वाई - 8), दक्षिणावर्त मुड़ता है और अंत में 1 सेल फिर से चलता है।

गेमप्ले

ग्रिड

यहां एक उदाहरण ग्रिड (33 x 13) है जहां 3 खिलाड़ियों को रखा गया है:

███████████████████████████████████
█                                 █
█       00                        █
█   2                             █
█   2                             █
█   2                             █
█                                 █
█       11111                     █
█        M                        █
█                                 █
█                                 █
█                                 █
█                                 █
█                                 █
███████████████████████████████████

जैसा कि हम देख सकते हैं, Mखिलाड़ी 1 के ठीक बगल में एक खदान भी है ।

चलो स्थिति और दिशा को समझने के लिए खिलाड़ी 2 लें:

खिलाड़ी 2 की स्थिति X = 3, Y = 4, दिशा = 3. है क्योंकि इसकी दिशा "निचला" है, उसके "जहाज" के बाकी हिस्सों को "इसके" सिर "(X = 3, Y = 3) पर" तैनात "किया गया है। & (X = 3, Y = 2)

खिलाड़ी का नक्शा

प्रत्येक खिलाड़ी को प्राप्त होने वाला अंतिम तर्क उनका "अपना" नक्शा है। डिफ़ॉल्ट रूप से एक जहाज 5 कोशिकाओं की श्रेणी में सब कुछ का पता लगाता है , लेकिन यह इस सीमा को 9 तक बढ़ाने के लिए एक स्कैन को सक्रिय कर सकता है ।

तर्क हमेशा 361 (19 x 19) वर्ण लंबा होता है। यह आपके जहाज के "सिर" के चारों ओर केन्द्रित वर्ग का प्रतिनिधित्व करता है, जहाँ प्रत्येक वर्ण इस तरह परिभाषित तत्व से मेल खाता है:

.: खाली सेल
O: आपका जहाज
M: खान
X: दीवार (नक्शे से बाहर की कोशिकाएं)
U: अज्ञात (एक स्कैन से पता चलेगा)
A: दुश्मन जहाज undamaged सेल
B: दुश्मन जहाज क्षतिग्रस्त सेल
C: दुश्मन जहाज पानी के भीतर undamaged सेल (केवल एक स्कैन के साथ देखा)
Dशत्रु जहाज पानी के भीतर क्षतिग्रस्त सेल (केवल एक स्कैन के साथ देखा गया)
W: मलबे (मृत जहाज)

तार पहली पंक्ति के 19 वर्णों से बना है, इसके बाद दूसरी पंक्तियों के 19 वर्णक ... 19 वीं पंक्ति तक।

आइए एक नज़र डालते हैं कि खिलाड़ी 2 को स्कैन के बिना और उसके साथ क्या प्राप्त करता है (बेहतर समझ के लिए लाइन टूट जाती है, लेकिन खिलाड़ियों को नहीं भेजें):

XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXX.............
XXXXXX.......AA....
XXXXXX...O.........
XXXXXX...O.........
XXXXXX...O.........
XXXXXX.............
XXXXXX.......AAAAA.
XXXXXX........M....
XXXXXX.............
XXXXXX.............
XXXXXX.............
XXXXXX.............
XXXXXX.............
XXXXXXXXXXXXXXXXXXX

UUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUU
UUUUXXXXXXXXXXXUUUU
UUUUXX.........UUUU
UUUUXX.......AAUUUU
UUUUXX...O.....UUUU
UUUUXX...O.....UUUU
UUUUXX...O.....UUUU
UUUUXX.........UUUU
UUUUXX.......AAUUUU
UUUUXX........MUUUU
UUUUXX.........UUUU
UUUUXX.........UUUU
UUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUU

खान

खदानों को ट्रिगर किया जाता है जब एक जहाज किसी खदान के कब्जे वाले सेल में जाता है या जब खदान पर एक गोली चलाई जाती है। कार्रवाई "राम" के साथ खान को ट्रिगर नहीं किया जा सकता है।

खान खदान को रखने वाले को भी, सभी को एओई क्षति (1 सीमा छप क्षति) का सौदा करते हैं। यदि विस्फोट की परिधि में एक और खदान है तो माइन्स "चेन" विस्फोट कर सकते हैं।

रोटेशन

घुमाव केंद्रीय समरूपता हैं जो जहाज के "सिर" पर केंद्रित हैं। रोटेशन केवल एक खदान को ट्रिगर करेगा यदि इसे "गंतव्य स्थान" पर रखा गया है (आप किसी आर्क में खानों को ट्रिगर नहीं करेंगे।

प्रभाव का क्षेत्र

1 रेंज स्पलैश क्षति (खानों और कैरियर के शॉट्स के लिए) को प्रारंभिक शॉट / विस्फोट (x, y) पर केंद्रित 3x3 (9 कोशिकाओं) द्वारा परिभाषित किया गया है। यह उन निर्देशांक को हिट करता है:[x - 1; y - 1],[x - 1; y],[x - 1; y + 1],[x; y - 1],[x; y],[x; y + 1],[x + 1; y - 1],[x + 1; y],[x + 1; y + 1]

स्कोरिंग

स्कोरिंग को इस सूत्र द्वारा परिभाषित किया गया है:
Score = Hits + (Sunken x 5) - Damage taken - (Alive ? 0 : 10)

जहाँ::
hitsदुश्मन जहाज पर हिट की संख्या, या तो राम द्वारा, शॉट या माइन विस्फोट (श्रृंखला विस्फोट सहित दुश्मन जहाज सेल द्वारा क्षतिग्रस्त 1)
sunken: दुश्मन जहाज पर "अंतिम हिट" की संख्या जो इसे डूबने का कारण बनी
damage: संख्या प्राप्त हिट्स (मरम्मत द्वारा कम नहीं किए गए, लेकिन शील्ड द्वारा रोका गया)
alive: आपके जहाज को चेक करना अंत में जीवित है (कम से कम 1 पतवार सेल undamaged)

नियंत्रक

आप GitHub पर नियंत्रक पा सकते हैं । इसमें दो सैंपलबॉट भी शामिल हैं, जो जावा में लिखे गए हैं। इसे चलाने के लिए, प्रोजेक्ट देखें और इसे अपने जावा आईडीई में खोलें। कक्षा गेम की मुख्य विधि में प्रवेश बिंदु। जावा 8 की आवश्यकता है।

बॉट्स जोड़ने के लिए, पहले आपको जावा (.class फ़ाइलों) के लिए संकलित संस्करण या व्याख्या की गई भाषाओं के स्रोतों की आवश्यकता है। उन्हें प्रोजेक्ट के रूट फ़ोल्डर में रखें। फिर, खिलाड़ियों के पैकेज में एक नया जावा वर्ग बनाएं (आप पहले से मौजूद बॉट्स पर उदाहरण ले सकते हैं)। इस वर्ग को स्ट्रिंग स्ट्रिंगकैमड () पद्धति को ओवरराइड करने के लिए प्लेयर को लागू करना होगा। लौटाई गई स्ट्रिंग आपके बॉट्स को चलाने के लिए शेल कमांड है। आप उदाहरण के लिए इस आदेश के साथ रूबी बॉट काम कर सकते हैं: "C: \ Ruby \ bin \ ruby.exe MyBot.rb" ;। अंत में, खेल वर्ग के शीर्ष पर खिलाड़ियों की सरणी में बॉट जोड़ें।

नियम

  • बॉट को विशिष्ट अन्य बॉट को हरा या समर्थन करने के लिए नहीं लिखा जाना चाहिए।
  • फाइलों को लिखने की अनुमति है। कृपया "yoursubmissionname.txt" पर लिखें, गेम शुरू होने से पहले फ़ोल्डर खाली कर दिया जाएगा। अन्य बाहरी संसाधन अस्वीकृत हैं।
  • आपके सबमिशन का जवाब देने के लिए 1 सेकंड है।
  • अपनी प्रस्तुतियाँ संकलित करने और चलाने के लिए आदेश प्रदान करें।
  • आप कई सबमिशन लिख सकते हैं

समर्थित भाषाएँ

मैं हर भाषा का प्रयास और समर्थन करूंगा, लेकिन इसे मुफ्त में ऑनलाइन उपलब्ध होना चाहिए। यदि आप "मुख्यधारा" भाषा का उपयोग नहीं कर रहे हैं तो कृपया इंस्टॉलेशन के निर्देश प्रदान करें।

फिलहाल, मैं चला सकता हूं: जावा 6-7-8, पीएचपी, रूबी, पर्ल, पायथन 2-3, लूआ, आर, नोड.जेएस, हास्केल, कोटलिन, सी ++ 11।


दिलचस्प KotH, मेरे पास बस कुछ सवाल हैं: क्या हम कई सबमिशन (उदाहरण के लिए प्रत्येक प्रकार के जहाज के लिए एक) लिख सकते हैं? जब आप AoE के बारे में बात कर रहे होते हैं, तो यह स्थिति के चारों ओर एक वर्ग दाईं ओर होता है (यह [x + 1; y + 1] हिट करता है)?
काटेन्को

@Katenkyo हां, आप कई सबमिशन लिख सकते हैं। हां, यह 9 कोशिकाओं को हिट करता है:[x - 1; y - 1],[x - 1; y],[x - 1; y + 1],[x; y - 1],[x; y],[x; y + 1],[x + 1; y - 1],[x + 1; y],[x + 1; y + 1]
थ्रैक्स

तो, क्या पनडुब्बी अपने आप सतह पर आ जाती है? किस मोड़ पर?
विनाशकारी नींबू

भी एक साथ लिया जाता है?
विनाशकारी नींबू

यह भी राम की क्षमता के बारे में क्या उपयोगी है? (सिर्फ शूटिंग क्यों नहीं?)
विनाशकारी नींबू

जवाबों:


3

RandomBot

यह एक उदाहरण बॉट है। यह एक जहाज, एक कार्रवाई और एक लक्ष्य सेल (यदि आवश्यक हो) बेतरतीब ढंग से चुनता है।

import java.util.Random;

public class RandomBot {

    int round;
    int playerID;

    public static void main(String[] args) {

        if (args.length == 0) {
            Random random = new Random();
            int ship = random.nextInt(5);
            String[] ships = { "1", "2", "3", "4", "5" };
            System.out.println(ships[ship]);
        } else {
            new RandomBot().play(args[0].split(";"));
        }
    }

    private void play(String[] args) {

        round = Integer.parseInt(args[0]);
        playerID = Integer.parseInt(args[1]);

        String[] actions = { "M", "B", "C", "K", "F", "S", "N", "A" };
        Random random = new Random();
        int action = random.nextInt(8);

        int rangeX = random.nextInt(5);
        int rangeY = random.nextInt(5);
        int mineX = random.nextInt(1);
        int mineY = random.nextInt(1);

        String signX = random.nextInt(1) == 1 ? "+" : "-";
        String signY = random.nextInt(1) == 1 ? "+" : "-";

        System.out.println(actions[action] + (action == 4 ? signX + rangeX + signY + rangeY : "") + (action == 6 ? signX + mineX + signY + mineY : ""));
    }

}

PassiveBot

यह एक उदाहरण बॉट है। यह कुछ नहीं करता है।

public class PassiveBot {

    int round;
    int playerID;

    public static void main(String[] args) {

        if (args.length == 0) {
            System.out.println("5");
        } else {
            new PassiveBot().play(args[0].split(";"));
        }
    }

    private void play(String[] args) {

        round = Integer.parseInt(args[0]);
        playerID = Integer.parseInt(args[1]);

        System.out.println("W");
    }

}

3

पीसमेकर, अजगर 2 (युद्धपोत)

पीसमेकर निकटतम दुश्मनों (सर्पिल दूरी) पर 3 बार गोली मारता है और खानों से कम से कम 2 कोशिकाओं को दूर रहते हुए एक पंक्ति में आगे-पीछे होता है।

from os import sys

def reversedSpiralOrder(length):

    #Initialize our four indexes
    top = 0
    down = length - 1
    left = 0
    right = length - 1
    result = ""

    while 1:

        # Print top row
        for j in range(left, right + 1):
            result += str(top * length + j) + ";"
        top += 1
        if top > down or left > right:
            break

        # Print the rightmost column
        for i in range(top, down + 1):
            result += str(i * length + right) + ";"
        right -= 1
        if top > down or left > right:
            break

        # Print the bottom row
        for j in range(right, left + 1, -1):
            result += str(down * length + j) + ";"
        down -= 1
        if top > down or left > right:
            break

        # Print the leftmost column
        for i in range(down, top + 1, -1):
            result += str(i * length + left) + ";"
        left += 1
        if top > down or left > right:
            break

    result = result.split(";")
    del result[-1]
    return result[::-1]

def canMove(x, y, direction, hull, map):

    # M = 1, B = 2
    moves = 0

    if direction == 0:
        y1 = -1
        y2 = -2
        hx1 = hx2 = x1 = x2 = 0
        hy1 = -y1 + hull
        hy2 = -y2 + hull
    elif direction == 1:
        x1 = 1
        x2 = 2
        hy1 = hy2 = y1 = y2 = 0
        hx1 = -x1 - hull
        hx2 = -x2 - hull
    elif direction == 2:
        y1 = 1
        y2 = 2
        hx1 = hx2 = x1 = x2 = 0
        hy1 = -y1 - hull
        hy2 = -y2 - hull
    elif direction == 3:
        x1 = -1
        x2 = -2
        hy1 = hy2 = y1 = y2 = 0
        hx1 = -x1 + hull
        hx2 = -x2 + hull

    if map[y + y1][x + x1] == "." and map[y + y2][x + x2] != "M":
        moves += 1

    if map[y + hy1][x + hx1] == "." and map[y + hy2][x + hx2] != "M":
        moves += 2

    return moves

if len(sys.argv) <= 1:
    f = open("PeaceMaker.txt","w")
    f.write("")
    print "4"
else:
    arguments = sys.argv[1].split(";")
    sight = 19

    round = int(arguments[0])
    playerID = int(arguments[1])
    x = int(arguments[2].split(",")[0])
    y = int(arguments[2].split(",")[1])
    direction = int(arguments[2].split(",")[2])
    hull = arguments[3]
    moves = int(arguments[4].split(",")[0])
    shots = int(arguments[4].split(",")[1])
    mines = int(arguments[4].split(",")[2])
    cooldown = int(arguments[4].split(",")[3])
    hits = int(arguments[5].split(",")[0])
    kills = int(arguments[5].split(",")[0])
    taken = int(arguments[5].split(",")[0])
    underwater = int(arguments[6].split(",")[0])
    shield = int(arguments[6].split(",")[1])
    scan = int(arguments[6].split(",")[2])
    map = [[list(arguments[7])[j * sight + i] for i in xrange(sight)] for j in xrange(sight)]

    initialShots = shots


    priorities = reversedSpiralOrder(sight)

    actions = ""
    sighted = 0
    for priority in priorities:
        pX = int(priority) % sight
        pY = int(priority) / sight

        if map[pY][pX] == "A":
            sighted += 1
            if shots > 0:
                shots -= 1
                actions += "F" + ("+" if pX - 9 >= 0 else "") + str(pX - 9)  + ("+" if pY - 9 >= 0 else "") + str(pY - 9)

    if shots == initialShots and sighted > 0:
        actions += "D"
    elif shots == initialShots and sighted <= 0:
        actions += "S"
    else:
        actions += ""

    f = open("PeaceMaker.txt","r")
    fC = f.read(1)
    lastDirection = int("1" if fC == "" else fC)

    y = 9
    x = 9

    if lastDirection == 1:
        if canMove(x, y, direction, len(hull), map) == 1 or canMove(x, y, direction, len(hull), map) == 3:
            actions += "M"
        elif canMove(x, y, direction, len(hull), map) == 2:
            actions += "B"
            lastDirection = 0
    elif lastDirection == 0:
        if canMove(x, y, direction, len(hull), map) == 2 or canMove(x, y, direction, len(hull), map) == 3:
            actions += "B"
        elif canMove(x, y, direction, len(hull), map) == 1:
            actions += "M"
            lastDirection = 1

    f = open("PeaceMaker.txt","w")
    f.write(str(lastDirection))

    print actions

1
M पीसमेकर शूट ’। तुमने मुझे वहां खो दिया।
ओकेक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.