Gomoku o Five di fila è un gioco da tavolo giocato da due giocatori su una griglia con pietre bianche e nere. Chiunque sia in grado di posizionare 5 pietre di fila (orizzontale, verticale o diagonale) vince la partita.
Regole
In questo KoTH giocheremo la regola Swap2, il che significa che una partita è composta da due fasi: Nella fase iniziale i due giocatori determinano chi inizia per primo / chi gioca nero, dopodiché posizioneranno una pietra ogni round a partire dal giocatore chi ha scelto il nero.
Fase iniziale
Lascia che i giocatori siano A e B e A aprirà il gioco:
- A piazza due pietre nere e una bianca sulla scacchiera
- B può scegliere una delle tre mosse seguenti:
- il giocatore B decide di giocare in nero: la fase iniziale è terminata
- il giocatore B decide di posizionare una pietra bianca e gioca bianco: la fase iniziale è finita
- il giocatore B decide di giocare una pietra nera e una bianca: A arriva a scegliere il colore
Fase di gioco
Ogni giocatore piazza una pietra del suo colore sul tabellone, a partire dal giocatore che gioca in nero, continua fino a quando non ci sono più spazi liberi da giocare (nel qual caso è un pareggio) o un giocatore riesce a giocare pietre in un riga (nel qual caso vince quel giocatore).
Una riga significa orizzontale, verticale o diagonale. Una vittoria è una vittoria - non importa se il giocatore è riuscito a segnare più di una riga.
Regole del gioco KoTH
- ogni giocatore gioca due volte contro l'altro:
- inizialmente verrà deciso casualmente chi inizia per primo
- nella prossima partita il giocatore che ha giocato per ultimo va per primo
- una vittoria vale 2 punti, un pareggio 1 e una perdita 0
- l'obiettivo è quello di segnare il maggior numero di punti possibile
Il tuo bot
Per rendere questa sfida accessibile per quante più lingue possibile, l'input / output avverrà tramite stdin / stdout (basato su linea). Il programma jud chiederà al tuo programma stampando una riga sullo stdin del tuo bot e il tuo bot stamperà una riga su stdout .
Una volta ricevuto un EXIT
messaggio, ti verrà dato mezzo secondo per terminare la scrittura su file prima che il giudice uccida il processo.
casualità
Per rendere verificabili i tornei, il giudice usa la randomizzazione seed e anche il tuo bot deve farlo, per lo stesso motivo. Al bot verrà assegnato un seed tramite l'argomento della riga di comando che dovrebbe utilizzare, fare riferimento alla sezione successiva.
argomenti
Il bot riceve due argomenti della riga di comando:
- nome dell'avversario
- seme per casualità
Stato dell'utente
Poiché il tuo programma verrà sempre avviato come nuovo per ogni gioco, dovrai utilizzare i file per conservare le informazioni che desideri conservare. Puoi leggere / scrivere qualsiasi file o creare / rimuovere sottocartelle nella tua directory corrente. Non ti è permesso accedere ad alcun file in nessuna directory principale!
Formato di input / output
BOARD
((X,Y),COLOR)
X
Y
COLOR
"B"
"W"
SP
XY
(X,Y)
|
Nella fase iniziale ci sono tre diversi tipi di messaggi:
Prompt (judge) -> Answer (bot)
"A" SP "[]" -> XY XY XY
"B" SP BOARD -> "B" | "W" SP XY | XY XY
"C" SP BOARD -> "B" | "W"
- Il primo messaggio richiede tre tuple, le prime due saranno le posizioni delle pietre nere e la terza la posizione per quelle bianche.
- Il secondo messaggio chiede:
"B"
-> scegli il nero"W" SP XY
-> scegli bianco e posiziona una pietra bianca suXY
XY XY
-> posizionare due pietre (la prima nera e la seconda bianca)
- L'ultimo chiede solo per quale colore vuoi giocare
Successivamente inizierà il gioco normale e i messaggi diventeranno molto più semplici
N BOARD -> XY
N
XY
C'è un ulteriore messaggio che non prevede una risposta
"EXIT" SP NAME | "EXIT TIE"
dov'è NAME
il nome del bot che ha vinto. Il secondo messaggio verrà inviato se il gioco termina a causa di nessuno che vince e non ci sono più spazi liberi per posizionare le pietre (questo implica che il tuo bot non può essere nominato TIE
).
Formattazione
Poiché i messaggi dal bot possono essere decodificati senza spazi, tutti gli spazi verranno ignorati (ad es. (0 , 0) (0,12)
Vengono trattati come (0,0)(0,12)
). I messaggi del giudice contengono solo uno spazio per separare sezioni diverse (es. Come notato sopra con SP
), che consente di dividere la linea su spazi.
Qualsiasi risposta non valida comporterà la perdita di quel round (riceverai comunque un EXIT
messaggio), vedi le regole.
Esempio
Ecco alcuni esempi di messaggi reali:
A []
B [((0,0),"B"),((0,1),"W"),((14,14),"B")]
1 [((0,0),"B"),((0,1),"W"),((1,0),"B"),((1,1),"W"),((14,14),"B")]
Giudice
Puoi trovare il programma judge qui : Per aggiungere un bot ad esso semplicemente crea una nuova cartella nella bots
cartella, posiziona i tuoi file lì e aggiungi un file meta
contenente nome , comando , argomenti e un flag 0/1 (disabilita / abilita stderr ) ciascuno su una linea separata.
Per eseguire un torneo basta eseguire ./gomoku
e eseguire il debug di una singola corsa bot ./gomoku -d BOT
.
Nota: è possibile trovare ulteriori informazioni su come impostare e utilizzare il giudice nel repository Github. Ci sono anche tre robot di esempio ( Haskell , Python e JavaScript ).
Regole
- ad ogni cambio di bot * il torneo verrà ripetuto e il giocatore con il maggior numero di punti vince (il tie-break è il primo invio)
- puoi inviare più di un bot purché non svolgano una strategia comune
- non ti è permesso di toccare file al di fuori della tua directory (es. manipolazione dei file di altri giocatori)
- se il tuo bot si arresta in modo anomalo o invia una risposta non valida, il gioco corrente viene chiuso e perdi quel round
- mentre il giudice (attualmente) non impone un limite di tempo per round, si consiglia di mantenere basso il tempo speso in quanto potrebbe diventare impossibile testare tutti gli invii **
- abusare di bug nel programma del giudice conta come scappatoia
* Sei incoraggiato a usare Github per inviare separatamente il tuo bot direttamente nella bots
directory (e potenzialmente modificarlo util.sh
)!
** Nel caso in cui diventi un problema che ti verrà comunicato, direi che qualsiasi cosa sotto 500ms (che è molto!) Dovrebbe andare bene per ora.
Chiacchierare
Se hai domande o vuoi parlare di questo KoTH, sentiti libero di unirti alla chat !