Problem:
W szachach istnieje dość dobrze znana zasada losowania przez powtarzanie. Jeśli ta sama pozycja zostanie powtórzona 3 razy (lub więcej), gracz zamierzający wykonać ruch, który spowoduje to powtórzenie, może ubiegać się o remis.
Czasami jest to łatwe zadanie dla arbitra, jeśli kilka ostatnich ruchów to tylko gracze poruszający się do tyłu i do przodu. Czasami jest to mniej banalne, gdy elementy przesunęły się znacznie między powtarzanymi pozycjami.
Problemem w tym wyzwaniu jest wyprowadzenie prawdziwej wartości, jeśli zadeklarowana pozycja jest losowana przez powtórzenie (było widziane 3 razy lub więcej) i wartość falsey, jeśli zadeklarowana pozycja nie jest losowana przez powtórzenie, biorąc pod uwagę listę ruchów w notacji współrzędnych zgodnie z opisem poniżej lub dowolną wybraną notacją (ale będziesz musiał przekonwertować przypadki testowe).
Jaka jest pozycja?
W prawdziwym scenariuszu na pozycję wpływ miałyby takie rzeczy, jak to, czy gracz może zamek, czy też możliwe jest użycie umiejętności en-passant; należy nie uważają tych w rozwiązanie problemu. W tym problemie pozycja jest definiowana po prostu przez konfigurację elementów na planszy. Tak więc, dla celów tego problemu, dwie pozycje są uważane za takie same, jeśli każdy kwadrat na obu planszach jest zajęty przez ten sam typ kawałka tego samego koloru. Nie musi to być dokładny element, na przykład rycerze biali mogą zamieniać kwadraty, a jeśli wszystkie inne elementy spełniają kryteria, nadal byłaby to ta sama pozycja.
Jak wygląda poprawna notacja?
Chociaż przejdę do wyjaśnienia notacji współrzędnych, masz swobodę przyjmowania danych przez wybrany przez siebie system notacji. Pod warunkiem że:
- Każda pozycja w notacji opisuje którekolwiek lub wszystkie z następujących elementów: część / części, których to dotyczy; czy dostarczono czek, mat, podwójny czek, mat lub pat; jeśli nastąpiło przechwycenie en-passant; pozycja początkowa; ostateczna pozycja.
- W notacji możesz nie mieć informacji o powtórzeniach.
Tak długo, jak te kryteria są spełnione, z przyjemnością akceptuję, o ile w odpowiedzi określisz swój system notacji. Może to być np. Indeksowany wiersz, krotki kolumn lub cokolwiek innego, co ma sens dla twojego programu.
Notacja współrzędnych
Notacja współrzędnych to notacja, która opisuje ruchy jako układ współrzędnych.
Ruch jest opisywany jako pierwsza początkowa współrzędna z zestawu, {A1-H8}
a następnie współrzędna docelowa ponownie z tego samego zestawu. Tak wyglądałby Gambit Króla (jako zbiór strun)
{"E2-E4","E7-E5","F2-F4"}
Uważam, że jest to najlepsza notacja do zastosowania w przypadku tego problemu, ponieważ nie jest zaśmiecona dodatkowymi informacjami, takimi jak informacja o tym, czy nastąpiło sprawdzenie lub jaki jest rodzaj ruchu elementu. Jak wspomniano wcześniej, notacja może być do wyboru, więc możesz użyć innej notacji, np. Notacji algebraicznej lub możesz ją dostosować (np. Usunąć myślniki lub wziąć jako listę krotek)
Zasady:
- Należy nie rozważy, czy stanowisko lub ruch jest ważny, tylko czy to powoduje powtórzenie
- Możesz założyć, że promocja roszowania i pionków nie nastąpi.
- Powinieneś wziąć listę ciągów jako dane wejściowe i wyprowadzić prawdziwą lub falsey wartość odpowiadającą temu, czy trzecie (lub więcej) powtórzenie miało miejsce w ostatnim ruchu
- Gra rozpoczyna się zawsze od standardowej pozycji początkowej dla szachów. Pozycja początkowa może się liczyć do powtórzeń.
- Remis przez powtórzenie nie wystąpił, jeśli pozycja nie zostanie powtórzona przez ostatni ruch
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki kod-golfowe zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły z domyślnymi regułami We / Wy , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i typem zwracanych, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem kodu (tj. TIO ).
- Zalecane jest również dodanie wyjaśnienia do odpowiedzi.
Przypadki testowe
Powinieneś zwrócić prawdziwe wartości dla:
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"}
{"B1-C3","B8-C6","D2-D4","D7-D5","D1-D3","D8-D6","C3-B1","C6-B8","B1-C3","B8-C6","D3-D1","D6-D8","D1-D3","D8-D6"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-E6","E2-F3","E6-D4","F3-D1","D4-C6","D1-E2","C6-D4","E1-D1","D4-C6","D1-E1","C6-D4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3"}
I wartości falsey dla:
{}
{"E2-E4","E7-E5","F2-F4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","F2-F4","F7-F5"}
{"E2-E4","E7-E5","G1-F3","B8-C6","F1-C4","G8-F6","F3-G5","D7-D5","E4-D5","F6-D5","G5-F7"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-C6","E2-D1","C6-D4","D1-E2","D4-C6","E2-D1"}
{"B1-C3","B8-C6","C3-B5","C6-B4","B5-D4","B4-D5","D4-C6","D5-C3","C6-B8","C3-B1","B8-C6","B1-C3","C6-B8","C3-B1"}
{"E2-E4","E7-E5","D1-E2","E8-E7","E1-D1","D8-E8","E2-E1","E7-D8","E1-E2","E8-E7","E2-E1","E7-E8"}
C6-B8
trzykrotnie nastąpiła pozycja początkowa.