Wygenerowaliśmy już pola Saper , ale ktoś naprawdę musi zamiatać wygenerowane miny, zanim PCG wybuchnie!
Twoim zadaniem jest napisanie Minesweeper Solver, który będzie kompatybilny z nieco zmodyfikowaną wersją zaakceptowanego rozwiązania „Working Sinesweeper” (akcje są oddzielone spacjami, aby pozwolić na większe pola).
Dane wejściowe: pole Saper, pola oddzielone spacjami. Pierwszy wiersz oznacza całkowitą liczbę min.
x
: Nietknięty!
: Flaga- Cyfra: liczba min wokół tego pola
Przykład:
10
0 0 1 x x x x x
0 0 2 x x x x x
0 0 2 ! x x x x
0 0 1 2 x x x x
0 0 0 1 x x x x
1 1 0 2 x x x x
x 1 0 2 x x x x
1 1 0 1 x x x x
Wyjście: Twój następny krok w formacie action row column
(od zera)
Prawidłowe działania:
0
: Otwórz to1
: Umieść flagę
Przykład:
0 1 2
Zasady:
- Piszesz kompletny program, który przyjmuje pojedyncze pole jako dane wejściowe (argumenty STDIN lub wiersz poleceń) i wyprowadza pojedyncze działanie (STDOUT). Dlatego nie można zapisywać stanów, z wyjątkiem
!
. - Twój wybór musi być zgodny z najlepszymi szansami na przetrwanie. (tzn. jeśli istnieje 100% bezpieczny ruch, weź go)
- To jest golf golfowy ; najkrótsze rozwiązanie (w bajtach UTF-8) wygrywa
Testy:
Testy te służą do testowania typowych wyraźnych sytuacji; twój program musi działać dla każdego pola testowego.
W:
4
x x x x
1 2 x x
0 1 2 x
0 0 1 x
Out (dowolny z tych):
1 1 2
0 0 2
0 1 3
W:
2
x x x
1 ! x
1 1 x
Out (dowolny z tych):
0 0 0
0 0 1
0 1 2
0 2 2
1 0 2
W:
10
x x x x x x x x
1 3 3 x x x x x
0 1 ! 3 3 4 x x
0 2 3 ! 2 3 x x
0 1 ! 2 2 ! x x
Out (dowolny z tych):
1 1 5
1 0 2
W:
2
x x x
2 3 1
! 1 0
Out (dowolny z tych):
0 0 1
1 0 0
1 0 2
0 0 2
lub 0 1 3
. Nie rozumiem, jak którykolwiek z nich byłby uważany za bezpieczny. (Nie mogę być wystarczająco dobry w
F
lub P
lepiej wygląda flaga niż !
:)