Niedawno zapoznałem się z grą w puzzle Solitaire Chess . Podsumuję zasady tutaj:
- Tablica jest szachownicą 4x4.
- Wszystkie elementy są tego samego koloru (bez drużyn) i wszystkie elementy mogą przechwycić każdy inny element.
- Każdy ruch musi być chwytaniem. Brak ruchu do pustych kwadratów.
- Na końcu musi pozostać dokładnie jeden kawałek.
- Wszystkie pionki poruszają się dokładnie tak, jak w szachach, z jedną modyfikacją: pionek może przechwytywać w dowolnym kierunku po przekątnej (co technicznie czyni go ferz ). Dla dobra tych, którzy mogą nie wiedzieć, zamieściłem diagramy ruchów.
- Żadne inne zasady gry w szachy (takie jak czek, castling itp.) Nie mają tutaj zastosowania. Chodzi o przechwytywanie.
Król (K)
K * . . | * K * . | * * * .
* * . . | * * * . | * K * .
. . . . | . . . . | * * * .
. . . . | . . . . | . . . .
Królowa (Q)
Q * * * | * Q * * | * * * .
* * . . | * * * . | * Q * *
* . * . | . * . * | * * * .
* . . * | . * . . | . * . *
Gawron (R)
R * * * | * R * * | . * . .
* . . . | . * . . | * R * *
* . . . | . * . . | . * . .
* . . . | . * . . | . * . .
Biskup (B)
B . . . | . B . . | * . * .
. * . . | * . * . | . B . .
. . * . | . . . * | * . * .
. . . * | . . . . | . . . *
Rycerz (N)
N . . . | . N . . | . . . *
. . * . | . . . * | . N . .
. * . . | * . * . | . . . *
. . . . | . . . . | * . * .
Pionek (P)
P . . . | . P . . | * . * .
. * . . | * . * . | . P . .
. . . . | . . . . | * . * .
. . . . | . . . . | . . . .
Wejście wyjście
Dla porównania wykorzystana zostanie przykładowa łamigłówka ze strony Solitaire Chess:
. . . .
. B . .
R P . .
. . . N
Rozwiązaniem jest zabranie pionka z rycerzem, następnie zabranie go z wieżą, a na końcu zabranie biskupa z wieżą.
Wejście
Dane wejściowe muszą mieć jedną z trzech form; możesz wybrać ten, który jest dla ciebie najwygodniejszy.
- Ciąg znaków, takich jak
.....B..RP.....N, z nowymi liniami lub bez nich. Znak reprezentujący puste miejsce może być dowolną postacią, która nie jest jedną z nichKQRBNP. - Lista list (lub spłaszczona lista), w których elementami są albo znaki, albo liczby, na przykład:
[['.', '.', '.', '.'], ['.', 'B', '.', '.'], ['R', 'P', '.', '.'], ['.', '.', '.', 'N']]lub[[0, 0, 0, 0], [0, 4, 0, 0], [3, 6, 0, 0], [0, 0, 0, 5]]. W pierwszym przypadku postacią reprezentującą puste miejsce może być cokolwiek innegoKQRBNP. Dla tych ostatnich podałem figurom liczbę odpowiadającą ich rangi na mojej wcześniejszej liście ruchów (1jest królem,4jest biskupem,6jest pionkiem itp.). Możesz zmienić numerację. - Lista współrzędnych, gdzie każdy element ma postać
[x, y, 'c'], tak:[[1, 2, 'B'], [0, 1, 'R'], [1, 1, 'P'], [3, 0, 'N']].
Jeśli wybierzesz jeden z formatów wejściowych opartych na liście, separatory i separatory mogą być dowolnymi rozsądnymi i zrozumiałymi znakami.
Wynik
Wyjściem musi być sekwencja ruchów lub sekwencja stanów planszy. Niektóre łamigłówki mają więcej niż jedno rozwiązanie; możesz wypisać jeden lub wszystkie z nich. Jeśli zdecydujesz się wyprowadzić sekwencję stanów tablicy, każda tablica musi mieć jeden z trzech formatów wejściowych, z rozsądnym separatorem (takim jak znaki nowej linii) między nimi.
Jeśli zdecydujesz się na wyjściu sekwencję ruchów, muszą być wyrażone w postaci listy par par współrzędnych, tak jak poniżej: [[[3,0], [1,1]], [[0,1], [1,1]], [[1,1], [1,2]]]. [0,0]reprezentuje lewy dolny róg i ponownie rozdzielanie i ograniczanie znaków może być rozsądnym wyborem.
Jeśli dana tablica nie może zostać rozwiązana, wypisz dowolną wartość fałszowania ( 0pusty ciąg itp.) Jeśli dana plansza ma mniej niż dwa elementy, zachowanie jest niezdefiniowane.
Przypadki testowe
Uwaga: dane wyjściowe podano tylko jako listę par współrzędnych, ponieważ inne formaty powinny być dość łatwe do sprawdzenia poprawności (i nie miałem ochoty wpisywać wszystkich możliwych formatów wyjściowych). Ponadto w przypadku łamigłówek, które mają więcej niż jedno rozwiązanie, dostępna jest tylko jedna możliwość.
Wejście 1:
. . . N
. . . .
. R . .
. . B .
...N.....R....B.
[['.', '.', '.', 'N'], ['.', '.', '.', '.'], ['.', 'R', '.', '.'], ['.', '.', 'B', '.']]
[[0, 0, 0, 5], [0, 0, 0, 0], [0, 3, 0, 0], [0, 0, 4, 0]]
[[3, 3, 'N'], [1, 1, 'R'], [2, 0, 'B']]
Wyjście 1:
[[[2,0], [1,1]], [[1,1], [3,3]]]
Wejście 2:
. . . .
. B . .
R P . .
. . . N
.....B..RP.....N
[['.', '.', '.', '.'], ['.', 'B', '.', '.'], ['R', 'P', '.', '.'], ['.', '.', '.', 'N']]
[[0, 0, 0, 0], [0, 4, 0, 0], [3, 6, 0, 0], [0, 0, 0, 5]]
[[1, 2, 'B'], [0, 1, 'R'], [1, 1, 'P'], [3, 0, 'N']]
Wyjście 2:
[[[3,0], [1,1]], [[0,1], [1,1]], [[1,1], [1,2]]]
Wejście 3:
. N R .
B . . .
N . . B
. . P .
.NR.B...N..B..P.
[['.', 'N', 'R', '.'], ['B', '.', '.', '.'], ['N', '.', '.', 'B'], ['.', '.', 'P', '.']]
[[0, 5, 3, 0], [4, 0, 0, 0], [5, 0, 0, 4], [0, 0, 6, 0]]
[[1, 3, 'N'], [2, 3, 'R'], [0, 2, 'B'], [0, 1, 'N'], [3, 1, 'B'], [2, 0, 'P']]
Wyjście 3:
[[[2,0], [3,1]], [[0,1], [1,3]], [[0,2], [1,3]], [[2,3], [1,3]], [[3,1], [1,3]]]
Wejście 4:
. . . N
. . . R
R B B .
N P P .
...N...RRBB.NPP.
[['.', '.', '.', 'N'], ['.', '.', '.', 'R'], ['R', 'B', 'B', '.'], ['N', 'P', 'P', '.']]
[[0, 0, 0, 5], [0, 0, 0, 3], [3, 4, 4, 0], [5, 6, 6, 0]]
[[3, 3, 'N'], [3, 2, 'R'], [0, 1, 'R'], [1, 1, 'B'], [2, 1, 'B'], [0, 0, 'N'], [1, 0, 'P'], [2, 0, 'P']]
Wyjście 4:
[[[2,1], [3,2]], [[1,1], [3,3]], [[3,2], [1,0]], [[3,3], [0,0]], [[0,1], [0,0]], [[0,0], [1,0]], [[1,0], [2,0]]]
Wejście 5:
P . . .
. R . .
R . R .
. R . .
P....R..R.R..R..
[['P', '.', '.', '.'], ['.', 'R', '.', '.'], ['R', '.', 'R', '.'], ['.', 'R', '.', '.']]
[[6, 0, 0, 0], [0, 3, 0, 0], [3, 0, 3, 0], [0, 3, 0, 0]]
[[0, 3, 'P'], [1, 2, 'R'], [0, 1, 'R'], [2, 1, 'R'], [1, 0, 'R']]
Wyjście 5:
[[[0,3], [1,2]], [[1,2], [2,1]], [[2,1], [1,0]], [[1,0], [0,1]]]
Wejście 6:
. P . N
K . . .
. . B .
. . R Q
.P.NK.....B...RQ
[['.', 'P', '.', 'N'], ['K', '.', '.', '.'], ['.', '.', 'B', '.'], ['.', '.', 'R', 'Q']]
[[0, 6, 0, 5], [1, 0, 0, 0], [0, 0, 4, 0], [0, 0, 3, 2]]
[[1, 3, 'P'], [3, 3, 'N'], [0, 2, 'K'], [2, 1, 'B'], [2, 0, 'R'], [3, 0, 'Q']]
Wyjście 6:
[[[3,0], [2,0]], [[2,0], [2,1]], [[3,3], [2,1]], [[2,1], [1,3]], [[0,2], [1,3]]]
[["R", [2, 0], [1, 1]], ["N", [1, 1], [3, 3]]]