Jack i Jane postanowili zagrać w szachy, aby spędzić czas z dala. Niestety, Jack jest kiepski w wizualizacji. Oczywiście ciężko jest mu określić ruchy danego pionka innego niż pionek!
Twoim wyzwaniem jest pomoc Jackowi w znalezieniu możliwych opcji dla danego pionka (innego niż pionek).
W przypadku zapomnienia różne elementy są oznaczone:
- K: King
- P: Królowa
- N: Rycerz
- B: Biskupie
- R: Gawron
Jako przykład, na poniższym obrazie skoczek znajduje się na d4
i może poruszać się c2
, b3
, b5
, c6
, e6
, f5
, f3
, e2
. Dla danych wejściowych:
Nd4
wyprodukowałbyś:
Nc2 Nb3 Nb5 Nc6 Ne6 Nf5 Nf3 Ne2
Zasady:
- Kolejność danych wyjściowych nie ma znaczenia, dopóki wymienione są wszystkie możliwe ruchy
- Możliwe ruchy można rozdzielić spacjami, znakami nowej linii lub dowolnym innym ogranicznikiem
- Dane wejściowe można przekazać do programu jako parametr lub przez
STDIN
- Białe spacje w programie będą liczone, więc optymalnie je wykorzystaj
To jest kod golfowy. (Unikaj korzystania z narzędzi / narzędzi specjalnie zaprojektowanych do tego celu.) Zwycięża najkrótsza odpowiedź!
f(x)... case "Q": {f("B");f("R")}
jeśli funkcja wymaga któregokolwiek #include, powinny one być częścią liczby bajtów.Odpowiedzi:
GolfScript,
9493 znakówMój pierwszy w historii program GolfScript! Zajęło mi to wiele godzin grzebania w głowie, nie bardzo wiedząc, co robię, ale upierałem się i myślę, że udało mi się nauczyć podstaw języka i dość dobrze grać w golfa.
W pełni golfa :
Skomentowane i ładniejsze źródło :
Może to wyglądać jak odpowiedź Claudiu, ponieważ odniosłem się do jego odpowiedzi, a także do mojego (nieprzesłanego) rozwiązania C podczas tworzenia mojej. Dostarczył dobry przykład (względnie) złożonego, działającego programu GolfScript, który pomógł mi wiele nauczyć się o języku. Dziękuję, Claudiu!
Będąc nowym w GolfScript, jeśli macie jakieś uwagi, chętnie je usłyszę!
źródło
Python,
217212220217213 znakówPowiązano 213-bajtowe rozwiązanie Mathematica
Zacząłem od wygenerowania wszystkich prawidłowych ruchów, ale stało się to zbyt duże, więc podejście jest dość podobne do Mathematica.
źródło
Mathematica,
278272264260215213 znakówWersja bez golfa:
Przykładowe użycie:
Wersja bez golfa tworzy pełne wyżywienie, a następnie wybiera prawidłowe pozycje za pomocą
Cases
, podczas gdy wersja z golfem natychmiast odrzuca nieprawidłowe ruchy wTable
poleceniu, wydając##&[]
, co po prostu znika.źródło
N4d
? Czy nie powinno tak byćNd4
?Nd4
.ChessboardDistance
Abs
w Mathematica, ponieważ oznaczają alternatywy we wzorze.Haskell
225 220 208 205 200182Trudno będzie dotknąć Mathematiki, kiedy ma wbudowane ruchy szachowe: rollseyes: (dobrze zagrany m.buettner) Cofamto wszystko. Pokonanie Mathematiki o 31!Ostatnia edycja: zastąpiono wielkość liter funkcją, wbudowano filtr do zrozumienia, aby pobić wpis w R;)
stosowanie:
Niegolfowany (odpowiada wersji 208 znaków przed wstawieniem „u”):
źródło
piece
do listy,[piece,newfile, newrank]
jeśli nie używasz jej do dopasowywania wzorców, może zaoszczędzić ci kilka znaków?Bash, 238
Jak to działa
Chodzi o to, aby przedstawić każde pole na planszy wartością liczbową, biorąc jego współrzędne jako liczbę podstawową-20 i odejmując 200. W ten sposób
a1
staje się20 * 10 + 1 - 200 = 1
,h8
staje się20 * 17 + 8 - 200 = 148
itp.Teraz możliwe ruchy gońca mogą być reprezentowane przez (dodatnie lub ujemne) wielokrotności 19 - tyle samo kroków w górę (+20) i w lewo (-1) - lub 21 - tyle samo kroków w górę (+20 ) i po prawej stronie (+1).
Położenie figurki po ruchu jest po prostu sumą jej pierwotnej pozycji i ruchu. Po dodaniu tych liczb musimy sprawdzić, czy ich suma odpowiada prawidłowemu polu na tablicy.
Ponieważ podstawa (20) jest ponad dwa razy większa niż najwyższa możliwa liczba (8), suma nie może owijać się wokół planszy, np. Przesunięcie Bh1 o siedem kroków w prawo i w górę spowoduje nieprawidłowe ustawienie planszy.
Linia
wylicza wszystkie możliwe ruchy elementów, które są reprezentowane przez liczby dodatnie.
Polecenia
przechowuje identyfikator elementu w zmiennej a , reprezentację numeryczną pierwotnej pozycji wb oraz litery od a do h w tablicy d .
Po rozwinięciu nawiasu klamrowego
eval{,} echo '$'$a
staje sięeval eval echo '$'$a
(podwójnie zły), który ocenia np.eval echo $K
, Który oceniaecho 1 19 20 21
.for i in $c -${c// / -};do …; done
zapętla wszystkie możliwe ruchy i ich negatywne odpowiedniki.echo $a${d[$[(i+=b)/20]]}$[i%20]
daje ostateczną pozycję po ruchu.grep '[a-h][1-8]$'
upewnia się, że mamy prawidłową pozycję na pokładzie.źródło
Golfscript,
144135 znakówZamiast kontynuować grę w golfa w moim języku Python , przetłumaczyłem go na Golfscript:
Proste tłumaczenie bez dużej gry w golfa, więc najprawdopodobniej może zostać jeszcze bardziej oddalone. Pobiera dane wejściowe ze standardowego wejścia bez nowego wiersza, spróbuj tutaj (pierwsze dwie linie mają naśladować standardowe wejście standardowe).
źródło
C
634632629625600 znakówWszelkie sugestie, jak to poprawić? Po raz pierwszy przesyłam odpowiedź.
źródło
C
można znacznie uprościć, używając operatora trójskładnikowego?:
i wartości zwracanejprintf
. (printf
zwraca liczbę zapisanych znaków, więc w tym przypadku jest zawsze niezerowa)C(P,c,r){return(0<=c)&(c<8)&(0<r)&(r<9)?printf("%c%c%d ",P,c+'a',r):0;}
. Drobna edycja:M
poif
tym można usunąć dodatkowe miejsce .Haskell,
300269 znakówDzięki bazzargh za pomoc w utracie 31 znaków ...
Ten sam algorytm co wersja Mathematica. Przykładowe dane wyjściowe z ghci:
(Nie poprosiłeś o sprawdzenie rozsądku!)
źródło
Haskell, 446 znaków
Wywoływany za pomocą
j
funkcjiNie pracowałem z Haskellem od kilku miesięcy, więc nie było tak krótkie jak większość innych rozwiązań, ale jestem pewien, że są pewne optymalizacje, głównie z
h
. Mogę to trochę skrócić.źródło
q & k [
311262 znaków]Istnieje potencjał zmniejszenia liczby kolejnych postaci. Zmniejszę to w następnej iteracji.
Stosowanie
Wieża
Król
Rycerz
Biskup
królowa
źródło
R, 203 znaków
Wersja bez golfa:
Stosowanie:
Rozwiązanie jest nawet dobrze czytelne. Dodałem jednak nawiasy i komentarze dla czytelników niezaznajomionych z kodem R (w wersji bez golfisty).
źródło
Haskell (hipotetyczny), 248 znaków
Niestety, każdy kompilator Haskell, który mogę teraz zdobyć, ma problemy z literałami łańcuchowymi Unicode. Oto (dłuższa) wersja, która faktycznie działa:
Definicja
h x y=...
jest funkcją skrótu; poprawne ruchy będą mieszały się z liczbami znaków, które zawierają 41 znaków. Dzięki temu nie trzeba używać instrukcji „case” lub jej odpowiednika.Nie planuję teraz dalej nad tym pracować. Byłoby fajnie zobaczyć, czy ktoś może użyć funkcji skrótu w bardziej zwięzłym języku, aby zrobić krótsze rozwiązanie.
źródło