Avviso
Questa sfida è terminata e non verrà valutata nuovamente, ma sentiti libero di pubblicare risposte e testare il tuo programma contro gli altri con il Programma di controllo!
Lo scopo di questa sfida è fare in modo che un'intelligenza artificiale vinca una lotta contro un'altra intelligenza artificiale disegnando strategicamente un muro su una griglia 25x25 per bloccare l'avversario.
Ingresso
25 righe separate da e che terminano con ;
come argomento della riga di comando. Ciò includerà:
- Spazi vuoti
.
- Walls
#
- Giocatori
1
e2
(l'avversario è sempre2
)
Esempio
###############..........;..............#..........;..............#..........;..............#..........;..............#..........;...........1###..........;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;...................###...;...................#.##..;2..................#..#..;#..................##.#..;#...................#.###;....................#####;
che rappresenta la seguente mappa:
###############..........
..............#..........
..............#..........
..............#..........
..............#..........
...........1###..........
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
...................###...
...................#.##..
2..................#..#..
#..................##.#..
#...................#.###
....................#####
Produzione
Una stringa scritta sulla console che inizia con il carattere che rappresenta la direzione in cui l'IA desidera girare. Questo è case sensitive!
- Nord
N
- est
E
- Sud
S
- ovest
W
- Rinuncia (qualsiasi altra cosa)
Esempio
W
Regole del gioco
- Mentre gli AI si muovono, lasceranno dietro di sé una solida scia di muri.
- I giocatori iniziano negli angoli in alto a sinistra e in basso a destra
- Il gioco dura fino a quando un'intelligenza artificiale non colpisce un muro o l'IA si schianta l'uno contro l'altro.
- Un'intelligenza artificiale vince se il loro avversario si schianta per primo
- Non vi è alcun vincitore o perdente se gli IA perdono entrambi contemporaneamente.
- Se un'intelligenza artificiale esce da un bordo della griglia, continua nella stessa direzione dall'altro lato.
Classifica
1 ° posto - FloodBot (Java, 12 vittorie)
2 ° posto - FluidBot (Python, 9 vittorie)
3 ° posto - FillUpBot (C ++, 8 vittorie)
4 ° posto - AwayBot (Ruby, 5 vittorie)
5 ° posto - ArcBot (Python, 4 vittorie)
6 ° posto - BlindSnake (Lotto, 2 vittorie)
6 ° posto - RandomBot (C #, 2 vittorie)
Programma di controllo (testato per Python 3.3.3)
Il programma viene eseguito con argomenti dei due comandi e un singolo argomento ( ""
se non richiesto) per gli AI. Control.py "ruby" "AwayBot.rb" "FillUpBot.exe" ""
. Può essere scaricato qui .
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