Todos a bordo del tren ASCII

¡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-" 

Lo mejor prepárese para viajar en tren, porque está a punto de construir el tren en el que viajará. Dada una cadena s, genere un tren completamente formado como se muestra arriba. La primera salida es siempre el motor que arrastrará la cuerda, como se muestra solo a continuación:

 o O O o TS__[O] {======| ./o--000" 

Detrás de la locomotora hay vagones que contienen cada carácter de su preciosa carga. Para evitar confusiones al descargar, su empresa le ha encomendado etiquetar el exterior de estos coches. Los coches en cuestión siempre se verán así:

 ___ | # | |___| _|"""""| "`-0-0-" 

Donde # es representativo del carácter que está dentro del » cargo » hold. Encadenar el motor a cada automóvil también es parte de su trabajo, ya que se le ha asignado la tarea de supervisar la fluidez y el éxito de todo este envío. Por lo tanto, una vez que haya etiquetado todos los vagones y tenga el motor en las vías, debe asegurarse de que el tren esté ensamblado y listo para rodar.

Reglas

  • Las la única entrada que debe tomar su programa 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 carácter, no Si tiene suerte, puede dañar los productos.
  • Solo necesita admitir los siguientes caracteres ASCII imprimibles: _-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    Si termina haciendo más, eso «también está bien, pero esto es lo mínimo.
  • Se aceptan entre 1 y 2 espacios finales, al igual que una sola línea nueva al final.
  • Esto es , gana el recuento de bytes más corto.

Comentarios

  • Vagamente relacionado.
  • No ‘ No creo que esto sea en realidad kolmogorov-complejidad . Bas ed en esta meta publicación , esta pregunta ciertamente está en la línea entre encajar y no encajar en nuestra definición y personalmente diría que no encaja en la etiqueta similar a esta pregunta que también solicita un tipo de envoltura de cadena.
  • Esto es hermoso ascii -art
  • @WheatWizard es ‘ una mezcla de varios géneros. El motor caería bajo la complejidad de kolmogrov, todo bajo ASCII-Art y probablemente también caiga un poco en la manipulación de cadenas.
  • Tenía la impresión de que valdría la pena comprimir el patrón real del tren. de la etiqueta; pero ‘ simplemente lo eliminaré para detener el argumento.

Responder

05AB1E , 101 99 bytes

Primer intento ingenuo.

" o O O o"ð7×"TS__[O] {======|./o--000""J5ä¹v… _ €ÐJy“ | ÿ | |___| _|"""""|"`-0-0-"“«5ä})øJ» 

¡Pruébelo en línea!

Comentarios

  • Bueno, el código no ‘ no se parece a un tren, pero ‘ está ganando ahora.

Respuesta

JavaScript (ES6), 149 144 bytes

s=>` o O Oa ___ o a | $& | TS__[O]a |___| {======|a_|"""""| ./o--000"a"\`-0-0-"`.replace(/a(.*)/g,(_,c)=>s.replace(/./g,c)) 

No creo que el motor en sí se pueda comprimir, pero tal vez sea posible.

Fragmento de prueba

 let f = s=>` o O Oa ___ o a | $& | TS__[O]a |___| {======|a_|"""""| ./o--000"a"\`-0-0-"`.replace(/a(.*)/g,(_,c)=>s.replace(/./g,c)) O.innerHTML = f("CODE GOLF") 
 <input value="CODE GOLF" oninput="O.innerHTML=f(this.value.replace(/\n/g,"&lt;br&gt;"))"><br> <pre id=O></pre> 

Comentarios

  • Muchos caracteres repetidos, debería ser posible exprimir algunos bytes más
  • Casi se puede ver el tren empaquetado en el código fuente 🙂
  • Upvoted principalmente porque el código se parece a un tren
  • Puntos de bonificación porque ¡se ejecuta allí mismo en el navegador!

Respuesta

Befunge, 276 270 bytes

p1p~:7>7+#:`#~_$:v >#p0p10:p00:+1g00_v#: v"!!```!!!"v>0p01g\-0g1+53p v"!}!#!}!!"v0 p115< v"!}```}!!"v^:-1< v"}#####}`">00g:| >"(.1.1.a#"^+<v1< v"P!P!p!!! "v5>g00p v"!!!!!p!!!"v6 v"^P\``TU!!"vp v"}>>>>>>|!"v+ >"(111..p0/"v6 v-1:g110">>"<g >:11p!#v_p011^ #-:#1_@>$$$$>,# 

Pruébelo 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 desactivados en 1 para evitar tener que lidiar con las comillas dobles que no se pueden usar en una cadena Befunge.

El código funciona construyendo el conjunto completo de caracteres necesarios para renderizar el tren en la pila. Para cada línea de salida, primero se agrega una cadena de vagones apropiada a la pila, se repite tantas veces como sea necesario para la carga, y luego una copia de la cadena de motor apropiada.

Después de que se ha construido cada línea, un par de flechas hacia abajo a la izquierda de las cadenas 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, utilizando una par de cadenas para el automóvil y el motor.

Una vez que todos los datos se han acumulado en la pila, hay un ciclo de renderizado final que escribe los caracteres, restando 1 cada vez para dar cuenta de la codificación inicial .

Como beneficio adicional, la fuente está diseñada en forma de una torreta , en caso de que el tren sea atacado . Los golfistas destruyeron mi torreta de armas.

Comentarios

  • Los golfistas destruyeron mi torreta de armas, LOL. +1. Sin embargo, ‘ s superando a C # y Java.

Respuesta

PHP, 218 211 204 187 183 bytes

 o O O<?for(;$y<5;print"\n".[" o "," TS__[O]"," {======|","./o--000""][+$y++])for($p=0;$c=a&$argn[$p++];)echo[" ___ "," | $c | "," |___| ","_|"""""|","\"`-0-0-""][+$y]; 

Toma la entrada de STDIN; se ejecuta con -nR .

Comprimir el motor o Wagon requeriría más código para descomprimir del que ahorra en almacenamiento.
No veo más potencial aquí.

Comentarios

  • a&$c=$argn en lugar de ""<$c=$argv[1]
  • @J ö rgH ü lsermann Sí, esta publicación era antigua. 🙂

Respuesta

Python 2, 176 bytes

 lambda i:"\n".join(map("".join,zip(*[[" o O O"," o "," TS__[O]"," {======|","./o--000""]]+[[" ___ "," | "+x+" | "," |___| ","_|"""""|","\"`-0-0-""]for x in i])))  

Ejemplo:

print f("Python") 

da

 o O O ___ ___ ___ ___ ___ ___ o | P | | y | | t | | h | | o | | n | TS__[O] |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-" 

Respuesta

Powershell, 167 166 Bytes

$l=($a=$args[0]).Length;" o O O"+" ___ "*$l;" o "+($a[0..$l]|%{" | $_ |"});" TS__[O]"+" |___| "*$l;" {======|"+"_|"""""|"*$l;"./o--000""+""`-0-0-"""*$l 

Ejemplo:

.\train.ps1 "PowerShell!" o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ o | P | | o | | w | | e | | r | | S | | h | | e | | l | | l | | ! | TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-" 

¡Posiblemente no válido! Si se ejecuta sin ningún argumento, intentará imprimir una cadena vacía y se verá así:

 o O O o | | TS__[O] {======| ./o--000" 

Si se ejecuta con una cadena de entrada vacía, volverá correctamente. sin embargo:

.\train.ps1 "" o O O o TS__[O] {======| ./o--000" 

(un poco) Sin golf:

$l=($a=$args[0]).Length " o O O"+" ___ "*$l " o "+($a[0..$l]|%{" | $_ |"}) " TS__[O]"+" |___| "*$l " {======|"+"_|"""""|"*$l "./o--000""+""`-0-0-"""*$l 

la compresión más corta en Powershell es va a ser +"c"*x donde c es el carácter y x es el número de repeticiones, y eso «s solo para las repeticiones finales o iniciales, cualquier repetición de la cadena central requerirá un + y un " adicional – así que no hay ningún punto en esto donde pueda ver que la compresión ahorra espacio, y el único conjunto de caracteres repetidos es ___ que tiene solo 3 caracteres.

Explicación:

$l=($a=$args[0]).Length Toma el primer argumento , ponlo en $ a, luego toma la longitud de $ a y ponlo en $ l, estas son las únicas variables que necesitas.

" o O O"+" ___ "*$l la mayoría de los otros bits siguen este formato de t la parte izquierda y luego la parte derecha multiplicada por el número de caracteres requeridos.

" o "+([char[]]$a|%{" | $_ |"}) loop (|%{}) a través de $ a como una matriz de caracteres, por lo que foreach (char $_ in $a) para una versión sin canalización, luego coloque el carácter en el texto.

Este es un enfoque extremadamente simple, pero como no puedo encontrar una buena forma de comprimir las cadenas más allá de esto, parece la más útil.

¡Ahorré 1 Byte gracias a briantist! y aquí estaba pensando que esto no sería más corto ..

Comentarios

  • No ‘ No tengo que manejar argumentos :).
  • @carusocomputing yay, gracias por hacérmelo saber.
  • ¡Genial! Puede guardar 1 byte cambiando [char[]]$a a $a[0..$l] 🙂
  • Ah estaba usando la matriz char antes de declarar $l y lo olvidé por completo ¡Gracias por eso!

Respuesta

Java, 361 bytes

class C {static void main(String[]v){Scanner q = new Scanner(System.in);String i = q.nextLine();String[] t = {" o O O ", " o ", " TS__[O] ", " {======|", "./o--000"",};for (char c: i.toCharArray()) {t[0]+="___ ";t[1]+="| # | ".replace("#",c);t[2]+="|___| ";t[3]+="_|\"\"\"\"\"|";t[4]+="\"`-0-0-"";}for(String p:t) System.out.println(p);}} 
 class C { static void main(String[]v) { Scanner q = new Scanner(System.in); String i = q.nextLine(); String[] t = { " o O O ", " o ", " TS__[O] ", " {======|", "./o--000"", }; for (char c: i.toCharArray()) { t[0]+="___ "; t[1]+="| # | ".replace("#",c); t[2]+="|___| "; t[3]+="_|\"\"\"\"\"|"; t[4]+="\"`-0-0-""; } for(String p:t) System.out.println(p); } }  

Ejemplo

java o O O ___ ___ ___ ___ o | j | | a | | v | | a | TS__[O] |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-" 

Comentarios

  • Sé que ‘ se ha reducido a la mitad de un año, pero puedes golf bastante (también eliminando espacios): 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 reemplaza new java.util.Scanner(System.in).nextLine() con v[0] como alternativa en put ( 279 bytes ) Pruébelo aquí .

Respuesta

Perl, 137 bytes

132 bytes de código + 5 bytes para -pF indicadores.

ascii_train.pl:

 #!/usr/bin/perl -apF s/./ | $& | /g;$_=" o O O! ___ o $_ TS__[0]! |___| {======|!"."_|"""""|"." ./o--000"!\"`-0-0-"";s/!(.*)/$1x@F/ge  

Tenga en cuenta que agregué la marca -a en el código, pero «es solo porque las versiones anteriores de Perl requieren -a cuando -F se utiliza.

Para ejecutarlo:

echo -n "code-golf" | perl ascii_train.pl 

El la entrada debe proporcionarse 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 como la respuesta de JavaScript de ETHProduction.
No hay mucho que hacer: lamentablemente, los patrones son demasiado cortos para que valga la pena utilizar el operador x.
Primero, s/./ | $& | /g rodea cada carácter de la entrada con | (y espacios) para formar el segundo nivel del tren.
Luego, dentro de eso cadena larga, todo entre un ! y una nueva línea es un patrón que deseamos repetir para construir los coches. Esa repetición se realiza gracias a la expresión regular s/!(.*)/$1x@F/ge. (Usé ! porque la entrada «no puede contenerlo).

Respuesta

SOGL V0.12 , 57 56 bytes

Τ¡ā↓mΛC┌─⁵℮Ƨ⅛□→(š;∞⅟¹°⅔Ζ‽ζ÷⁴‘9n,{"s=Ο!NθæιžGš‼t╬¼Xg`‘8n┼ 

Pruébelo aquí

Explicación:

..‘ push a compressed string of the locomotive in a single line 9n split in line lengths of 9 ,{ for each character in the input "..‘ push a compressed string of a wagon in a single line 8n split to line lengths of 8 ┼ add horizontally 

Respuesta

C #, 277 Bytes

Golf:

string T(string s){var o=new string[]{" o O O"," o "," TS__[O]"," {======|","./ o--000"" };for(int i=0;i<s.Length;i++){o[0]+=" ___ ";o[1]+="| # | ".Replace("#",s[i]+"");o[2]+=" |___| ";o[3]+="_|\"\"\"\"\"|";o[4]+="\"`-0-0-"";}return string.Join("\r\n",o); 

Sin golf:

public string T(string s) { var o = new string[] { " o O O", " o ", " TS__[O]", " {======|", "./ o--000"" }; for (int i = 0; i < s.Length; i++) { o[0] += " ___ "; o[1] += "| # | ".Replace("#", s[i] + ""); o[2] += " |___| "; o[3] += "_|\"\"\"\"\"|"; o[4] += "\"`-0-0-""; } return string.Join("\r\n", o); } 

Pruebas:

Console.Write(new AllAboardTheASCIITrain().T("")); o O O o TS__[O] {======| ./ o--000" 

Y …

Console.Write(new AllAboardTheASCIITrain().T("Programming Puzzles & Code Golf")); o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ o | P | | r | | o | | g | | r | | a | | m | | m | | i | | n | | g | | | | P | | u | | z | | z | | l | | e | | s | | | | & | | | | 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-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-" 

Responder

C # 221 bytes

aquí no pasa nada especial … solo crea cada línea y únelas con nuevas líneas.

 s=>{var t=new[]{" o O O"," o "," TS__[O]"," {======|","./o--000""};foreach(var c in s){t[0]+=" ___ ";t[1]+=$" | {c} | ";t[2]+=" |___| ";t[3]+="_|\"\"\"\"\"|";t[4]+="\"`-0-0-"";}return string.Join("\n",t);};  

Respuesta

C, 217 212 208 bytes

i;f(char*t){char d[]=" o O O o TS__[O] {======|./o--000" ___ | C | |___| _|\"\"\"\"\"|\"`-0-0-"",*p;for(;i<5;i++){printf("%.9s",d+i*9);for(p=t;d[57]=*p++;)printf("%.8s",d+45+i*8);puts("");}} 

Pruébelo en línea

Ou tput:

 o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ o | C | | O | | D | | E | | | | G | | O | | L | | F | | | | I | | N | | | | C | TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-" 

Responder

Jq 1.5 , 178 bytes

[[" o O O o TS__[O] {======|./o--000""|_nwise(9)]]+[range(length)as$i|[.[$i:$i+1]|" ___ | \(.) | |___| _|\"\"\"\"\"|\"`-0-0-""|_nwise(8)]]|transpose|map(add)[] 

Ampliado

# engine def E:" o O O o TS__[O] {======|./o--000""|_nwise(9); # car (note string interpolation) def C:" ___ | \(.) | |___| _|\"\"\"\"\"|\"`-0-0-""|_nwise(8); # generate train [[E]] + [range(length) as $i| [.[$i:$i+1] |C]] # combine rows and concatenate strings | transpose | map(add)[] 

Ejecución de muestra

$ jq -MRr train.jq <<< "golf" o O O ___ ___ ___ ___ o | g | | o | | l | | f | TS__[O] |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-" $ wc -c < train.jq 178 

Pruébelo en línea

Respuesta

Excel VBA, 218 Bytes

Función de ventana inmediata de VBE anónimo que toma la entrada del rango [A1] y se envía a la ventana inmediata de VBE

 [B1]=[Len(A1)]:?" o O O"[Rept(" ___ ",B1)]:?" o ";:For i=1To[B1]:?" | "Mid([A1],i,1)" | ";:Next:?:?" TS__[O]"[Rept(" |___| ",B1)]:?" {======|"[Rept("_|""""""""""|",B1)]:?"./o--000""[Rept("""`-0-0-"",B1)]  

Formateado para legibilidad

 [B1]=[Len(A1)] ?" o O O"[Rept(" ___ ",B1)] ?" o ";:For i=1To[B1]:?" | "Mid([A1],i,1)" | ";:Next:?: ?" TS__[O]"[Rept(" |___| ",B1)]: ?" {======|"[Rept("_|""""""""""|",B1)]: ?"./o--000""[Rept("""`-0-0-"",B1)]  

Salida de muestra

  o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ o | V | | B | | A | | | | E | | x | | p | | r | | e | | s | | s | TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"  

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *