Alla ombord på ASCII-tåget

Alla ombord på ASCII-tåget!

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

Du bäst var beredd att åka tåget, för att du ska bygga tåget du ska åka på. Med en sträng s, mata ut ett helt format tåg enligt bilden ovan. Det första som kommer ut är alltid motorn som ”drar din sträng med, som avbildad ensam nedan:

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

Efter loket följer järnvägsvagnar karaktär av din värdefulla last. För att spara förvirring vid lossning har ditt företag fått i uppgift att märka utsidan av dessa bilar. Bilarna i fråga ser alltid ut så här:

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

Där # är representativt för karaktären som finns inuti ” lasten ” kedja motorn till varje bil är också en del av ditt jobb, eftersom du har fått i uppdrag att övervaka flytningen och framgången för hela denna sändning. När du väl har märkt alla bilar och fått motorn på spåren måste du se till att tåget är monterat och klart att rulla.

Regler

  • endast inmatning som ditt program ska ta är en enda sträng.
  • Motorn måste alltid matas ut, även om din sändning är tom.
  • Varje bil kan bara innehålla ett tecken, inte driva lycka till kan du skada varorna.
  • Du behöver bara stödja följande utskrivbara ASCII-tecken: _-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    Om du slutar göra mer, så ”det är också bra, men det här är det minsta.
  • 1-2 bakre utrymmen är acceptabla, liksom en enda efterföljande ny linje.
  • Detta är , kortast vinnande byteantal.

Kommentarer

  • Vagt relaterat.
  • Jag don ’ tänker inte att detta faktiskt är kolmogorov-komplexitet . Bas ed på det här meta-inlägget den här frågan är verkligen på gränsen mellan att passa och inte passa vår definition och jag skulle personligen säga att den inte passar taggen som liknar den här frågan som också ber om en typ av strängomslag.
  • Det här är vackert ascii -art
  • @WheatWizard it ’ en blandning av flera genrer. Motorn skulle falla under kolmogrov-komplexitet, det hela under ASCII-Art och det faller förmodligen också lite i strängmanipulation.
  • Jag hade intrycket av att komprimera tågets faktiska mönster skulle vara värt av taggen; men jag ’ Jag tar bara bort det för att stoppa argumentet.

Svar

05AB1E , 101 99 byte

Naivt första försök.

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

Prova online!

Kommentarer

  • Tja, koden liknar inte ’ tåg, men den ’ vinner nu.

Svar

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

Jag tror inte att själva motorn kan komprimeras, men kanske är det möjligt.

Testavsnitt

 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> 

Kommentarer

  • Massor av upprepade tecken, det skulle vara möjligt att pressa några fler byte ur det.
  • Man kan nästan se tåget packat i källkoden 🙂
  • Uppröstade främst eftersom koden liknar ett tåg
  • Bonuspoäng eftersom den körs precis där i webbläsaren!

Svar

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

Prova online!

Förklaring

Bilen och motorn är kodade som två uppsättningar med fem strängar på raderna 3 till 12. Teckenvärdena är av med 1 för att undvika att behöva hantera de dubbla citaten som inte kan användas i en Befunge-sträng.

Koden fungerar genom att bygga upp hela uppsättningen tecken som behövs för att göra tåget på stapeln. För varje utmatningsrad läggs först en lämplig bilsträng till stapeln, upprepas så många gånger som krävs för lasten, och sedan en kopia av lämplig motorsträng.

Efter att varje rad har konstruerats ersätts ett par nedpilar till vänster om strängarna med en högerpil, så nästa iteration av slingan följer en annan väg genom koden, med en annan strängpar för bilen och motorn.

När all data har byggts upp på stacken finns det en slutlig återgivningsslinga som skriver ut tecknen och subtraherar 1 varje gång för att ta hänsyn till den ursprungliga kodningen .

Som en bonus är källan utformad i form av ett kanontorn , om tåget skulle attackeras . Golfare förstörde mitt kanontorn.

Kommentarer

  • Golfare förstörde mitt kanontorn, LOL. +1. Ändå ’ slår C # och Java.

Svar

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

Tar inmatning från STDIN; kör med -nR .

Komprimera motorn eller vagn skulle kräva mer kod för att dekomprimera än det sparar vid lagring.
Jag ser ingen mer potential här.

Kommentarer

  • a&$c=$argn istället för ""<$c=$argv[1]
  • @J ö rgH ü lsermann Ja det här inlägget var gammalt. 🙂

Svar

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

Exempel:

print f("Python") 

ger

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

Svar

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 

Exempel:

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

Eventuellt ogiltigt! Om du kör utan args alls kommer det att försöka skriva ut en tom sträng och se ut som:

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

Om du kör med en tom inmatningssträng kommer den att returneras korrekt dock:

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

kortaste komprimering i Powershell är kommer att vara +"c"*x där c är char och x är antalet repetitioner, och det är bara för efterföljande eller ledande repetitioner, alla center-string repetitioner kräver en extra + och en extra " – så det finns ingen punkt i detta där jag kan se komprimering spara utrymme, och det enda upprepade teckenet är ___ som bara är tre tecken.

Förklaring:

$l=($a=$args[0]).Length Ta den första arg , sätt det i $ a, ta sedan längden på $ a och sätt det i $ l, det här är de enda variablerna du behöver.

" o O O"+" ___ "*$l det mesta av de andra bitarna följer detta format av t han vänster del och sedan höger del gånger antalet erforderliga tecken.

" o "+([char[]]$a|%{" | $_ |"}) loop (|%{}) genom $ a som en char-array, så foreach (char $_ in $a) för en version som inte är pipeline, lägg sedan in char i texten.

Detta är en extremt enkel metod, men eftersom jag inte kan hitta ett bra sätt att komprimera strängarna förbi detta verkar det som det mest användbara.

sparad 1 byte tack till briantist! och här tänkte jag att det inte skulle bli kortare.

Kommentarer

  • Du gjorde inte ’ t måste hantera inga args :).
  • @carusocomputing yay, tack för att du meddelade mig.
  • Trevligt! Du kan spara 1 byte genom att ändra [char[]]$a till $a[0..$l] 🙂
  • Ah använde char array innan jag förklarade $l och glömde helt om det. tack för det!

Svar

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

Exempel

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

Kommentarer

  • Jag vet att det ’ har halverats ett år, men du kan golf ganska mycket (även genom att ta bort mellanslag): 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 ) Eller ännu mer om du ersätter new java.util.Scanner(System.in).nextLine() med v[0] som alternativ i put ( 279 byte ) Prova det här .

Svar

Perl, 137 byte

132 byte kod + 5 byte för -pF flaggor.

ascii_train.pl:

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

Observera att jag lade till -a flagga i koden, men det är bara för att gamla versioner av Perl kräver -a -F används.

För att köra den:

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

ingången måste tillhandahållas utan en slutlig ny rad (t.ex. med echo -n).

Förklaringar:
Från vad jag har sett är det ungefär samma idé som JavaScript-svar från ETHProduction.
Det händer inte mycket: tyvärr är mönstren lite för korta för att göra x operatör värt att användas.
Först, s/./ | $& | /g omger varje tecken på ingången med | (och mellanslag) för att bilda tågets andra nivå.
Sedan inuti lång sträng, allt mellan en ! och en ny linje är ett mönster som vi vill upprepa för att konstruera bilarna. Den repetitionen görs tack vare regex s/!(.*)/$1x@F/ge. (Jag använde ! eftersom ingången inte kan innehålla den.

Svar

SOGL V0.12 , 57 56 byte

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

Prova det här!

Förklaring:

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

Svar

C #, 277 byte

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

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

Testning:

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

Och …

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

Svar

C # 221 byte

inget särskilt händer här .. bara skapa varje rad och gå med dem med nya rader.

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

Svar

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

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

Svar

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

Utökat

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

Provkörning

$ 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 

Prova online

Svar

Excel VBA, 218 byte

Anonym VBE-omedelbar fönsterfunktion som tar inmatning från intervall [A1] och utdata till VBE: s omedelbara fönster

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

Formaterad för läsbarhet

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

Exempel på utdata

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *