Napisz najkrótszy kod, który oblicza wszystkie możliwe (legalne) ruchy bieżącego gracza z danego ciągu FEN. Co to jest łańcuch FEN? (Wikipedia)
- Najkrótszy kod wygrywa, język nie ma znaczenia.
- Ruchy wyjściowe muszą być zgodne z regułami ruchu szachowego, z wyjątkiem promocji en passant , castling i pionków.
- Zignoruj czek, mat i impas, króla nie można też schwytać.
Można ustawić wyjść inaczej, jak chcesz (na przykład: A2-A4
, A2A4
, a2a4
, a2->a4
...)
Przypadki testowe:
# WEJŚCIE 1: rnbqkbnr / ppppppppp / 8/8/8/8 / PPPPPPPP / RNBQKBNR w KQkq - 0 1
# WYJŚCIE 1 A2-A4, A2-A3, B2-B4, B2-B3, C2-C4, C2-C3, D2-D4, D2-D3, E2-E4, E2-E3, F2-F4, F2-F3, G2-G4, G2-G3, H2-H4, H2-H3, B1-A3, B1-C3, G1-F3, G1-H3
# WEJŚCIE 2 7k / 8/8/8/8/8 / PP6 / Q1q4K w - - 0 1
# WYJŚCIE 2 A1-B1, A1-C1, A2-A3, A2-A4, B2-B3, B2-B4, H1-H2, H1-G1, H1-G2
Odpowiedzi:
C - 391 bajtów
Pobiera dane wejściowe jako argumenty wiersza poleceń i wypisuje na standardowe pole z kwadratami oznaczonymi od 0 do 63.
OK, miałem kilka minut, więc próbowałem usunąć wszystkie bity związane z wykryciem czeku. Myślę, że teraz nie jest to zbyt wydajne ...
478 bajtowa wersja z wykrywaniem kontroli
źródło
also here is how test case input boards look like
). Biorąc pod uwagę pozycję na obrazie, oryginalny wynik testu wypadł poprawnie zgodnie z regułami.Java 1455
źródło
Python 553
649678Wcięcie dwoma spacjami to znak tab, który oszczędza 5 bajtów.
Przyszło mi do głowy, że prawdopodobnie uda ci się ocenić rozsądne ruchy do przyzwoitej warstwy i utrzymać ją poniżej 1024 bajtów :) Zacząłem przeglądać inne pytania szachowe , ale wydaje się, że nie ma pytania o silnik szachowy codegolf ...
źródło
B1C3
iH2H3
w pierwszym przykładzie przedstawionym w pytaniu.H2H3
, miałem na myśliG1H3
- innymi słowy, twoi biali rycerze skręcają w lewo.Python
638637 (482?) BajtówUwaga: po
def O(y):
pojawieniu się nowej linii i znaku tabulacji wcześniejif
Uwaga: za pomocą modułu zlib można uzyskać prawidłowy kod źródłowy Python o wielkości 482 bajtów, po prostu kompresując prawdziwe źródło:
źródło
JavaScript (E6) 481
492 550Edytuj Naprawiono paskudny błąd w ruchu rycerza. Dużo pracy, aby bajt się nie zmienił.
(Nie licząc początkowych spacji i znaków nowej linii dla zachowania czytelności)
Mniej golfa
Przetestuj w konsoli FireFox / FireBug
Wynik
źródło
JAVA
631599594Naprawiono błąd w wersji 599 bajtów (dziękuję Jackowi za zwrócenie na to uwagi!) I skróciłem kod do 594 bajtów.
Kompiluj:
javac F.java
Uruchom: Dane
java F 6pk/6pp/8/8/8/p7/PP4pp/Q2p2pK w - - 0 1
wyjściowe:
B2B3 B2B4 B2A3 A1B1 A1C1 A1D1 H1H2 H1G1 H1G2
źródło
3Q4/p4r1k/P4pp1/4P3/5n2/3P4/4BbbP/RN3KN1 w - - 0 0
nie widzę ruchów,F1F2
czyF1G2
król jest w stanie uchwycić?