Gomoku lub Pięć z rzędu to gra planszowa rozgrywana przez dwóch graczy na siatce z czarno-białymi kamieniami. Ten, kto umie układać kamieni z rzędu (poziomo, pionowo lub po przekątnej), wygrywa.
Zasady
W tym KoTH zagramy w zasadę Zamień2, co oznacza, że gra składa się z dwóch faz: W początkowej fazie dwaj gracze określają, kto pierwszy / kto gra czarny, a następnie umieszczają jeden kamień w każdej rundzie, zaczynając od gracza który wybrał czarny.
Faza początkowa
Niech gracze będą A i B, a A otworzy grę:
- Umieszcza dwa czarny i jeden biały kamień na planszy
- B może wybrać jeden z następujących trzech ruchów:
- gracz B decyduje się zagrać na czarno: faza początkowa dobiegła końca
- gracz B decyduje się na umieszczenie białego kamienia i gra na biało: faza początkowa dobiegła końca
- gracz B decyduje się zagrać jeden czarny i jeden biały kamień: A wybiera kolor
Faza gry
Każdy gracz kładzie jeden kamień swojego koloru na planszy, zaczynając od gracza, który gra czarny, trwa to dopóki nie będzie już wolnych miejsc do gry (w tym przypadku jest remis) lub jeden gracz zdoła zagrać kamieni w jednym wiersz (w którym to przypadku gracz wygrywa).
Rząd oznacza poziomą, pionową lub ukośną. Zwycięstwo to zwycięstwo - nie ma znaczenia, czy graczowi udało się zdobyć więcej niż jeden rząd.
Zasady gry KoTH
- każdy gracz gra przeciwko sobie dwa razy:
- początkowo będzie losowo decydować, kto będzie pierwszy
- w następnej grze gracz, który grał jako ostatni, jest pierwszy
- wygrana jest warta 2 punkty, remis 1 i przegrana 0
- celem jest zdobycie jak największej liczby punktów
Twój bot
Aby to wyzwanie było dostępne dla jak największej liczby języków, wejście / wyjście będzie odbywać się za pośrednictwem stdin / stdout (liniowe). Program oceniający wyświetli monit o wydrukowanie linii na standardowe wejście bota, a twój bot wydrukuje jedną linię na standardowe wyjście .
Po otrzymaniu EXIT
wiadomości otrzymasz pół sekundy, aby zakończyć zapisywanie do akt, zanim sędzia zabije proces.
Losowość
Aby umożliwić weryfikację turniejów, sędzia stosuje losową randomizację, a twój bot musi to zrobić z tego samego powodu. Bot otrzyma ziarno za pomocą argumentu wiersza poleceń, którego powinien użyć, zobacz następną sekcję.
Argumenty
Bot otrzymuje dwa argumenty wiersza poleceń:
- imię przeciwnika
- ziarno losowości
Stan użytkownika
Ponieważ Twój program będzie zawsze uruchamiany jako nowy dla każdej gry, musisz użyć plików, aby zachować wszelkie informacje, które chcesz zachować. Możesz czytać / zapisywać dowolne pliki lub tworzyć / usuwać podfoldery w bieżącym katalogu. Nie masz dostępu do żadnych plików w żadnym katalogu nadrzędnym!
Format wejścia / wyjścia
BOARD
będzie oznaczać listę aktualnych kamieni, wymienia tylko pozycje, w których kamień jest umieszczony, a każda pozycja będzie miała postać, ((X,Y),COLOR)
gdzie X
i Y
będzie liczbą całkowitą z zakresu i będzie albo (czarna), albo ( biały).COLOR
"B"
"W"
Ponadto SP
oznacza pojedynczą spację, XY
krotkę (X,Y)
po dwie liczby całkowite w zakresie i oznacza wybór.|
W początkowej fazie istnieją trzy różne rodzaje komunikatów:
Prompt (judge) -> Answer (bot)
"A" SP "[]" -> XY XY XY
"B" SP BOARD -> "B" | "W" SP XY | XY XY
"C" SP BOARD -> "B" | "W"
- Pierwsza wiadomość prosi o trzy krotki, pierwsze dwie będą pozycjami czarnych kamieni, a trzecia pozycją białych.
- Druga wiadomość wymaga:
"B"
-> wybierz czarny"W" SP XY
-> wybierz biały i umieść biały kamień naXY
XY XY
-> umieść dwa kamienie (pierwszy czarny i drugi biały)
- Ostatni pyta tylko, w którym kolorze chcesz grać
Następnie rozpocznie się zwykła gra, a wiadomości staną się znacznie prostsze
N BOARD -> XY
gdzie N
jest numerem rundy (zaczynając od ) i będzie miejscem, w którym umieścisz kamień.XY
Jest jedna dodatkowa wiadomość, która nie oczekuje odpowiedzi
"EXIT" SP NAME | "EXIT TIE"
gdzie NAME
jest nazwa bota, który wygrał. Druga wiadomość zostanie wysłana, jeśli gra się skończy, ponieważ nikt nie wygrywa i nie ma już wolnych miejsc na kamienie (oznacza to, że nie można nazwać twojego bota TIE
).
Formatowanie
Ponieważ wiadomości z bota można dekodować bez spacji, wszystkie spacje zostaną zignorowane (np. (0 , 0) (0,12)
Traktowane jest tak samo jak (0,0)(0,12)
). Wiadomości od sędziego zawierają tylko spację do oddzielenia różnych sekcji (tj. Jak wspomniano powyżej z SP
), umożliwiając podział linii na spacje.
Każda nieprawidłowa odpowiedź spowoduje utratę tej rundy (nadal otrzymasz EXIT
wiadomość), zobacz zasady.
Przykład
Oto kilka przykładów rzeczywistych wiadomości:
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")]
Sędzia
Program oceniający możesz znaleźć tutaj : Aby dodać do niego bota, po prostu utwórz nowy folder w bots
folderze, umieść tam swoje pliki i dodaj plik meta
zawierający nazwę , polecenie , argumenty i flagę 0/1 (wyłącz / włącz stderr ) każdy na osobnej linii.
Aby uruchomić turniej, po prostu uruchom ./gomoku
i debuguj pojedynczy bot ./gomoku -d BOT
.
Uwaga: Więcej informacji na temat konfiguracji i używania sędziego w repozytorium Github. Istnieją również trzy przykładowe boty ( Haskell , Python i JavaScript ).
Zasady
- przy każdej zmianie bota * turniej zostanie wznowiony, a gracz z największą liczbą punktów wygra (rozstrzygnięcie to pierwsze zgłoszenie)
- możesz zgłosić więcej niż jednego bota, o ile nie grają w wspólną strategię
- nie wolno dotykać plików poza katalogiem (np. manipulować plikami innych graczy)
- jeśli twój bot ulegnie awarii lub wyśle nieprawidłową odpowiedź, bieżąca gra zostanie zakończona i przegrasz tę rundę
- chociaż sędzia (obecnie) nie egzekwuje limitu czasu na rundę, zaleca się utrzymanie czasu na niskim poziomie, ponieważ przetestowanie wszystkich zgłoszeń może być niewykonalne **
- nadużywanie błędów w programie dla sędziów liczy się jako luka
* Zachęcamy do korzystania z Github do oddzielnego przesyłania swojego bota bezpośrednio do bots
katalogu (i potencjalnie modyfikowania util.sh
)!
** W przypadku pojawienia się problemu zostaniesz powiadomiony, powiedziałbym, że cokolwiek poniżej 500 ms (to dużo!) Powinno być na razie w porządku.
Czat
Jeśli masz pytania lub chcesz porozmawiać o tym KoTH, dołącz do czatu !
Odpowiedzi:
KaitoBot
Wykorzystuje bardzo prymitywną implementację zasad MiniMax. Głębokość wyszukiwania jest również bardzo niska, ponieważ w przeciwnym razie zajmuje dużo czasu.
Może edytować, aby poprawić później.
Stara się także grać w czerń, jeśli to możliwe, ponieważ Wikipedia zdaje się mówić, że czerń ma przewagę.
Nigdy sam nie grałem w Gomoku, więc ustawiłem pierwsze trzy kamienie losowo z braku lepszego pomysłu.
EDYCJE: Zmieniono dynamicznie zmianę zarodka, ponieważ w przeciwnym razie gdy javascript przekroczył 2 ^ 52, JavaScript nie byłby w stanie poprawnie obsłużyć przyrostu
źródło