Tutti a bordo del treno ASCII

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

Sei il migliore preparati a salire sul treno, perché stai per costruire il treno su cui viaggerai. Data una stringa s, genera un treno completamente formato come illustrato sopra. La prima cosa in uscita è sempre il motore che “trascinerà la tua corda, come illustrato da solo di seguito:

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

A seguire la locomotiva ci sono vagoni ferroviari che contengono ciascuno carattere del tuo prezioso carico. Per evitare confusione durante lo scarico, la tua azienda ti ha incaricato di etichettare lesterno di queste auto. Le auto in questione avranno sempre questo aspetto:

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

Dove # è rappresentativo del carattere che si trova allinterno del ” cargo ” hold. Anche concatenare il motore a ciascuna macchina fa parte del tuo lavoro, poiché ti è stato affidato il compito di supervisionare la fluidità e il successo dellintera spedizione. Quindi, una volta che hai etichettato tutte le carrozze e hai messo il motore sui binari, devi assicurarti che il treno sia assemblato e pronto per partire.

Regole

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

Commenti

  • Vagamente correlato.
  • Non ‘ Non credo che questo sia in realtà kolmogorov-complessità . Bas ed in questo meta post questa domanda è sicuramente sul confine tra adattarsi e non adattarsi alla nostra definizione e personalmente direi che non si adatta al tag simile a questa domanda che richiede anche un tipo di avvolgimento di stringa.
  • Questa è bellissima ascii -art
  • @WheatWizard è ‘ una miscela di più generi. Il motore cadrebbe sotto la complessità di kolmogrov, il tutto sotto ASCII-Art e probabilmente cade anche un po nella manipolazione delle stringhe.
  • Avevo limpressione che sarebbe stato degno di comprimere il modello effettivo del treno del tag; ma ‘ lo rimuoverò semplicemente per interrompere largomento.

Risposta

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!

Commenti

  • Bene, il codice ‘ non assomiglia a un treno, ma ‘ sta vincendo ora.

Risposta

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 credo che il motore stesso possa essere compresso, ma forse è possibile.

Snippet di prova

 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> 

Commenti

  • Molti caratteri ripetuti, dovrebbe essere possibile comprimere altri byte fuori di esso.
  • Si può quasi vedere il treno impacchettato nel codice sorgente 🙂
  • Votato principalmente perché il codice assomiglia a un treno
  • Punti bonus perché funziona direttamente nel browser!

Answer

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

Provalo online!

Spiegazione

Lauto e il motore sono codificati come due serie di cinque stringhe dalle righe da 3 a 12. I valori dei caratteri sono spenti di 1 in modo da evitare di dover gestire le virgolette doppie che non possono essere usate in una stringa Befunge.

Il codice funziona costruendo lintero set di caratteri necessari per rendere il treno su la pila. Per ogni riga di output, viene prima aggiunta alla pila una stringa di automobile appropriata, ripetuta tante volte quanto necessario per il carico, quindi una copia della stringa del motore appropriata.

Dopo che ogni riga è stata costruita, una coppia delle frecce in basso a sinistra delle stringhe viene sostituita con una freccia destra, quindi literazione successiva del ciclo segue un percorso diverso attraverso il codice, usando un diverso coppia di stringhe per lauto e il motore.

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

Come bonus, la sorgente ha la forma di una torretta mitragliatrice , nel caso in cui il treno venga attaccato . I giocatori di golf hanno distrutto la mia torretta mitragliatrice.

Commenti

  • I giocatori di golf hanno distrutto la mia torretta mitragliatrice, LOL. +1. Eppure, ‘ sta battendo C # e Java.

Answer

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 linput da STDIN; eseguito con -nR .

Comprimere il motore o wagon richiederebbe più codice per decomprimersi di quanto ne risparmi in memoria.
Non vedo più potenziale qui.

Commenti

  • a&$c=$argn invece di ""<$c=$argv[1]
  • @J ö rgH ü lsermann Sì, questo post era antico. 🙂

Risposta

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

restituisce

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

Risposta

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

Possibilmente non valido! Se viene eseguito senza argomenti 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 restituirà correttamente tuttavia:

.\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"*x dove c è il carattere ex è il numero di ripetizioni, e questo “è solo per le ripetizioni finali o iniziali, qualsiasi ripetizione della stringa centrale richiederà un + e un " in più, quindi non ha senso vedere la compressione che fa risparmiare spazio e lunico set di caratteri ripetuto è ___ che è di soli 3 caratteri.

Spiegazione:

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

" o O O"+" ___ "*$l la maggior parte delle gli altri bit seguono questo formato di t ha la parte sinistra e poi la 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.

ha salvato 1 Byte grazie a briantist! e qui stavo pensando che questo non sarebbe stato più breve ..

Commenti

  • Non hai ‘ non devo gestire nessun argomento :).
  • @carusocomputing yay, grazie per avermelo informato.
  • Bene! Puoi salvare 1 byte modificando [char[]]$a a $a[0..$l] 🙂
  • ah utilizzava larray char prima di dichiarare $l e me ne sono completamente dimenticato a riguardo. grazie per questo!

Risposta

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

Commenti

  • Lo so ‘ è stato dimezzato un anno, ma puoi golf un po (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 sostituisci new java.util.Scanner(System.in).nextLine() con v[0] come alternativa in put ( 279 byte ) Provalo qui .

Risposta

Perl, 137 byte

132 byte di codice + 5 byte per -pF flag.

ascii_train.pl:

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

Tieni presente che ho aggiunto -a flag nel codice, ma è solo perché le vecchie versioni di Perl richiedono -a quando -F viene utilizzato.

Per eseguirlo:

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

Il linput deve essere fornito senza una nuova riga finale (con echo -n per esempio).

Spiegazioni:
Da quanto ho visto, è più o meno la stessa idea come risposta JavaScript di ETHProduction.
Non cè “molto da fare: purtroppo gli schemi sono un po troppo brevi per rendere loperatore x degno di essere utilizzato.
Innanzitutto, s/./ | $& | /g racchiude ogni carattere dellinput con | (e spazi) per formare il secondo livello del treno.
Quindi allinterno di quello stringa lunga, tutto ciò che si trova tra un ! e una nuova riga è uno schema che desideriamo ripetere per costruire le auto. Questa ripetizione viene eseguita grazie alla regex s/!(.*)/$1x@F/ge. (Ho usato ! perché linput non può “t contenerlo).

Risposta

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 

Risposta

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

Risposta

C # 221 byte

qui non accade nulla di speciale … basta creare ogni riga e unirle con nuove righe.

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

Risposta

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

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

Risposta

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

Espanso

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

Esempio di esecuzione

$ 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

Risposta

Excel VBA, 218 byte

Funzione finestra immediata VBE anonima che riceve input dallintervallo [A1] e gli output nella 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 la 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)]  

Output di esempio

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *