Im Schach ist die Forsyth-Edwards-Notation , besser bekannt als "FEN", eine textuelle Methode zum Transkribieren von Brettern. Es beschreibt jede der acht Reihen des Bretts (im Schach "Ränge" genannt) aus der Sicht von Weiß von oben nach unten. Die Stücke sind geschrieben als K (König), Q (Königin), R (Turm), B (Bischof), N (Ritter) und P (Bauer). Schwarze Teile verwenden diese Buchstaben in Kleinbuchstaben und weiße Teile verwenden diese Buchstaben in Großbuchstaben. Leere Leerzeichen werden durch eine Zahl von 1 bis 8 angezeigt, die angibt, wie viele aufeinanderfolgende Leerzeichen vorhanden sind. Ein völlig leerer Rang wäre 8
, ein einzelner schwarzer Turm in der Spalte ganz rechts (im Schach "Dateien" genannt) wäre 7r
und zwei weiße Bauern an jedem Ende einer Reihe wären PP4PP
. Ränge werden durch a getrennt/
. Es ist in der Regel andere Informationen hinzugefügt, die angibt , welche Seite zu bewegen ist, Rochade und en passant Rechte, Zugnummer und halfmove Uhr, aber wir werden sie für die Zwecke dieser Herausforderung zu ignorieren.
Eingang
Eine FEN-Zeichenfolge aus der Befehlszeile oder STDIN, wie Sie möchten. Sie können davon ausgehen, dass diese Zeichenfolge immer gültig ist.
Ausgabe
Schreiben Sie an STDOUT eine einfache ASCII-Grafikdarstellung der Tafel, wie sie tatsächlich erscheinen würde:
- Stücke werden durch ihren Charakter in FEN dargestellt
- Leere Quadrate werden durch Leerzeichen dargestellt
- Teile und Quadrate sind durch ein Rohr getrennt
|
und auf jeder Seite der Platte befinden sich Rohre
Eine leere Tafel, geschrieben wie 8/8/8/8/8/8/8/8
in FEN, würde also als erscheinen
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
Die Startposition eines Schachspiels wird als geschrieben rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
und erscheint als
|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|
Die endgültige Position von Anderssen-Kieseritzky 1851 , genannt "The Immortal Game" in der Schachgemeinschaft, lautet wie folgt: r1bk3r/p2pBpNp/n4n2/1p1NP2P/6P1/3P4/P1P1K3/q5b1
Ihr Programm würde bei Eingabe dieses Inputs Folgendes ausgeben:
|r| |b|k| | | |r|
|p| | |p|B|p|N|p|
|n| | | | |n| | |
| |p| |N|P| | |P|
| | | | | | |P| |
| | | |P| | | | |
|P| |P| |K| | | |
|q| | | | | |b| |
+1
für eine interessante Herausforderung.-2
für die Annahme der falschen Antwort ohne guten GrundAntworten:
Perl, 28 Bytes
Beinhaltet +2 für
-lp
Geben Sie eine Eingabe auf STDIN
fen.pl
::Eigentlich in der Liga einiger Golfsprachen ...
Beachten Sie, dass die dateibasierte Version den letzten Zeilenumbruch in der Datei benötigt, sodass tatsächlich 29 Byte vorhanden sind. Die Befehlszeilenversion benötigt jedoch keine zusätzliche neue Zeile, und daher zählt der Code als 28 Byte:
quelle
Netzhaut, 13 Bytes
Probieren Sie es online aus!
Erläuterung
Der erste Teil (beachten Sie das nachfolgende Leerzeichen):
ist a in die bestimmte Anzahl von Leerzeichen umzuwandeln. Die Netzhaut muss
$*
wiederholt werden. Die Art und Weise, wie es funktioniert, ist:<num>$*<char>
Wenn es keine gibt<num>
, übernimmt Retina$&
oder die übereinstimmende Zeichenfolge, in diesem Fall die übereinstimmende Nummer.Der nächste Teil:
ist ziemlich einfach, es ersetzt
/
mit¶
dem ein Newline ist.Der letzte Teil funktioniert genauso:
Dies ersetzt alles (daher steht in der ersten Zeile nichts) durch
|
. Putting a|
überall.quelle
S`/
wie in der zweiten Stufe ausführen.Ruby -
75827876756259585756 BytesDank Ventero ein paar Bytes gespart
Lassen Sie mich erklären (mit dem
\n
Ersetzen der wörtlichen Newline):Dies gibt implizit den Wert der Zeichenfolge zurück, wobei jede
/
durch eine neue Zeile ersetzt wird ($/
enthält standardmäßig eine neue Zeile).Das ist super einfach; Es ist nur eine Zeichenfolge, die eine Pipe, eine String-Interpolation und eine andere Pipe enthält. Die String-Interpolation wird ausgewertet
Dies ersetzt jede Zahl durch so viele Leerzeichen. Ich kann ein paar Bytes sparen, indem ich hier auch Zeilenumbrüche finde. weil
hex
0 zurückgibt, wenn die Zeichenfolge keine gültige Zahl ist, wenn sie eine neue Zeile findet - dh die am Ende des Ergebnisses vongets
-, ersetzt sie diese durch eine Zeichenfolge mit der Länge 0 und löscht sie effektiv. Ohne dies würde es ein nachlaufendes Rohr geben.$&
ist eine magische Variable, die den vollständigen Text der letzten Variablenübereinstimmung darstellt, wodurch ich ein Byte durch Eliminieren speichern kann|d|
. Ich kann ein anderes Byte speichern, indem ich.hex
anstelle von verwende.to_i
, was funktioniert, weil jede Zahl kleiner als 9 ist, was bedeutet, dass Hex und Dezimal die gleichen Werte haben.Dies setzt eine Pipe zwischen jedes Zeichen. Beachten Sie, dass dies die Pipes auf beiden Seiten der Linien platziert (mit Ausnahme der ersten und letzten), da die Schrägstriche, die sich schließlich in Zeilenumbrüche verwandeln
tr
, als Zeichen gelten und daher von Pipes umgeben sind. Das?|
bedeutet nur "die Ein-Zeichen-Zeichenfolge"|"
".Und das ist es. Es ist ein ehrlich gesagt skandalös einfaches Programm. Es werden nur viele hinterhältige Syntaxtricks verwendet.
quelle
puts"|#{gets.gsub(/\d|\n/){' '*$&.hex}.chars*?|}|".split'/'
(Ersetzen Sie die\n
natürlich wieder durch eine wörtliche neue Zeile).Pyth -
242221 BytesTestsuite .
quelle
Pyth, 23 Bytes
Probieren Sie es online aus!
Wie es funktioniert:
quelle
JavaScript ES7,
8070 BytesIst eine anonyme Funktion, die eine Zeichenfolge als Eingabe akzeptiert.
80-Byte-ES6-Ansatz.
Erläuterung
Wir verwenden ein Array-Verständnis, um die Liste zu durchlaufen:
Dies entspricht:
Wenn es eine Zahl ist, haben wir diese Anzahl von Leerzeichen. Wenn es eine ist
/
, haben wir eine neue Zeile. Ansonsten haben wir den Charakter. Dann verbinden wir das Verständnis mit nichts, um einen String zu machen.Dann erstellen wir ein Array der Länge 3
[,...that,"\n"]
....
Splats das verbundene Verständnis in Zeichen. Wenn Sie sich dem anschließen, erhalten Sie das Ergebnis.quelle
[x for(x of a)]
) sind ES7.Julia, 62 Bytes
Dies ist eine anonyme Funktion, die eine Zeichenfolge akzeptiert und ein Array von Zeichenfolgen zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu.
Der Ansatz ist der gleiche wie in der cleveren Ruby- Antwort von QPaysTaxes . Wir ersetzen jede Ziffer in der Eingabe durch so viele Leerzeichen, platzieren sie
|
zwischen den einzelnen Zeichen, heften sie|
vorne und hinten an und teilen sie in ein Array auf/
.Probieren Sie es online aus!
quelle
05AB1E , 21 Bytes
Code:
Auch 21 Bytes :
'|¹9GNNð×:}S'|«JJ'/¶:
.Verwendet die CP-1252- Codierung. Probieren Sie es online aus! .
quelle
JavaScript (ES6),
696762 ByteDie zusätzlichen Kommas erzeugen leere Werte in der äußeren Teilung, wodurch die Anfangs- und Endzeichen erstellt werden
|
. Sie benötigen zwei nachgestellte Kommas, da nachfolgende Kommas am Ende von Listen optional sind, sodass das erste noch Teil des vorherigen Elements ist.Bearbeiten: 5 Bytes dank @ user81655 gespeichert.
quelle
/[\d/]/g,c=>+c?` `.repeat(c):`\n`
funktionieren?Netzhaut ,
5045 BytesDas hat Spaß gemacht haha. Ich bin nicht nur ein Noob in Retina, sondern auch in Regex im Allgemeinen ... Dies kann wahrscheinlich viel Golf gespielt werden , also werde ich etwas mehr Forschung betreiben .
Code:
Probieren Sie es online aus!
quelle
$*
Funktionalität zu nutzen :)Jolf, 28 Bytes
Ersetzen Sie
♣
durch den Charakter\x05
oder versuchen Sie es hier!quelle
Python 3.5, 112 Bytes:
Probieren Sie es online aus! (Ideone)
quelle
C 252 Bytes
Detaillierter Online-Versuch
quelle
JavaScript (FireFox 30+), 61
Verwenden des Array-Verständnisses, das nicht mehr Standard-EcmaScript ist
Prüfung
quelle
Lua, 106 Bytes
Ungolfed
quelle
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").."|")
für die gleiche Anzahl von Bytes.print((...):gsub("%d",function(c)return("| "):rep(c)end):gsub("([^%d |])","|%1"):gsub("/","\n").."|")
ist 101 BytesR (außer Konkurrenz)
Es tut mir leid, wenn es nicht angebracht ist, dies zu posten, aber ich fand es cool, dass ich zufällig eine Funktion herumliegen hatte, die für diese Frage tatsächlich funktioniert, ohne sie zu bearbeiten! Es wird jedoch eher eine Unicode-Ausgabe als eine ASCII-Ausgabe gedruckt. Ich kann mich nicht genau erinnern, warum ich es geschrieben habe, aber es war keine Herausforderung zu beantworten.
quelle
Haskell, 110 Bytes
Ungolfed:
quelle
Java 7,
190184 BytesDetaillierter Online-Versuch
quelle
Pyke,
25 bis20 BytesErläuterung:
Probieren Sie es hier aus!
quelle
Python, 84 Bytes
Erläuterung:
quelle
> <>, 64 Bytes
4 verschwendete Bytes aufgrund von Ausrichtungsproblemen, aber nicht sicher, wie man sie herausgolft. ¯ \ _ (ツ) _ / ¯
quelle