नोटिस
यह चुनौती समाप्त हो गई है और फिर से न्याय नहीं किया जाएगा, लेकिन जवाब देने और नियंत्रण कार्यक्रम के साथ दूसरों के खिलाफ अपने कार्यक्रम का परीक्षण करने के लिए स्वतंत्र महसूस करें!
इस चुनौती का उद्देश्य प्रतिद्वंद्वी को अवरुद्ध करने के लिए 25x25 ग्रिड पर रणनीतिक रूप से दीवार खींचकर एक अन्य AI के खिलाफ लड़ाई जीतने के लिए एक AI बनाना है।
इनपुट
;कमांड लाइन तर्क के रूप में 25 लाइनें अलग और समाप्त होती हैं । इसमें शामिल होंगे:
- खाली स्थान
. - दीवारों
# - खिलाड़ी
1और2प्रतिद्वंद्वी हमेशा होता है2)
उदाहरण
###############..........;..............#..........;..............#..........;..............#..........;..............#..........;...........1###..........;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;...................###...;...................#.##..;2..................#..#..;#..................##.#..;#...................#.###;....................#####;
जो निम्नलिखित नक्शे का प्रतिनिधित्व करता है:
###############..........
..............#..........
..............#..........
..............#..........
..............#..........
...........1###..........
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
...................###...
...................#.##..
2..................#..#..
#..................##.#..
#...................#.###
....................#####
उत्पादन
कंसोल के साथ लिखा एक स्ट्रिंग जो चरित्र को दिशा में दर्शाता है जो एआई मोड़ना चाहता है। यह है मामला संवेदनशील!
- उत्तर
N - पूर्व
E - दक्षिण
S - पश्चिम
W - छोड़ देना (कुछ भी)
उदाहरण
W
खेल के नियमों
- जैसे ही एआई चलते हैं, वे अपने पीछे दीवारों का एक ठोस निशान छोड़ देंगे।
- खिलाड़ी शीर्ष-बाएं और नीचे-दाएं कोने में शुरू करते हैं
- खेल तब तक चलता है जब तक कोई एआई एक दीवार से टकराता है या एआई एक दूसरे में दुर्घटनाग्रस्त हो जाता है।
- एआई जीतता है अगर उनका प्रतिद्वंद्वी पहले दुर्घटनाग्रस्त हो जाता है
- नहीं है कोई विजेता या पराजित करता है, तो एआईएस दोनों खो एक ही समय में।
- यदि एआई ग्रिड के एक किनारे से चला जाता है, तो वे दूसरी तरफ से उसी दिशा में चलते रहते हैं।
रैंकिंग
पहला स्थान - फ्लडबॉट (जावा, 12 जीत)
दूसरा स्थान - फ्लूडबॉट (पायथन, 9 जीत)
तीसरा स्थान - फिल्पबोट (C ++, 8 जीत)
4 वां स्थान - अवेबोट (रूबी, 5 जीत)
5 वां स्थान - आर्कबॉट (पायथन, 4 जीत)
6 वां स्थान - ब्लाइंडस्नेक (बैच, 2 जीत)
6 वां स्थान - रैंडमबॉट (C #, 2 जीत)
नियंत्रण कार्यक्रम (पायथन 3.3.3 के लिए परीक्षण किया गया)
कार्यक्रम दो आदेशों और एक तर्क ( ""यदि आवश्यक नहीं है) के लिए एई उदाहरण के लिए चलाया जाता है । Control.py "ruby" "AwayBot.rb" "FillUpBot.exe" ""। इसे यहां से डाउनलोड किया जा सकता है ।
import sys, subprocess
Program1, Argument1, Program2, Argument2, Player1, Player2, Grid = sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], [0, 0], [24, 24], [['.' for y in range(25)] for x in range(25)]
while True:
Str = ''
for x in range(25):
for y in range(25):
if Grid[x][y] == '1' or Grid[x][y] == '2':
Grid[x][y] = '#'
Grid[Player1[0]][Player1[1]] = '1'
Grid[Player2[0]][Player2[1]] = '2'
for y in range(25):
for x in range(25):
Str += Grid[x][y]
Str += ';'
if Argument1 == '':
move = subprocess.Popen([Program1, Str], stdout=subprocess.PIPE).stdout.read().decode('ASCII')[0]
else:
move = subprocess.Popen([Program1, Argument1, Str], stdout=subprocess.PIPE).stdout.read().decode('ASCII')[0]
Lose1 = False
if move == 'N':
if Player1[1] > 0:
Player1[1] -= 1
else:
Player1[1] = 24
elif move == 'E':
if Player1[0] < 24:
Player1[0] += 1
else:
Player1[0] = 0
elif move == 'S':
if Player1[1] < 24:
Player1[1] += 1
else:
Player1[1] = 0
elif move == 'W':
if Player1[0] > 0:
Player1[0] -= 1
else:
Player1[0] = 24
else:
Lose1 = True
if Grid[Player1[0]][Player1[1]] == '#' or Grid[Player1[0]][Player1[1]] == '2':
Lose1 = True
print('Player 1:', move)
if Argument2 == '':
move = subprocess.Popen([Program2, Str.replace('2','3').replace('1','2').replace('3','1')], stdout=subprocess.PIPE).stdout.read().decode('ASCII')[0]
else:
move = subprocess.Popen([Program2, Argument2, Str.replace('2','3').replace('1','2').replace('3','1')], stdout=subprocess.PIPE).stdout.read().decode('ASCII')[0]
Lose2 = False
if move == 'N':
if Player2[1] > 0:
Player2[1] -= 1
else:
Player2[1] = 24
elif move == 'E':
if Player2[0] < 24:
Player2[0] += 1
else:
Player2[0] = 0
elif move == 'S':
if Player2[1] < 24:
Player2[1] += 1
else:
Player2[1] = 0
elif move == 'W':
if Player2[0] > 0:
Player2[0] -= 1
else:
Player2[0] = 24
elif Lose1:
Lose2 = True
else:
Lose2 = True
print('Player 2:', move)
print(Str.replace(';', '\n'))
if Grid[Player2[0]][Player2[1]] == '#':
Lose2 = True
if Lose1 and Lose2:
print('Draw!')
break
elif Lose1:
print('Player 2 wins!')
break
elif Lose2:
print('Player 1 wins!')
break