Oto dobrze zorganizowana lista, która powinna potwierdzić 99,99% + wspólnych stanowisk:
Tablica:
- Jest dokładnie 8 kols
- Suma pustych kwadratów i elementów dodaje się do 8 dla każdej rangi (rzędu)
- Brak kolejnych liczb dla pustych kwadratów
Królowie:
- Sprawdź, czy jest dokładnie jeden w_king i jeden b_king
- Upewnij się, że królowie są oddzieleni od siebie o 1 kwadrat
Czeki:
- Nieaktywny kolor nie jest sprawdzany
- Aktywny kolor jest sprawdzany mniej niż 3 razy (potrójne sprawdzenie jest niemożliwe); w przypadku 2, że nigdy nie jest pionkiem + (pionek, biskup, rycerz), biskup + biskup, rycerz + rycerz
Pionki:
- Nie ma więcej niż 8 pionków z każdego koloru
- Nie ma żadnych pionków w pierwszym lub ostatnim szeregu (rzędzie), ponieważ są one na złej pozycji początkowej lub powinny były awansować.
- W przypadku kwadratu en passant; sprawdzić, czy został legalnie utworzony (np. musi znajdować się na pozycji
x3
lub w x6
rankingu, przed nim musi znajdować się pionek (w odpowiednim kolorze), a kwadrat en passant i ten za nim są puste)
- Zapobiegaj posiadaniu większej liczby promowanych pionów niż brakujących pionków (np.
extra_pieces = Math.max(0, num_queens-1) + Math.max(0, num_rooks-2)...
Wtedy extra_pieces <= (8-num_pawns)
), powinieneś również wykonać specjalne obliczenia dla biskupów. Jeśli masz dwóch (lub więcej) biskupów o tym samym kwadratowym kolorze, można je utworzyć tylko poprzez promocję pionków i powinieneś uwzględnić jakoś tę informację do powyższej formuły
- Formacja pionków jest możliwa do osiągnięcia (np. W przypadku wielu pionków w jednej kolumnie, musi brakować wystarczającej liczby pionków wroga, aby utworzyć formację), oto kilka przydatnych zasad:
- niemożliwe jest posiadanie więcej niż 6 pionków w jednym pliku (kolumnie) (ponieważ pionki nie mogą istnieć w pierwszym i ostatnim szeregu)
- minimalna liczba brakujących elementów wroga, aby dotrzeć do wielu pionków w jednej kolumnie
B to G 2=1, 3=2, 4=4, 5=6, 6=9 ___ A and H 2=1, 3=3, 4=6, 5=10, 6=15
, na przykład, jeśli widzisz 5 pionków w A lub H, drugiemu graczowi musi brakować co najmniej 10 elementów z jego 15 możliwych do zdobycia pionków
- jeśli w a2 i a3 są białe pionki, legalnie nie może być jednego w b2, a pomysł ten można rozszerzyć, aby objąć więcej możliwości
Castling:
- Jeśli król lub gawrony nie znajdują się w pozycji wyjściowej; zdolność rażenia tej strony jest utracona (w przypadku króla obie są utracone)
Biskupi:
- Szukaj biskupów w pierwszym i ostatnim szeregu (rzędach) uwięzionych przez pionki, które się nie poruszyły, na przykład:
- gońca (dowolnego koloru) uwięzionego za 3 pionkami
- biskupa uwięzionego za 2 pionkami nieprzyjacielskimi (nie przez pionki wroga, ponieważ możemy osiągnąć tę pozycję przez obniżenie pionów, jednak jeśli sprawdzimy liczbę pionków i
extra_pieces
możemy ustalić, czy ten przypadek jest możliwy, czy nie)
Non-jumpers:
- (Unikaj tego, jeśli chcesz zweryfikować szachy Fishera 960). Jeśli pomiędzy królem a wieżą znajdują się wrogie pionki niebędące skoczkami i nadal istnieją pionki bez ruchu; sprawdź, czy te elementy wroga mogły się tam legalnie dostać. Zadaj też sobie pytanie: czy król lub wieża potrzebowali ruchu, aby wygenerować tę pozycję? (jeśli tak, musimy się upewnić, że umiejętności rycerskie to odzwierciedlają)
- Jeśli wszystkie 8 pionków nadal znajduje się w pozycji wyjściowej, wszyscy nieskoczkowie nie mogą opuścić swojej początkowej rangi (również nieprzyjacielskie pionki, które nie są skoczkami, prawdopodobnie nie mogły wejść legalnie), istnieją inne podobne pomysły, na przykład jeśli białe h -Pawn poruszył się raz, wieże powinny być nadal uwięzione wewnątrz formacji pionków itp.
Zegary o połowie / pełnym ruchu:
- W przypadku kwadratu en passant zegar połowy ruchu musi wynosić 0
HalfMoves <= ((FullMoves-1)*2)+(if BlackToMove 1 else 0)
, +1 lub +0 zależą od strony do poruszania się
- HalfMoves musi być
x >= 0
i FullMovesx >= 1
Inny:
- Upewnij się, że FEN zawiera wszystkie potrzebne części (np. Aktywny kolor, zdolność rzucania, kwadrat en passant itp.)
Uwaga: nie ma potrzeby, aby „gracze nie powinni mieć więcej niż 16 sztuk”, ponieważ punkty „nie więcej niż 8 pionków” + „zapobiegają dodatkowym promowanym pionom” + „dokładnie jeden król” powinien już pokryć ten punkt
Uwaga 2: te zasady mają na celu sprawdzanie poprawności pozycji wynikających z pozycji początkowej normalnych szachów, niektóre reguły unieważniają niektóre pozycje z Chess960 (wyjątek, jeśli rozpoczęto od układu nr 518) i generowane łamigłówki, więc unikaj ich, aby uzyskać funkcjonalny walidator.
a
pliku.Oto wyrażenie regularne, którego używam, aby upewnić się, że łańcuch FEN jest rzeczywiście prawidłowy. Nie przeprowadza żadnych testów dotyczących legalnej / nielegalnej pozycji, ale jest to dobry punkt wyjścia.
źródło
-
), a pół / pełne zegary są czasem opcjonalne. Również nie zrozumiałema-h
części dotyczącej umiejętności/^\s*([rnbqkpRNBQKP1-8]+\/){7}([rnbqkpRNBQKP1-8]+)\s[bw]\s(-|K?Q?k?q?)\s(-|[a-h][36])/
([rnbqkRNBQK1-8]+\/)([rnbqkpRNBQKP1-8]+\/){6}([rnbqkRNBQK1-8]+) ....
(0|[1-9][0-9]*)\s([1-9][0-9]*)
ponieważ ruchy nie mogą mieć zer wiodących, a pełny ruch nie może być lub zaczyna się od 0, (kod kredytu)Dla pozostałych w silniku Sztokfisz jest prosta funkcja, która sprawdza poprawność łańcucha FEN.
źródło
position.is_okay()
. Kod tutaj wykonuje tylko kilka podstawowych kontroli, aby upewnić się, że jest poprawnie sformatowany i że warto dokonać prawdziwej weryfikacji (tj. Nie jest to oczywiście nielegalne).Oto prosty algorytm cofania, pod warunkiem, że masz funkcję, która może sprawdzać cofanie legalnych ruchów w każdym stanie tablicy (znanym również jako pozycja):
źródło
W specyfikacji FEN nic nie mówi, że reprezentowana pozycja musi być osiągalna z tablicy początkowej. Udowodnienie, że dana pozycja jest osiągalna z tablicy początkowej, jest nierozwiązanym problemem.
W prawidłowym ciągu FEN liczba ruchów w połowie musi być zgodna z en passant docelowym kwadratem; jeśli obecny jest kwadrat docelowy, wówczas połowa ruchu musi wynosić zero. połowa ruchu musi być również zgodna z pełnym numerem ruchu; np. liczba ruchów w połowie wynosząca dziesięć jest niezgodna z pełną liczbą ruchów wynoszącą trzy.
źródło
Spóźnienie na imprezę.
Nie można w 100% zweryfikować, czy pozycja jest legalna, ale dlaczego walidacja powinna mieć znaczenie? Możemy grać w szachy niezależnie od tego, czy pozycja pochodzi od pozycji początkowej (tak zwana „tablica gier”). Analiza może być bardzo interesująca, ale zdarza się, że jest to nielegalne.
Więc sprawdziłbym tylko:
Jeśli to trzy TAK, możemy grać w szachy w przód z tego schematu. I nawet ta krótka lista warunków, które możemy rozwiązać.
źródło