Tutti a bordo del treno ASCII


45

Tutti a bordo del treno 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-'

È meglio essere pronti a salire sul treno, perché stai per costruire il treno sul quale viaggerai. Data una stringa s, emette un treno completamente formato come illustrato sopra. La prima cosa in uscita è sempre il motore che trascinerà la stringa, come illustrato di seguito:

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

A seguire la locomotiva ci sono vagoni ferroviari contenenti ogni personaggio del tuo prezioso carico. Per evitare confusione durante lo scarico, la tua azienda ti ha incaricato di etichettare l'esterno di queste auto. Le auto in questione saranno sempre così:

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

Dove #è rappresentativo del personaggio che si trova nella stiva "cargo". Anche concatenare il motore ad ogni auto fa parte del tuo lavoro, poiché ti è stato affidato il compito di supervisionare la fluidità e il successo dell'intera spedizione. Quindi, una volta che hai etichettato tutte le auto e ottenuto il motore sui binari, devi assicurarti che il treno sia assemblato e pronto a partire.

Regole

  • L'unico input che il tuo programma dovrebbe prendere è una singola stringa.
  • Il motore deve essere sempre prodotto, anche se la spedizione è vuota.
  • Ogni auto può contenere solo un personaggio, non sfidare la fortuna, potresti danneggiare la merce.
  • Devi solo supportare i seguenti caratteri ASCII stampabili: _-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    Se finisci per fare di più, va bene lo stesso, ma questo è il minimo indispensabile.
  • Sono accettabili 1-2 spazi finali, così come una singola riga finale.
  • Questo è , il conteggio dei byte più breve vince.


1
Non penso che questa sia in realtà una complessità kolmogorov . Sulla base di questo meta-post, questa domanda è certamente sulla linea tra adattamento e non adattamento della nostra definizione e direi personalmente che non si adatta al tag simile a questa domanda che richiede anche un tipo di avvolgimento di stringhe.
Wheat Wizard

5
Questa è bellissima arte ascii
CAD97

@WheatWizard è una miscela di più generi. Il motore cadrebbe sotto la complessità di kolmogrov, tutto sotto ASCII-Art e probabilmente cadrà anche un po 'nella manipolazione delle stringhe.
Magic Octopus Urn

Avevo l'impressione che comprimere il modello reale del treno sarebbe degno del tag; ma lo rimuoverò per interrompere l'argomento.
Magic Octopus Urn

Risposte:


4

05AB1E , 101 99 byte

Primo tentativo ingenuo.

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

Provalo online!


Bene, il codice non assomiglia a un treno, ma sta vincendo ora.
Magic Octopus Urn

37

JavaScript (ES6), 149 144 byte

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

Non penso che il motore stesso possa essere compresso, ma forse è possibile.

Test snippet


Un sacco di personaggi ripetuti, dovrebbe essere possibile spremere qualche byte in più da esso.
Orione,

17
Si può quasi vedere il treno impacchettato nel codice sorgente :-)
Luis Mendo il

15
Votato principalmente perché il codice ricorda un treno
Rohan Jhunjhunwala il

Punti bonus perché si trova proprio lì nel browser!
DGM

6

Befunge, 276 270 byte

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_@>$$$$>,#

Provalo online!

Spiegazione

L'auto e il motore sono codificati come due serie di cinque stringhe nelle righe da 3 a 12. I valori dei caratteri sono disattivati ​​di 1 in modo da evitare di dover gestire le doppie virgolette che non possono essere utilizzate in una stringa di Befunge.

Il codice funziona creando l'intero set di caratteri necessari per rendere il treno in pila. Per ogni linea di uscita, una pila di auto appropriata viene prima aggiunta alla pila, ripetuta tutte le volte necessarie per il carico, quindi una copia della stringa di motore appropriata.

Dopo che ogni riga è stata costruita, una coppia di frecce giù a sinistra delle stringhe viene sostituita con una freccia destra, quindi la successiva iterazione del ciclo segue un percorso diverso attraverso il codice, usando una diversa coppia di stringhe per l'auto e motore.

Una volta che tutti i dati sono stati compilati nello stack, c'è un ciclo di rendering finale che scrive i caratteri, sottraendo 1 ogni volta per tenere conto della codifica iniziale.

Come bonus, la fonte è progettata a forma di torretta , nel caso in cui il treno venga attaccato. I golfisti hanno distrutto la mia torretta.


I golfisti hanno distrutto la mia torretta, LOL. +1. Eppure, sta battendo C # e Java.
Zacharý,

6

PHP, 218 211 204 187 183 byte

    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];

Riceve input da STDIN; corri con -nR.

La compressione del motore o del vagone richiederebbe più codice per decomprimere di quanto risparmi in memoria.
Non vedo più potenziale qui.


a&$c=$argn invece di""<$c=$argv[1]
Jörg Hülsermann,

@ JörgHülsermann Sì, questo post era antico. :)
Tito

4

Python 2, 176 byte

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

Esempio:

print f('Python')

    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-'

4

Powershell, 167 166 byte

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

Esempio:

.\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-'

Forse non valido! Se eseguito senza args, proverà a stampare una stringa vuota e avrà il seguente aspetto:

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

Se eseguito con una stringa di input vuota, verrà comunque restituito correttamente:

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

(kinda) Ungolfed:

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

la compressione più breve in Powershell sarà +'c'*xdove c è il carattere e x è il numero di ripetizioni, e questo è solo per le ripetizioni finali o iniziali, qualsiasi ripetizione della stringa centrale richiederà un extra +e un extra "- quindi non ha senso in questo dove Riesco a vedere la compressione che risparmia spazio e l'unico set di caratteri ripetuti ___è solo 3 caratteri.

Spiegazione:

$l=($a=$args[0]).Length Prendi il primo argomento, mettilo in $ a, quindi prendi la lunghezza di $ a e mettilo in $ l, queste sono le uniche variabili di cui hai bisogno.

" o O O"+" ___ "*$l la maggior parte degli altri bit segue questo formato della parte sinistra e quindi della parte destra per il numero di caratteri richiesti.

" o "+([char[]]$a|%{" | $_ |"})loop ( |%{}) attraverso $ a come array di caratteri, quindi foreach (char $_ in $a)per una versione non pipeline, quindi inserisci il carattere nel testo.

questo è un approccio estremamente semplice, ma poiché non riesco a trovare un buon modo per comprimere le stringhe oltre questo sembra il più utile.

salvato 1 byte grazie a briantist! e qui stavo pensando che questo non si sarebbe ridotto.


Non hai dovuto gestire nessun argomento :).
Magic Octopus Urn

@carusocomputing yay, grazie per avermelo fatto notare.
Colsw,

Bello! Puoi salvare 1 byte cambiando [char[]]$ain $a[0..$l] :)
briantist il

ah stava usando char array prima di dichiararlo $le me ne sono completamente dimenticato. grazie per quello!
Colsw,

2

Java, 361 byte

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);

    }
}

Esempio

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

1
So che è stato dimezzato un anno, ma puoi giocare a golf abbastanza (anche rimuovendo gli spazi): 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 byte ) o anche di più se lo sostituisci new java.util.Scanner(System.in).nextLine()con v[0]un input alternativo ( 279 byte ) Provalo qui .
Kevin Cruijssen,

2

Perl, 137 byte

132 byte di codice + 5 byte per -pFflag.

ascii_train.pl:

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

Nota che ho aggiunto il -aflag nel codice, ma è solo perché le vecchie versioni di Perl richiedono -aquando -Fviene utilizzato.

Per eseguirlo:

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

L'input deve essere fornito senza una nuova riga finale ( echo -nad esempio).

Spiegazioni:
da quello che ho visto, è più o meno la stessa idea della risposta JavaScript di ETHProduction.
Non c'è molto da fare: purtroppo gli schemi sono un po 'troppo corti per rendere l' xoperatore degno di essere utilizzato.
Innanzitutto, s/./ | $& | /gcirconda ogni carattere dell'ingresso con |(e spazi) per formare il secondo livello del treno.
Quindi all'interno di quella lunga stringa, tutto tra una !e una nuova riga è un modello che vogliamo ripetere per costruire le macchine. Quella ripetizione è fatta grazie alla regex s/!(.*)/$1x@F/ge. (L'ho usato !perché l'input non può contenerlo).


1

C #, 277 byte

golfed:

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);

Ungolfed:

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);
}

test:

Console.Write(new AllAboardTheASCIITrain().T(""));

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

E...

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-'

1

C # 221 byte

non sta succedendo nulla di speciale qui ... basta creare ogni linea e unirle con nuove linee.

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);};

1

C, 217 212 208 byte

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("");}}

Provalo online

Produzione:

    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-'

1

SOGL V0.12 , 57 56 byte

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

Provalo qui!

Spiegazione:

..‘             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

1

Jq 1,5 , 178 byte

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

allargato

# 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)[]

Esecuzione del campione

$ 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

Provalo online


0

Excel VBA, 218 byte

Funzione di finestra immediata VBE anonima che accetta input dalla gamma [A1]e output alla finestra immediata 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)]

Formattato per leggibilità

[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)]

Uscita campione

    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-'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.