Wyzwanie
Napisz program lub funkcję, która pobiera ciąg znaków jako parametr funkcji lub ze standardowego wejścia i określa, czy jest to prawidłowy ciąg FEN .
Wejście
Możesz założyć, że dane wejściowe będą zawierały tylko następujące znaki (wielkość liter ma znaczenie)
pkqrbnPKQRBN12345678/
Długość danych wejściowych zawsze będzie wynosić co najmniej 1 znak i maksymalnie 100 znaków
Wynik
Dane wyjściowe powinny mieć wartość true / falsey. Mogą to być dowolne wartości, o ile są spójne (wszystkie prawdziwe wyniki mają tę samą moc wyjściową, wszystkie wyniki falsey mają tę samą moc wyjściową). Powinieneś mieć dokładnie dwa różne możliwe wyniki.
Co uznaje się za ważne
Małe litery reprezentują czarne elementy, wielkie litery oznaczają białe elementy.
Powinieneś upewnić się, że w grze w szachy możliwe jest istnienie pionków na aktualnej pozycji.
Każdy gracz zawsze będzie miał dokładnie 1 króla (k / K)
Każdy gracz może mieć nie więcej niż 8 pionków (p / P)
Każdy gracz zwykle ma nie więcej niż 1 * królową (q / Q)
Każdy gracz zwykle nie ma więcej niż 2 * wieże (r / r)
Każdy gracz zwykle będzie miał nie więcej niż 2 * rycerzy (n / N)
Każdy gracz zwykle będzie miał nie więcej niż 2 * biskupów (b / B)
* Gracz może legalnie „ wypromować pionka do dowolnego z tych czterech elementów.
Suma pionków, królowych, wież, rycerzy i biskupów dla każdego gracza nigdy nie przekroczy 15
Całkowita liczba sztuk plus puste kwadraty (oznaczone liczbami) zawsze powinny sumować się dokładnie do 8 dla każdej rangi. I zawsze powinno być dokładnie 8 stopni, oddzielonych ukośnikiem.
Rzeczy, które możesz zignorować
Nie musisz się martwić, czy możliwe jest zagranie na oznaczonej pozycji, czy też jeśli pozycja jest legalna, tylko że elementy mogą istnieć w podanych ilościach.
Możesz zignorować dalsze złożoności łańcuchów FEN, takie jak tura gracza, prawa roszowania i en passant.
To jest kod golfowy. Najkrótszy program w bajtach wygrywa. Obowiązują zwykłe luki i zasady.
Przypadki testowe
Wejście rnbqkbnr / pppppppp / 8/8/8/8 / PPPPPPPP / RNBQKBNR
Wyjście True
Wejście 2br2k1 / 1p2n1q1 / p2p2p1 / P1bP1pNp / 1BP2PnP / 1Q1B2P1 / 8 / 3NR2K
Wyjście Prawda
Input r2r2k1 / p3q2p / ppR3pr / rP4bp / 3p4 / 5B1P / P4PP1 / 3Q1RK1
Output False
(czarny ma 7 pionków i 4 wieże - niemożliwe)
Wejście 6k1 / pp3ppp / 4p3 / 2P3b1 / bPP3P1 / 3K4 / P3Q1q1
Wyjście Fałsz (tylko 7 stopni )
Wejście 3r1rk1 / 1pp1bpp1 / 6p1 / pP1npqPn / 8 / 4N2P / P2PP3 / 1B2BP2 / R2QK2R
Wyjście Fałsz (9 stopni )
Wejście 5n1k / 1p3r1qp / p3p3 / 2p1N2Q / 2P1R3 / 2P5 / P2r1PP1 / 4R1K1
Wyjście Fałsz (2. stopień ma 9 kwadratów / sztuk)
Wprowadź rnbqkbnr / pppppppp / 8/35/8/8 / PPPPPPPP / RNBQKBNR
Wyjście True
Dziękujemy Feersum i Arnauld za wyjaśnienie tej sprawy (3 + 5 = 8)
Co to jest FEN?
FEN jest standardowym zapisem do rejestrowania pozycji pionków na szachownicy.
Kredyt na zdjęcia http://www.chessgames.com
źródło
* It is legal for a player to 'promote' a pawn to any of these four pieces.
Gracz może mieć do 9 królowych, o ile liczba pionów zostanie zmniejszona, aby to zrekompensować. Nie musisz się martwić o to, czy pozycja jest legalna lub nielegalna, a tylko o liczbę sztuk.35
to po prostu niezwykły sposób na opisanie 8 pustych kwadratów.Odpowiedzi:
Siatkówka , 105 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Rozwiń cyfry do pustych kwadratów, które oznaczamy za pomocą
1
s.Usuń dane wejściowe, jeśli nie pasują one do 8 zestawów 8 prawidłowych kwadratów połączonych
/
s. (/
Prefiks jest dodawany w celu uproszczenia kontroli).Usuń wejście, jeśli nie ma białego lub czarnego króla, lub jeśli ma dwa z nich.
Usuń początkowe elementy bieli, jeśli nadal tam są.
Obniż pozostałe pionki do pionków.
Usuń prawidłowe białe pionki.
Usuń wejście, jeśli pozostały białe pionki.
Sprawdź jeszcze raz, ale z czarnymi kawałkami.
Podaj prawdziwą wartość, chyba że wiersz został usunięty.
źródło
JavaScript (ES6),
168174... 155Ta odpowiedź była wielokrotnie krępująca. Mamy nadzieję, że obecna wersja jest zarówno niezawodna, jak i przyzwoita.
Zwraca wartość logiczną.
Sformatowane i skomentowane
Przypadki testowe
Pokaż fragment kodu
źródło
Python 3,
284 259 236 225 247234 bajtówWypróbuj online!
Wypróbuj online ze wszystkimi testami!
-11 bajtów dzięki Mr. Xcoder
-13 bajtów dzięki Jonathanowi Allenowi
+22 Zapomniałem, że królowie istnieją.
Na wpół nieprzygotowany z pewnym wyjaśnieniem:
źródło
,p,P=9,9
z;P=p=9
.for-loop
: /p>0<P
zamiastp>0and P>0
zapisać 5 bajtów. Alternatywnie, mógłbyś użyćp and P
(dla -3 bajtów), nie potrzebujesz>0
, ponieważ niezerowe wartości są prawdziwe w Pythonieo=0
przed pętlą i zwiększając zo+=o<2
na końcu ciała pętli.PHP , 269 bajtów
Wypróbuj online!
źródło
JavaScript (ES6),
181172174 bajtówNie golfowany:
Pokaż fragment kodu
źródło
Python 3 , 263 bajty
Wypróbuj online!
Nie jest to najmniejsze zgłoszenie w języku Python, ale myślę, że wciąż ma pewne obietnice.
źródło