แจ้งให้ทราบ
ความท้าทายนี้สิ้นสุดลงแล้วและจะไม่ถูกตัดสินอีกครั้ง แต่สามารถโพสต์คำตอบและทดสอบโปรแกรมของคุณกับผู้อื่นด้วยโปรแกรมควบคุม!
เป้าหมายของความท้าทายนี้คือการทำให้ AI ชนะการต่อสู้กับ AI อื่นโดยการวางกำแพงบนตาราง 25x25 เพื่อป้องกันคู่ต่อสู้
อินพุต
25 บรรทัดคั่นด้วยและลงท้ายด้วย;
อาร์กิวเมนต์บรรทัดคำสั่ง ซึ่งจะรวมถึง:
- ช่องว่าง
.
- กำแพง
#
- ผู้เล่น
1
และ2
(ฝ่ายตรงข้ามอยู่เสมอ2
)
ตัวอย่าง
###############..........;..............#..........;..............#..........;..............#..........;..............#..........;...........1###..........;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;...................###...;...................#.##..;2..................#..#..;#..................##.#..;#...................#.###;....................#####;
ซึ่งแสดงถึงแผนที่ดังต่อไปนี้:
###############..........
..............#..........
..............#..........
..............#..........
..............#..........
...........1###..........
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
...................###...
...................#.##..
2..................#..#..
#..................##.#..
#...................#.###
....................#####
เอาท์พุต
สตริงที่เขียนไปยังคอนโซลโดยเริ่มต้นด้วยอักขระที่แสดงถึงทิศทางที่ AI ประสงค์จะเปลี่ยน นี่คือกรณีที่ละเอียดอ่อน!
- ทางทิศเหนือ
N
- ตะวันออก
E
- ภาคใต้
S
- ตะวันตก
W
- ยอมแพ้ (สิ่งอื่นใด)
ตัวอย่าง
W
กฎของเกม
- ในขณะที่ AIs เคลื่อนที่พวกเขาจะทิ้งกำแพงทึบไว้ข้างหลังพวกเขา
- ผู้เล่นเริ่มต้นที่มุมซ้ายบนและล่างขวา
- เกมนี้ใช้งานได้นานจนกว่า AI ใด ๆ จะชนกำแพงหรือ AIs ชนเข้าด้วยกัน
- AI จะชนะถ้าฝ่ายตรงข้ามล้มเหลวก่อน
- นอกจากนี้ไม่มีผู้ชนะหรือผู้แพ้ถ้าเอไอเอสทั้งการสูญเสียในเวลาเดียวกัน
- หาก AI ดับลงที่ขอบด้านหนึ่งของตารางพวกเขาจะดำเนินการต่อในทิศทางเดียวกันจากอีกด้าน
การจัดอันดับ
อันดับที่ 1 - FloodBot (Java, 12 ชนะ)
อันดับที่ 2 - FluidBot (Python, 9 ชัยชนะ)
อันดับที่ 3 - FillUpBot (C ++, 8 ชนะ)
อันดับที่ 4 - AwayBot (Ruby, 5 ชัยชนะ)
อันดับที่ 5 - ArcBot (Python, 4 wins)
อันดับที่ 6 - BlindSnake (แบทช์, 2 ชนะ)
อันดับที่ 6 - RandomBot (C #, 2 ชนะ)
โปรแกรมควบคุม (ทดสอบสำหรับ Python 3.3.3)
โปรแกรมรันด้วยอาร์กิวเมนต์ของทั้งสองคำสั่งและอาร์กิวเมนต์เดียว ( ""
ถ้าไม่จำเป็น) สำหรับ AIs เช่น 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