En ajedrez, la notación de Forsyth-Edwards , más comúnmente llamada "FEN", es una forma textual de transcribir tableros. Describe cada una de las ocho filas del tablero (llamadas "rangos" en ajedrez) de arriba a abajo desde la perspectiva de White. Las piezas se escriben como K (rey), Q (reina), R (torre), B (alfil), N (caballero) y P (peón). Las piezas negras usan estas letras en minúsculas, y las piezas blancas usan estas letras en mayúsculas. Los espacios vacíos se indican mediante un número del 1 al 8 que indica cuántos espacios vacíos consecutivos hay. Un rango completamente vacío sería 8
, una sola torre negra en la columna más a la derecha (llamada "archivos" en ajedrez) 7r
, y dos peones blancos en cada extremo de una fila PP4PP
. Los rangos están separados por un/
. Normalmente existe otra información adicional, lo que indica de qué lado es mover, enroque y en passant derechos, número de jugadas, y el reloj halfmove, pero vamos a ignorar a los efectos de este desafío.
Entrada
Una cadena FEN, desde la línea de comando o STDIN, como desee. Puede suponer que esta cadena siempre es válida.
Salida
Escriba a STDOUT una simple representación artística ASCII de la pizarra tal como aparecería en realidad:
- Las piezas están representadas por su personaje en FEN
- Los cuadrados vacíos están representados por espacios.
- Las piezas y los cuadrados están separados por una tubería
|
y hay tuberías a cada lado del tablero.
Entonces un tablero vacío, escrito como 8/8/8/8/8/8/8/8
en FEN, aparecería como
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
La posición inicial de un juego de ajedrez se escribe como rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
, y aparecería como
|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|
La posición final de Anderssen-Kieseritzky 1851 , llamada "El juego inmortal" en la comunidad de ajedrez, se escribe como r1bk3r/p2pBpNp/n4n2/1p1NP2P/6P1/3P4/P1P1K3/q5b1
, y su programa cuando se alimenta esa entrada generaría:
|r| |b|k| | | |r|
|p| | |p|B|p|N|p|
|n| | | | |n| | |
| |p| |N|P| | |P|
| | | | | | |P| |
| | | |P| | | | |
|P| |P| |K| | | |
|q| | | | | |b| |
+1
por un reto interesante-2
por aceptar la respuesta incorrecta sin una buena razónRespuestas:
Perl, 28 bytes
Incluye +2 para
-lp
Dar entrada sobre STDIN
fen.pl
:En realidad en la liga de algunos idiomas de golf ...
Tenga en cuenta que la versión basada en archivo necesita la nueva línea final en el archivo, de modo que uno sea realmente 29 bytes. Pero la versión de línea de comandos no necesita esa nueva línea adicional y, por lo tanto, el código cuenta como 28 bytes:
fuente
Retina, 13 bytes
Pruébalo en línea!
Explicación
La primera parte (tenga en cuenta el espacio final):
es convertir a al número específico de espacios. La retina tiene una
$*
función para repetir. La forma en que funciona es:<num>$*<char>
si no hay<num>
, Retina asumirá$&
o la cadena coincidente, en este caso, el número coincidente.La siguiente parte:
es bastante simple, que sustituye todos
/
con¶
los cuales es una nueva línea.La última parte funciona igual:
Esto reemplazará todo (por eso no hay nada en la primera línea) con
|
. Poniendo un en|
todas partes.fuente
S`/
la segunda etapa.Ruby -
75827876756259585756 bytesGuardado algunos bytes gracias a Ventero
Déjame explicarte (
\n
reemplazando la nueva línea literal):Esto devuelve implícitamente el valor de la cadena, con cada uno
/
reemplazado por una nueva línea (por defecto,$/
contiene una nueva línea)Esto es super simple; es solo una cadena que contiene una tubería, interpolación de cadenas y otra tubería. Se evalúa la interpolación de cadenas
Esto reemplaza cada número con tantos espacios. Puedo guardar algunos bytes al encontrar nuevas líneas aquí; porque
hex
devuelve 0 si la cadena no es un número válido, cuando encuentra una nueva línea, es decir, la que está al final del resultado degets
, la reemplaza con una cadena de longitud 0, eliminándola efectivamente. Sin esto, habría una tubería de arrastre.$&
es una variable mágica que representa el texto completo de la última coincidencia de variables, lo que me permite guardar un byte al eliminarlo|d|
. Puedo guardar otro byte usando en.hex
lugar de.to_i
, que funciona porque cada número es menor que 9, lo que significa que hexadecimal y decimal tienen los mismos valores.Esto pone una tubería entre cada personaje. Tenga en cuenta que esto es lo que coloca las tuberías a ambos lados de las líneas (excepto la primera y la última) porque las barras, que eventualmente se convierten en líneas nuevas
tr
, cuentan como caracteres y, por lo tanto, están rodeadas de tuberías. El?|
justo significa "la cadena de un carácter"|"
".Y eso es. Es un programa francamente escandalosamente simple. Solo usa muchos trucos de sintaxis furtivos.
fuente
puts"|#{gets.gsub(/\d|\n/){' '*$&.hex}.chars*?|}|".split'/'
(por supuesto, reemplace el\n
con una nueva línea literal nuevamente).Pyth -
242221 bytesTest Suite .
fuente
Pyth, 23 bytes
Pruébalo en línea!
Cómo funciona:
fuente
JavaScript ES7,
8070 bytesEs una función anónima que acepta una cadena como entrada.
Aproximación de 80 bytes solo para ES6.
Explicación
Usamos una comprensión de matriz para recorrer la lista:
Esto es equivalente a:
Si es un número, tenemos ese número de espacios. Si es un
/
, tenemos una nueva línea. De lo contrario, tenemos el personaje. Luego, unimos la comprensión sin nada para hacer una cuerda.Luego, creamos una matriz de longitud 3
[,...that,"\n"]
....
Splats la comprensión unida en caracteres. Unirse a esto produce el resultado.fuente
[x for(x of a)]
) son ES7.Julia, 62 bytes
Esta es una función anónima que acepta una cadena y devuelve una matriz de cadenas. Para llamarlo, asígnelo a una variable.
El enfoque es el mismo que en la inteligente respuesta de Ruby de QPaysTaxes . Reemplazamos cada dígito en la entrada con esa cantidad de espacios, lo colocamos
|
entre cada carácter, lo pegamos|
al frente y atrás, y lo dividimos en una matriz/
.Pruébalo en línea!
fuente
05AB1E , 21 bytes
Código:
También 21 bytes:
'|¹9GNNð×:}S'|«JJ'/¶:
.Utiliza la codificación CP-1252 . Pruébalo en línea! .
fuente
JavaScript (ES6),
696762 bytesLas comas adicionales crean valores vacíos en la división externa que crea los caracteres iniciales y finales
|
. Necesita dos comas finales porque las comas finales son opcionales al final de las listas, por lo que la primera sigue siendo parte del elemento anterior.Editar: Guardado 5 bytes gracias a @ user81655.
fuente
/[\d/]/g,c=>+c?` `.repeat(c):`\n`
?Retina ,
5045 bytesEsto fue divertido jaja. No solo soy un novato en Retina, sino también en expresiones regulares en general ... Esto probablemente se puede jugar mucho al golf , así que investigaré un poco más.
Código:
Pruébalo en línea!
fuente
$*
funcionalidad :)Jolf, 28 bytes
¡Reemplácelo
♣
con el personaje\x05
, o pruébelo aquí!fuente
Python 3.5, 112 bytes:
Pruébalo en línea! (Ideona)
fuente
C, 252 bytes
Prueba detallada en línea
fuente
JavaScript (FireFox 30+), 61
Usar una comprensión de matriz que ya no es EcmaScript estándar
Prueba
fuente
Lua, 106 bytes
Sin golf
fuente
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").."|")
para el mismo número de bytes.print((...):gsub("%d",function(c)return("| "):rep(c)end):gsub("([^%d |])","|%1"):gsub("/","\n").."|")
es 101 bytesR (fuera de competencia)
Lo siento si no es apropiado publicar esto, pero pensé que era genial que tuviera una función que realmente funciona para esta pregunta sin editar. Sin embargo, imprime salida unicode en lugar de ascii. No recuerdo exactamente por qué lo escribí, pero no fue para responder a un desafío.
fuente
Haskell, 110 bytes
Sin golf:
fuente
Java 7,
190184 bytesPrueba detallada en línea
fuente
Pyke,
2520 bytesExplicación:
Pruébalo aquí!
fuente
Python, 84 bytes
Explicación:
fuente
> <>, 64 bytes
4 bytes desperdiciados debido a problemas de alineación, aunque no estoy seguro de cómo jugarlos. ¯ \ _ (ツ) _ / ¯
fuente