¡Todos a bordo del tren ASCII!
o O O ___ ___ ___ ___ ___ ___ ___ ___ ___
o | C | | O | | D | | E | | | | G | | O | | L | | F |
TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___|
{======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|
./o--000'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'
Es mejor que esté preparado para viajar en el tren, porque está a punto de construir el tren en el que viajará. Dada una cadena s
, genera un tren completamente formado como se muestra arriba. Lo primero que sale siempre es el motor que tirará de su cuerda, como se muestra solo a continuación:
o O O
o
TS__[O]
{======|
./o--000'
Siguiendo la locomotora hay vagones que contienen cada personaje de su preciosa carga. Para evitar confusiones al descargar, su empresa le ha encargado que etiquete el exterior de estos automóviles. Los autos en cuestión siempre se verán así:
___
| # |
|___|
_|"""""|
"`-0-0-'
Donde el #
es representativo del personaje que está dentro de la bodega de "carga". Encadenar el motor a cada automóvil también es parte de su trabajo, ya que le encargaron supervisar la fluidez y el éxito de todo este envío. Entonces, una vez que haya etiquetado todos los autos y tenga el motor en las vías, debe asegurarse de que el tren esté ensamblado y listo para rodar.
Reglas
- La única entrada que su programa debe tomar es una sola cadena.
- El motor siempre debe tener salida, incluso si su envío está vacío.
- Cada automóvil solo puede contener un personaje, no empujes tu suerte, puedes dañar los productos.
- Solo necesita admitir los siguientes caracteres ASCII imprimibles:
_-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
si termina haciendo más, también está bien, pero este es el mínimo. - 1-2 espacios finales son aceptables, como lo es una nueva línea final.
- Este es el ascii-art de código de golf , el menor recuento de bytes gana.
Respuestas:
05AB1E ,
10199 bytesIngenuo primer intento.
Pruébalo en línea!
fuente
JavaScript (ES6),
149144 bytesNo creo que el motor en sí pueda ser comprimido, pero quizás sea posible.
Fragmento de prueba
Mostrar fragmento de código
fuente
Befunge,
276270 bytesPruébalo en línea!
Explicación
El automóvil y el motor están codificados como dos conjuntos de cinco cadenas en las líneas 3 a 12. Los valores de los caracteres están apagados en 1 para evitar tener que lidiar con las comillas dobles que no se pueden usar en una cadena Befunge.
El código funciona al construir el conjunto completo de caracteres necesarios para representar el tren en la pila. Para cada línea de salida, primero se agrega una cadena de automóvil apropiada a la pila, se repite tantas veces como sea necesario para la carga, y luego una copia de la cadena de motor adecuada.
Después de que se haya construido cada línea, un par de flechas hacia abajo a la izquierda de las cuerdas se reemplaza con una flecha hacia la derecha, por lo que la siguiente iteración del bucle sigue una ruta diferente a través del código, usando un par de cuerdas diferentes para el automóvil y motor.
Una vez que todos los datos se han acumulado en la pila, hay un bucle de representación final que escribe los caracteres, restando 1 cada vez para tener en cuenta la codificación inicial.
Como beneficio adicional, la fuente está diseñada en forma de torreta , en caso de que el tren sea atacado.Los golfistas destruyeron mi torreta.fuente
PHP,
218 211 204 187183 bytesToma entrada de STDIN; correr con
-nR
.Comprimir el motor o la carreta requeriría más código para descomprimir de lo que ahorra en almacenamiento.
No veo más potencial aquí.
fuente
a&$c=$argn
en lugar de""<$c=$argv[1]
Python 2, 176 bytes
Ejemplo:
da
fuente
Powershell,
167166bytesEjemplo:
Posiblemente inválido! Si se ejecuta sin ningún argumento, intentará imprimir una cadena vacía y se verá así:
Sin embargo, si se ejecuta con una cadena de entrada vacía, volverá correctamente:
(un poco) Sin golfista:
la compresión más corta en Powershell será
+'c'*x
donde c es el carácter yx es el número de repeticiones, y eso es solo para repeticiones finales o iniciales, cualquier repetición de cadena central requerirá un extra+
y un extra"
, por lo que no tiene sentido en esto donde Puedo ver la compresión ahorrando espacio, y el único conjunto___
de caracteres repetido es el de solo 3 caracteres.Explicación:
$l=($a=$args[0]).Length
Tome el primer argumento, póngalo en $ a, luego tome la longitud de $ a y póngalo en $ l, estas son las únicas variables que necesita." o O O"+" ___ "*$l
la mayoría de los otros bits siguen este formato de la parte izquierda y luego la parte derecha multiplica por el número de caracteres requeridos." o "+([char[]]$a|%{" | $_ |"})
bucle (|%{}
) a través de $ a como una matriz de caracteres,foreach (char $_ in $a)
por lo que para una versión sin canalización, luego coloque el carácter en el texto.Este es un enfoque extremadamente simple, pero debido a que no puedo encontrar una buena manera de comprimir las cadenas más allá de esto, parece ser el más útil.
guardado 1 Byte gracias a briantist! y aquí estaba pensando que esto no se acortaría más ...
fuente
[char[]]$a
a$a[0..$l]
:)$l
y lo olvidé por completo. ¡gracias por eso!Java, 361 bytes
Ejemplo
fuente
interface C{static void main(String[]v){String n="\n",b=" o O O ",c=" o ",d=" TS__[O] ",e=" {======|",f="./o--000'";for(String x:new java.util.Scanner(System.in).nextLine().split("")){b+="___ ";c+="| "+x+" | ";d+="|___| ";e+="_|\"\"\"\"\"|";f+="\"`-0-0-'";}System.out.print(b+n+c+n+d+n+e+n+f);}}
( 318 bytes ) O incluso más si lo reemplazasnew java.util.Scanner(System.in).nextLine()
conv[0]
una entrada alternativa ( 279 bytes ) Pruébalo aquí .Perl, 137 bytes
132 bytes de código + 5 bytes para
-pF
banderas.ascii_train.pl
:Tenga en cuenta que agregué una
-a
marca en el código, pero es solo porque las versiones antiguas de Perl requieren-a
cuándo-F
se usa.Para ejecutarlo:
La entrada debe suministrarse sin una nueva línea final (con,
echo -n
por ejemplo).Explicaciones:
Por lo que he visto, es más o menos la misma idea que la respuesta de JavaScript de ETHProduction.
No están sucediendo muchas cosas: lamentablemente, los patrones son un poco cortos para que
x
valga la pena utilizar al operador.Primero,
s/./ | $& | /g
rodea cada carácter de la entrada con|
(y espacios) para formar el segundo nivel del tren.Luego, dentro de esa larga cadena, todo entre una
!
y una nueva línea es un patrón que deseamos repetir para construir los autos. Esa repetición se hace gracias a la expresión regulars/!(.*)/$1x@F/ge
. (Solía!
porque la entrada no puede contenerlo).fuente
C #, 277 bytes
Golfizado:
Sin golf:
Pruebas:
Y...
fuente
C # 221 bytes
no pasa nada especial aquí ... solo crea cada línea y únelas con nuevas líneas.
fuente
C,
217212208 BytesPruébalo en línea
Salida:
fuente
SOGL V0.12 ,
5756 bytesPruébalo aquí!
Explicación:
fuente
Jq 1.5 , 178 bytes
Expandido
Ejecución de la muestra
Pruébalo en línea
fuente
Excel VBA, 218 bytes
Función de ventana inmediata anónima de VBE que toma la entrada del rango
[A1]
y las salidas a la ventana inmediata de VBEFormateado para facilitar la lectura
Salida de muestra
fuente