Figury szachowe (królowie, królowe, wieże, biskupi i rycerze) i pionki znajdują się na planszy, ale nie na polu A1 lub H8 . Twoim zadaniem jest podróż z pustych pól A1 do pustych pól H8 , przechodząc tylko przez puste pola. Zasady przemieszczania są następujące:
- Możesz przejść z dowolnego pustego kwadratu do dowolnego pustego kwadratu obok niego (ta sama ranga, następny lub poprzedni plik; lub ten sam plik, następny lub poprzedni stopień).
- Możesz przejść z dowolnego pustego kwadratu do dowolnego pustego kwadratu po przekątnej (następna lub poprzednia ranga, następny lub poprzedni plik), pod warunkiem, że kwadraty w narożnikach zawierają albo (a) dwa pionki, albo (b) pionki / kawałki przeciwnych kolor. (Dwa pionki lub pionek i pionek tego samego koloru są wystarczająco mocne, aby zablokować twój postęp w rogu, ale dwa pionki nie są; pionki / pionki w przeciwnych kolorach nie działają koncert, aby przeszkodzić ci na drodze.) Na przykład, jeśli jesteś na c4, a d5 jest puste, możesz przejść do niego, pod warunkiem, że c5 i d4 zawierają pionki lub zawierają pionki / pionki o przeciwnych kolorach. Zdjęcia znajdują się w sekcji „Przykładowe przekątne” poniżej.
Wejście
Opis płyty FEN . To znaczy: Dane wejściowe będą ciągiem zawierającym opis rangi 8 , ukośnik ( /
), opis rangi 7 , ukośnik,… i opis rangi 1 . Opis każdej rangi zawiera cyfry i litery biegnące od pliku a do pliku h , gdzie litery oznaczają pionki i pionki (czarne to p
= pionek, n
= rycerz, b
= biskup, r
= wieża, q
= królowa, k
= król i biały te są wielkimi wersjami tego samego), a liczby wskazują kolejną liczbę pustych kwadratów. Na przykład, rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBN
jest to deska po jednym ruchu warstwy (pionek króla na e4) w szachach.
a1 i h8 będą puste na wejściu; tzn. pierwszy ukośnik ma cyfrę przed nim, a ostatni ukośnik ma cyfrę po nim.
Wynik
Prawda czy falsey, wskazując, czy możliwe jest udane przejście do h8 .
Jeśli dane wejściowe nie są poprawnym opisem płyty FEN (co oznacza, że pasuje do mojego wyjaśnienia powyżej) lub jeśli a1 lub h8 jest zajęty, to wynik może być cokolwiek lub nic. (Innymi słowy: możesz założyć, że dane wejściowe spełniają powyższe wymagania).
Punktacja
To jest kod golfowy: wygrywa najmniej bajtów.
Przykładowe wejście i wyjście
Pamiętaj, że Twój kod musi działać dla wszystkich prawidłowych danych wejściowych, nie tylko dla przykładów.
Dodaj spację i w
po każdym FEN, aby go wizualizować http://www.dhtmlgoodies.com/scripts/chess-fen/chess-fen-3.html
. (Należy pamiętać, że niektóre inne internetowe wizualizatory FEN nie zezwalają na planszę, która jest nielegalna w szachach, np. Z pionkiem o randze 1 lub 8 , więc nie można jej użyć do naszych celów.)
Prawdziwe przykłady
8/8/8/8/8/8/8/8
- pusta tablica1p1Q4/2p1Q3/2p1Q3/2p1Q3/2p1Q3/2p1Q3/Q1p1Q3/1q3q2
- istnieje ścieżka a1 , b2 , b3 , b4 , b5 , b6 , b7 , c8 , d7 , ( nie e8 , to jest zablokowane, ale) d6 , d5 , d4 , d3 , d2 , d1 , e1 , f2 , f3 , f4 , f5 , f6 , f7 , f8 , g8 , h88/8/KKKKK3/K3K3/K1K1p3/Kp1K4/K1KK4/2KK4
- przykład, w którym kwadrat, który jest zablokowany w jednym punkcie, musi zostać przepuszczony później (aby upewnić się, że nie ustawisz kwadratów jako nieprzekraczalnych)K1k1K1K1/1K1k1K1k/K1K1k1K1/1k1K1K1k/K1k1K1k1/1K1k1k1K/K1K1k1K1/1k1k1K1k
- istnieje jedna ścieżka (wystarczy podążać za nosem: na każdym kroku jest tylko jeden kwadrat, chyba że cofniesz się o krok); jest to również przykład, w którym kwadrat jest blokowany w jednym punkcie, ale jest potrzebny później
Przykłady Falsey
6Q1/5N2/4Q3/3N4/2Q5/1N6/2Q5/1N6
- każda próba ścieżki będzie musiała przejść przez dwa ukośne kawałki tego samego koloruN1q1K1P1/1R1b1p1n/r1B1B1Q1/1p1Q1p1b/B1P1R1N1/1B1P1Q1R/k1k1K1q1/1K1R1P1r
- jedyną drogą przez przekątną a8-h1 jest f2-g3 , ale wymagałoby to przejścia przez e1-d2 lub f2-e3 , które są niemożliwe.4Q3/4q3/4Q3/5Q2/6Q1/3QqP2/2Q5/1Q6
4q3/4Q3/4q3/5q2/6q1/3qQp2/2q5/1q6
Przykładowe przekątne
W przypadku, gdy powyższa proza była niejasna, oto kilka zdjęć.
Przejezdne przekątne
Nieprzejezdne przekątne
Odpowiedzi:
VBA
668666633622548510489435331322319315 bajtówOdczytywanie ciągu wejściowego zajmuje do „Wend”. Niezły efekt uboczny - porzuca kod wejściowy, gdy tablica [X] jest w pełni zakodowana, więc możesz zostawić opis na końcu.
W kodowaniu planszowym pionki mają 2, inne elementy 3, czarny jest ujemny. Pionki są rozpoznawane przez „P” i „p” posiadające kody znaków podzielne przez 8.
„X (7,0) = 1”, ustawienie dostępnego a1 , rozpoczyna się od sprawdzenia ścieżki. Powoduje to wielokrotne skanowanie planszy, próbując dodać dostępne kwadraty z dotychczas oznaczonych jako dostępne (1). Dostęp po przekątnej i obłożenie są sprawdzane za pomocą logiki IF +, która kiedyś mieszkała w funkcji, ale teraz znajduje się w zagnieżdżonych pętlach sąsiada. Kontrola dostępu po przekątnej zależy od iloczynu dwóch kwadratów narożnych kotka, które mają tylko 6 lub więcej, jeśli elementy mają ten sam kolor, a co najmniej jeden jest pionkiem, a nie pionkiem.
Zadzwoń w arkuszu kalkulacyjnym; zwraca wartość w X (0,7) - 1, jeśli h8 jest dostępny i 0, jeśli nie - co Excel rozpoznaje jako prawda / fałsz. = JEŻELI (Z (C2), „tak”, „nie”)
Być może wciągnęło mnie wyskrobywanie kodu powyżej, więc oto wersja z komentarzem na wpół nieposkromiona:
Oceny postępu
Edycja 1: Kod nie jest już tak 666-diabelski :-D i utracił swoje funkcje; Znalazłem wystarczająco krótki sposób, aby je napisać, aby uniknąć kosztów ogólnych.
Edycja 2: Kolejny wielki krok naprzód, skutecznie kończąc pracę nad usunięciem funkcji inc / dec, westchnieniem i użyciem kilku globali. Może w końcu zrozumiem ...
Kodowanie elementów i kwadratów uległo zmianie. Bez wpływu na długość kodu.
Edycja 3: Powrót (fałszywych) funkcji, usunięcie wszystkich irytujących
Call
bajtów i kilka innych poprawek.Edycja 4: Przebijając się przez wielką 500, woohoo - zgarnął pętle 3 For w 1.
Edycja 5: Jiminy Cricket, kolejna wielka kropla, kiedy zgarnąłem dwie funkcje razem - moja kontrola dostępu po przekątnej zawsze przechodzi na sąsiednie kwadraty, więc ...
Edycja 6: Święte stalówki, kolejna wielka kropla. Żegnajcie z funkcjami zewnętrznymi, a tym samym globalnymi ... Zrobiłem mniej niż połowę pierwotnie opublikowanej długości ...
Edycja 7: Dodaj wersję bez golfa
Edycja 8: Zmieniono proces odczytu o kilka dolarów więcej
Edycja 9: Nacisnąłem kilka wyrażeń na kilka ostatnich kropli krwi
Edycja 10: Instrukcja Compund
Next
zrzuca kilka bajtówDla zainteresowania grafika kart po analizie dostępności (numery kodów są nieaktualne, ale ...) dostępne kwadraty są zielone, niedostępne kwadraty białe, a inne kolory to części lub pionki.
Kilka plansz wyzwań: h8 jest dostępny zarówno:
źródło
If V>9 Then X(7-P,C)=
pomyślałbym (nie żebym wiedział VBA)If V>9 Then X(P,C)=
.[some non-letter character] To
do[some non-letter character]To
Matlab, 636
887bajtów jako zapisane (w tym wcięcia)To rozwiązanie nie jest bardzo golfowe, ale chciałem je rozwinąć.
Odczytuje ciąg planszy,
x
jak określono powyżej, i zamienia go w bardziej dokładnie przedstawionyo
, a następnie znajduje wszystkie ruchy (krawędzie wykresu) między spacjami, następnie określa, które ruchy są możliwe (nie w wypełnionych spacjach), a następnie określa, które możliwe ruchy mają „ bramki ”z dwóch części, które należy przepuścić, a następnie dowiedzieć się, czy brama jest otwarta (pionki, przeciwne kolory) lub zamknięta (ten sam kolor i zawiera pionek). Następnie przechodzi, aby znaleźć lokalizacje, do których można dotrzeć ścieżkami z lewego dolnego kwadratu, a jeśli ścieżka może dotrzeć do pola 64, jest to tablica Tak.źródło
=
s? (Nie wiem MATLAB: może to niemożliwe).