Całkowicie zaskoczony, że nie został jeszcze opublikowany, biorąc pod uwagę dużą liczbę szachowych łamigłówek na stronie. Pomyślałem o tym osobiście, dziękuję Anushowi za opublikowanie go w piaskownicy w marcu . Uznałem jednak, że minęło już tyle czasu, że mogłem zrobić to sam.
Mat w szachach jest pozycja, w której król jest atakowany i nie ma ruch, który może go bronić. Jeśli nie wiesz, jak poruszają się szachy, możesz zapoznać się z Wikipedią .
Wyzwanie
W przypadku tego wyzwania Twoim wkładem będzie pozycja szachownicy w dowolnej notacji, którą lubisz. Aby wyjaśnić, Twój wkład opisze sztuk na szachownicy, z ich kolory i stanowisk, wraz z ewentualną en passant przechwytywania kwadratu, jeśli w ogóle. (Zdolność do zamków jest nieistotna, ponieważ nie można zamykać spod kontroli.) Notacja FEN może być przydatna , ale dowolny dogodny format jest w porządku. Dla uproszczenia możesz założyć, że gra w kolorze czarnym - oznacza to, że czarny zawsze będzie szachowym graczem. Pozycja, w której białe są w szachach, matach lub impasach, zostanie uznana za nieważną dla tego wyzwania.
Musisz podać prawdziwą wartość, jeśli pozycja jest matem, i wartość falsey, jeśli tak nie jest. Pamiętaj, że impas nie jest matą - król musi zostać zaatakowany!
Prawdziwe przypadki testowe
1k5R / 6R1 / 8/8/8/8/8 / 6K1 b - -
rn2r1k1 / pp1p1pQp / 3p4 / 1b1n4 / 1P2P3 / 2B5 / P5PP / R3K2R b - -
kr5R / rB6 / 8/8/8 / 5Q2 / 6K1 / R7 b - -
2K5 / 1B6 / 8/8/8 / 7N / R7 / R3r2k b - - 0 1
Przypadki testowe Falsey
rnbqkbnr / ppppppppp / 8/8 / 4P3 / 8 / PPPP1PPP / RNBQKBNR b KQkq -
8/8/8/8/8 / 1KQ5 / 4N3 / 1k6 b - -
2K5 / 1B6 / 8/8/8 / 7N / R7 / 4r2k b - -
8/8 / 2Q5 / 3k4 / 3Q5 / 8/8 / 7K b - -
8 / 4Q1R1 / R7 / 5k2 / 3pP3 / 5K2 / 8/8 b - e3 (Patrz, jak to pasywnie!)
Code golf - wygrywa najkrótszy kod w bajtach. Powodzenia!
źródło
Odpowiedzi:
JavaScript (Node.js) ,
499 ... 374370 bajtów(b)(X)
Poniżej znajdują się oczekiwane wartości dla każdego kwadratu:
Wypróbuj online!
W jaki sposób?
Reprezentacja zarządu
Używamy klasycznej reprezentacji planszy 0x88 , aby łatwo było wykryć poza celami kwadraty docelowe.
Przenieś kodowanie
Każdy zestaw ruchów jest kodowany za pomocą 5 parametrów:
Wszystkie te parametry są spakowane w jeden ciąg. Na przykład ruchy rycerza są kodowane w następujący sposób:
co daje:
Wszystkie zestawy ruchów są podsumowane w poniższej tabeli, z wyjątkiem przechwyceń en-passant, które są przetwarzane osobno.
Skomentował
źródło
8/1ppp4/1pkp4/8/2Q5/8/8/7K b - -
Haskell ,
116510651053 bajtówBajty uratowane dzięki Leo Tenenbaumowi
Wypróbuj online!
Na razie nie jest to do tej pory gra w golfa, ale to dopiero początek.Z pewną pomocą po drodze teraz grałem w golfa dość agresywnie (i naprawiłem błąd po drodze).Jedną być może wątpliwą rzeczą jest to, że zakłada, że inaczej niż przez króla lub pionka en passant, nigdy nie można wymknąć się spod kontroli, zdobywając jeden ze swoich pionków. W szachach nie możesz wykonać tego ruchu, ale mój program rozważa te ruchy, aby zaoszczędzić bajty przy założeniu, że jeśli jesteś w szachu, nigdy cię to nie wydostanie.
To założenie jest ważne, ponieważ takie ruchy
Nie można schwytać elementu atakującego króla, ponieważ element, który schwytali, jest czarny.
Nie można zablokować ścieżki elementu atakującego króla, ponieważ złapany czarny element już by to zrobił.
Dodajemy również dodatkowy warunek, że jeśli nie masz króla, jesteś pod kontrolą.
Program ten zakłada również, że jeśli istnieje pionek, który można schwytać en passant, wówczas pionek był ostatnim elementem do poruszenia, a ruch ten był legalnym ruchem. Wynika to z faktu, że program nie sprawdza, czy kwadrat, na który przesuwa czarny pionek, jest pusty, więc jeśli jest jakiś element, rzeczy mogą się trochę krzywić. Nie można tego jednak uzyskać, jeżeli ostatni ruch był legalny, a ponadto nie może być reprezentowany w FEN . To założenie wydaje się więc dość solidne.
Oto moja wersja „bez golfa” w celach informacyjnych:
Wypróbuj online!
źródło
guard x = [0|x]
możesz takżex?y=Just(x,y)
zapisać kilka dodatkowych bajtów: 1129 bajtówPython 3 (PyPy) , 729 bajtów
Wypróbuj online!
źródło
8/2p5/Q7/Q2k4/Q7/8/8/7K b - -
(nie mat).