tło
Hex to abstrakcyjna gra strategiczna dla dwóch graczy, rozgrywana na K×K
rombie sześciokątnych płytek. Dwie przeciwne strony rombu są w kolorze białym, a pozostałe dwie czarne, a dwaj gracze, czarno-biały, umieszczają kolejno swój symbol koloru na niezajętym kafelku. Gracz, który jako pierwszy zdoła zbudować ścieżkę między przeciwnymi stronami swojego koloru, jest zwycięzcą. Wiadomo, że gra nie może zakończyć się remisem i że pierwszy gracz ma strategię wygraną niezależnie od wielkości planszy (szczegóły na stronie Wikipedii).
Zadanie
W tym wyzwaniu ustalamy rozmiar planszy na K = 4
i reprezentujemy planszę jako następującą siatkę. Grube linie oznaczają sąsiadujące płytki.
Twoim zadaniem jest opracowanie zwycięskiej strategii dla pierwszego gracza, którą możesz wybrać jako czarny lub biały. Oznacza to, że niezależnie od tego, jakie legalne ruchy wykona przeciwny gracz, twoja gra musi zakończyć się zwycięstwem. Twój wkład to pozycja w grze (układ żetonów na planszy), a twój wynik to legalny ruch, w formacie określonym poniżej. Jeśli chcesz sam znaleźć zwycięską strategię, nie czytaj tego spoilera:
Zarys jednej możliwej strategii wygranej, przy założeniu, że biały jest pierwszy. Najpierw wybierz 5. Następnie, jeśli masz ścieżkę od 5 do dolnego rzędu LUB czarny wybiera 0 lub 1 w dowolnym punkcie, odpowiedz, wybierając dowolną z 0 lub 1, która jest pusta. Jeśli czarny wybierze 9 lub 13, wybierz 10, a następnie którykolwiek z 14 lub 15 jest wolny. Jeśli czarny nie wybierze 9, 13 lub 14, wybierz 9, a następnie którykolwiek z 13 lub 14 jest wolny. Jeśli czarny wybierze 14, odpowiedz, wybierając 15. Następnie wybierz 10, jeśli jest wolny; jeśli czarny wybierze 10, odpowiedz 11. Jeśli czarny wybierze 6, odpowiedz 7, a następnie dowolna z 2 lub 3 jest pusta. Jeśli czarny nie wybierze 6, wybierz go, aby uzyskać ścieżkę od 5 do dolnego rzędu.
Wejście i wyjście
Twój wkład to ciąg 16 znaków WBE
, które oznaczają białe, czarne i puste. Reprezentują płytki planszy, jak wyliczono powyżej. Możesz wybrać metodę wprowadzania (która określa również metodę wyjściową) z następujących czynności:
- Wejście ze STDIN, wyjście do STDOUT.
- Wprowadź jako jeden argument wiersza poleceń, wyślij do STDOUT.
- Wprowadź jako 16 jednoznakowych argumentów wiersza poleceń, wyślij do STDOUT.
- Dane wejściowe jako argument funkcji o nazwie, dane wyjściowe jako wartość zwracana.
Twój wynik reprezentuje płytkę, na której umieszczasz następny żeton, ponieważ twoja kolej na ruch. Możesz wybrać jeden z następujących formatów wyjściowych:
- Indeks zerowy (jak na powyższym obrazku).
- Indeks oparty na jednym.
- Łańcuch wejściowy z jednym
E
zamienionym na którykolwiekW
lubB
wybrany przez gracza.
Zasady
Twoja strategia musi być deterministyczna. Nie musisz poprawnie obsługiwać pozycji w grze, które są nieosiągalne z pustej planszy za pomocą strategii, lub pozycji, które już wygrywają dla któregoś z graczy, i możesz się na nich upaść. I odwrotnie, na planszach, które są osiągalne dzięki twojej strategii, musisz zwrócić legalny ruch.
To jest golf golfowy, więc wygrywa najmniejsza liczba bajtów. Standardowe luki są niedozwolone.
Testowanie
Napisałem kontroler Python 3 do sprawdzania poprawności wpisów, ponieważ byłoby to bardzo żmudne robić ręcznie. Możesz go znaleźć tutaj . Obsługuje pierwsze trzy formaty wejściowe i funkcje Pythona 3 (funkcje w innych językach muszą być opakowane w programy), wszystkie trzy formaty wyjściowe i oba odtwarzacze. Jeśli strategia nie wygrywa, wyświetli znalezioną przegraną grę, abyś mógł ulepszyć swój program.
Incorrect response 'WWWWWWWWBBBBBBBB' to message 'WWWWWWWWBBBBBBBB'.
Powinienem był wygrać dawno temu, czy się mylę?