W szachach notacja Forsyth-Edwards , częściej nazywana „FEN”, jest tekstowym sposobem przepisywania tablic. Opisuje każdy z ośmiu rzędów planszy (zwanych „szachami” w szachach) od góry do dołu z perspektywy Białego. Utwory są zapisywane jako K (król), Q (królowa), R (wieża), B (biskup), N (rycerz) i P (pionek). Czarne litery używają tych liter małymi literami, a białe litery używają tych wielkich liter. Puste spacje są oznaczone liczbą od 1 do 8 wskazującą, ile jest kolejnych pustych spacji. Byłaby to zupełnie pusta ranga 8
, pojedyncza czarna wieża w prawej kolumnie (zwana „plikami” w szachach) 7r
, a dwa białe pionki na każdym końcu rzędu PP4PP
. Rangi są oddzielone znakiem/
. Zwykle dodaje się inne informacje, wskazujące, która strona ma się poruszyć, prawa rycerskie i en passant , numer ruchu i zegar o połowie ruchu, ale zignorujemy je na potrzeby tego wyzwania.
Wejście
Ciąg FEN, z wiersza poleceń lub STDIN, jak chcesz. Możesz założyć, że ten ciąg jest zawsze poprawny.
Wynik
Napisz do STDOUT prostą graficzną reprezentację tablicy ASCII, tak jak by się to faktycznie wydawało:
- Kawałki są reprezentowane przez ich postać w FEN
- Puste kwadraty są reprezentowane przez spacje
- Kawałki i kwadraty są oddzielone rurą,
|
a po każdej stronie planszy znajdują się rury
Tak więc pusta tablica, napisana jak 8/8/8/8/8/8/8/8
w FEN, wyglądałaby jak
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
Pozycja początkowa gry w szachy jest zapisana jako rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
i wyglądałaby jak
|r|n|b|q|k|b|n|r|
|p|p|p|p|p|p|p|p|
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
|P|P|P|P|P|P|P|P|
|R|N|B|Q|K|B|N|R|
Końcowa pozycja Anderssen-Kieseritzky 1851 , zwana „Nieśmiertelną grą” w społeczności szachowej, jest zapisana jako r1bk3r/p2pBpNp/n4n2/1p1NP2P/6P1/3P4/P1P1K3/q5b1
, a twój program po podaniu tego wejścia wyprowadziłby:
|r| |b|k| | | |r|
|p| | |p|B|p|N|p|
|n| | | | |n| | |
| |p| |N|P| | |P|
| | | | | | |P| |
| | | |P| | | | |
|P| |P| |K| | | |
|q| | | | | |b| |
+1
na ciekawe wyzwanie.-2
za zaakceptowanie złej odpowiedzi bez uzasadnionego powoduOdpowiedzi:
Perl, 28 bajtów
Obejmuje +2 za
-lp
Podaj dane na STDIN
fen.pl
:Właściwie w lidze niektórych języków golfowych ...
Zauważ, że wersja oparta na plikach potrzebuje ostatniej nowej linii w pliku, tak że jeden ma naprawdę 29 bajtów. Ale wersja wiersza poleceń nie potrzebuje tej nowej linii i dlatego kod liczy się jako 28 bajtów:
źródło
Siatkówka, 13 bajtów
Wypróbuj online!
Wyjaśnienie
Pierwsza część (zwróć uwagę na spację końcową):
jest konwersja a na określoną liczbę spacji. Siatkówka ma
$*
funkcję do powtórzenia. Działa to tak:<num>$*<char>
jeśli nie<num>
, Retina przyjmie$&
lub dopasuje ciąg, w tym przypadku dopasowany numer.Następna część:
jest dość prosta, to zastępuje wszystkie
/
z¶
którym jest znak nowej linii.Ostatnia część działa tak samo:
Zastąpi to wszystko (stąd, dlaczego w pierwszym wierszu nie ma nic)
|
. Stawianie|
wszędzie.źródło
S`/
co w drugim etapie.Rubinowy -
75827876756259585756 bajtówZaoszczędź kilka bajtów dzięki Ventero
Pozwól mi wyjaśnić (z
\n
zastąpieniem dosłownego nowego wiersza):Powoduje to niejawne zwrócenie wartości ciągu, a każdy z nich
/
zastępowany jest nową linią (domyślnie$/
zawiera nową linię)To jest bardzo proste; to tylko ciąg zawierający potok, interpolację ciągu i inną potok. Interpolacja ciągów jest oceniana
Zastępuje każdą liczbę tyloma spacjami. Mogę zaoszczędzić kilka bajtów, znajdując tutaj również nowe wiersze; ponieważ
hex
zwraca 0, jeśli ciąg nie jest prawidłową liczbą, gdy znajdzie nowy wiersz - tj. ten na końcu wynikugets
- - zastępuje go ciągiem o długości 0, skutecznie go usuwając. Bez tego istniałaby tylna rura.$&
to magiczna zmienna, która reprezentuje pełny tekst najnowszego dopasowania zmiennej, co pozwala mi zaoszczędzić bajt poprzez wyeliminowanie|d|
. Mogę zapisać kolejny bajt, używając.hex
zamiast.to_i
, co działa, ponieważ każda liczba jest mniejsza niż 9, co oznacza, że szesnastkowy i dziesiętny mają te same wartości.To stawia fajkę między każdą postacią. Zauważ, że właśnie to umieszcza rury po obu stronach linii (z wyjątkiem pierwszej i ostatniej), ponieważ ukośniki, które ostatecznie zmieniają się w nowe linie
tr
, liczą się jako znaki, a zatem są otoczone rurami. Po?|
prostu oznacza „ciąg jednoznakowy"|"
”.I to wszystko. To szczerze skandalicznie prosty program. Po prostu używa wielu podstępnych sztuczek składniowych.
źródło
puts"|#{gets.gsub(/\d|\n/){' '*$&.hex}.chars*?|}|".split'/'
(oczywiście zastąp\n
ponownie dosłowną nową linią).Pyth -
242221 bajtówPakiet testowy .
źródło
Pyth, 23 bajty
Wypróbuj online!
Jak to działa:
źródło
JavaScript ES7,
8070 bajtówJest anonimową funkcją, która przyjmuje ciąg jako dane wejściowe.
80-bajtowa funkcja tylko dla ES6.
Wyjaśnienie
Używamy rozumienia tablicowego, aby przeglądać listę:
Jest to równoważne z:
Jeśli jest to liczba, mamy taką liczbę spacji. Jeśli tak
/
, mamy nową linię. W przeciwnym razie mamy postać. Następnie łączymy się ze zrozumieniem, nie tworząc nici.Następnie tworzymy tablicę o długości 3
[,...that,"\n"]
....
dzieli połączone zrozumienie na znaki. Dołączenie do tego daje wynik.źródło
[x for(x of a)]
) są ES7.Julia, 62 bajty
Jest to anonimowa funkcja, która przyjmuje ciąg i zwraca tablicę ciągów. Aby go wywołać, przypisz go do zmiennej.
Podejście jest takie samo, jak w sprytnej odpowiedzi Ruby na QPaysTaxes . Zamieniamy każdą cyfrę na wejściu na tyle spacji, umieszczamy
|
między każdym znakiem, przyczepiamy|
do przodu i tyłu i dzielimy na tablicę/
.Wypróbuj online!
źródło
05AB1E , 21 bajtów
Kod:
Również 21 bajtów:
'|¹9GNNð×:}S'|«JJ'/¶:
.Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .
źródło
JavaScript (ES6),
696762 bajtówDodatkowe przecinki tworzą puste wartości w zewnętrznym podziale, który tworzy początkowe i końcowe
|
znaki. Potrzebujesz dwóch przecinków końcowych, ponieważ przecinki końcowe są opcjonalne na końcu list, więc pierwszy jest nadal częścią poprzedniego elementu.Edycja: Zapisano 5 bajtów dzięki @ user81655.
źródło
/[\d/]/g,c=>+c?` `.repeat(c):`\n`
zadziała?Siatkówka ,
5045 bajtówTo była fajna haha. Nie tylko jestem noobem na Retinie, ale także ogólnie w wyrażeniach regularnych ... Prawdopodobnie można dużo grać w golfa grać w , więc przeprowadzę więcej badań.
Kod:
Wypróbuj online!
źródło
$*
funkcji :)Jolf, 28 bajtów
Zamień
♣
na postać\x05
lub wypróbuj ją tutaj!źródło
Python 3.5, 112 bajtów:
Wypróbuj online! (Ideone)
źródło
C, 252 bajtów
Szczegółowa próba online
źródło
JavaScript (FireFox 30+), 61
Korzystanie ze zrozumienia tablic, które nie jest już standardowym EcmaScript
Test
źródło
Lua, 106 bajtów
Nie golfił
źródło
print((...):gsub(".",function(c)return(c:find("%d")and("| "):rep(c)or c=="/"and"|\n"or"|"..c)end).."|")
print((...):gsub("%d",function(c)return("| "):rep(c)end):gsub("/","|\n"):gsub("([^%d%s|])","|%1").."|")
dla tej samej liczby bajtów.print((...):gsub("%d",function(c)return("| "):rep(c)end):gsub("([^%d |])","|%1"):gsub("/","\n").."|")
ma 101 bajtówR (poza zawodami)
Przepraszam, jeśli publikowanie tego nie jest właściwe, ale pomyślałem, że to fajnie, że akurat miałem funkcję, która faktycznie działa na to pytanie bez edycji! Jednak drukuje wyjście w formacie Unicode zamiast ascii. Nie pamiętam dokładnie, dlaczego to napisałem, ale to nie była odpowiedź na wyzwanie.
źródło
Haskell, 110 bajtów
Nie golfowany:
źródło
Java 7,
190184 bajtówSzczegółowa próba online
źródło
Pyke,
2520 bajtówWyjaśnienie:
Wypróbuj tutaj!
źródło
Python, 84 bajty
Wyjaśnienie:
źródło
> <>, 64 bajty
4 zmarnowane bajty z powodu problemów z wyrównaniem, nie wiem jednak, jak je rozegrać. ¯ \ _ (ツ) _ / ¯
źródło