Biorąc pod uwagę wejście czterech liczb całkowitych x 1 , y 1 , x 2 i y 2 , wypisz, czy biały król w szachach (o współrzędnych ( x 1 , y 1 )) może złapać czarnego pionka (o współrzędnych ( x 2 , y 2 )) i złap go, jeśli pionek porusza się, aby jak najszybciej awansować do królowej.
Współrzędne tablicy są następujące:
first coordinate (x)
12345678
1 .#.#.#.#
2 #.#.#.#.
3 .#.#.#.#
second 4 #.#.#.#.
coordinate 5 .#.#.#.#
(y) 6 #.#.#.#.
7 .#.#.#.#
8 #.#.#.#.
Załóż, że ruch jest biały (tura króla) i że obaj gracze grają optymalnie (król porusza się tak szybko, jak to możliwe, aby złapać pionka, a pionek porusza się tak szybko, jak to możliwe, aby awansować). Współrzędne wejściowe zawsze będą wyraźne, a pionek nigdy nie rozpocznie się od współrzędnej y wynoszącej 8.
Król porusza się o jedno pole w dowolnym kierunku w każdej turze (może poruszać się po przekątnej), a pionek może poruszać się tylko o jedno pole do przodu (zmniejszając współrzędną y), chyba że znajduje się w początkowej pozycji (w naszym układzie współrzędnych współrzędna y 7), w którym to przypadku może przesunąć się o dwa pola do przodu.
Dane wejściowe można podać jako ciąg oddzielony spacjami / przecinkami, tablicę ciągów / liczb całkowitych lub cztery argumenty funkcji / wiersza poleceń / itd. Współrzędne można podać w dowolnej kolejności, która jest najbardziej dogodna / golfy (więc zaakceptowanie danych wejściowych jako [y 2 , y 1 , x 1 , y 2 ] jest w porządku, o ile jest spójne). Wynik musi być wartością prawdy lub fałszu .
Ponieważ jest to code-golf , wygrywa najkrótszy kod w bajtach.
Prawdziwe przypadki testowe :
5 3 3 2
6 1 1 7
3 3 3 2
4 1 4 7
7 7 1 7
1 8 1 7
Przypadki testowe Falsy :
6 4 3 2
8 8 1 7
3 4 3 2
x1 y1 x2 y2
?1 8 1 7
, w którym król chwyta, zanim pionek może poruszyć się o dwa pola. Myślę, że wszystkie odpowiedzi są teraz błędne. Ta sytuacja sprawia, że problem jest znacznie trudniejszy.Odpowiedzi:
Galaretka , 33 bajty
Ten program odczytuje współrzędne
x2\nx1\ny2\ny1
od STDIN. Wypróbuj online!Wersja niekonkurująca
Niestety interpreter Jelly miał błąd, gdy pytanie zostało opublikowane. Wspomniany błąd uniemożliwił zaakceptowanie więcej niż dwóch argumentów wiersza poleceń. Najnowsza wersja Galaretki może rozwiązać dane zadanie w 23 bajtach .
Wypróbuj online!
źródło
Python 2,
5340Król ma współrzędne
(x, y)
i pionka(p, q)
.Istnieją trzy znaczące przypadki:
Pionek ma rangę 7, a król rangę 8. Aby schwytać pionka, król musi znajdować się w tym samym pliku lub obok niego.
Wynik:
q = 7 ⋀ y = 8 → |x - p| ≤ 1
Pionek ma rangę 7. Aby schwytać pionka, król musi znajdować się w sześciu plikach.
Wynik:
q = 7 → |x - p| ≤ 6
Pionek ma niższą rangę. Aby schwytać pionka, król musi być w stanie dotrzeć do pola awansu co najwyżej jeden ruch za pionkiem.
Wynik:
q < 7 → |x - p| ≤ q ⋀ y - 1 ≤ q
Moim rozwiązaniem są tylko te warunki. Mam nadzieję, że tym razem nie ma błędów.
źródło
abs
zmax(y-1,x-p,p-x)
?f(1,8,1,7)
być tak,True
ponieważ król natychmiast chwyta pionka? Wydaje mi się, że istnieje subtelność, w której pionek 7 nie może być traktowany jak rząd 6, jeśli król natychmiast złapie.or
a-2
.Prolog,
4842 bajtówKod:
Przykłady:
Niezłe wyzwanie dla Prologa w porównaniu do większości.
Edycja: Zapisano 6 bajtów, przechodząc do formuły użytej w odpowiedzi Grcona na Python 2 .
Niestety Prolog nie może łączyć porównań, ponieważ Python może, a dzielenie liczb całkowitych jest o 1 bajt dłuższe niż dzielenie zmiennoprzecinkowe.
Wypróbuj online tutaj
źródło
JavaScript (ES6), 52
Mam nadzieję, że zapisałem bajty, które nie używają Math.abs, Math.min, Math.max
Pionek w siódmym rzędzie może uciec poruszając się o 2 pola, jeśli i tylko wtedy, gdy króla nie ma w pobliżu kolumny - dlatego
d
przed zamianą 7 na 6 następuje sprawdzenie .Przypadek testowy do uruchomienia w konsoli:
Wynik:
[true, true, true, true, false, false, false]
źródło
Rubinowy, 50 bajtów
Argumentami są (król x, król y, pion x, pion y), wszystkie liczby całkowite.
źródło