Az ASCII vonat fedélzetén

Minden az ASCII vonaton!

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

Ön a legjobb készüljön fel arra, hogy vonattal közlekedjen, mert építeni készül a vonat, amelyen közlekedni fog. Adott karakterlánc s, adjon ki egy teljesen kialakított vonatot a fentiek szerint. Az első dolog mindig az a motor, amely “a húrt húzza végig, ahogy az alábbiakban egyedül ábrázoljuk:

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

A mozdonyt követik a vasúti kocsik, amelyek mindegyikét tartalmazzák értékes rakományának jellege. A kirakodás során fellépő zavartság elkerülése érdekében cége megbízást adott ezeknek az autóknak a külső feliratozására. A kérdéses autók mindig így fognak kinézni:

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

Ahol az # reprezentálja azt a karaktert, amely a ” cargo ” hold. A motor láncolása az egyes autókhoz szintén a munkájának része, mivel feladata volt, hogy felügyelje az egész szállítmány folyékonyságát és sikerét. Tehát, miután felcímkézte az összes kocsit, és a motort a vágányokra helyezte, meg kell győződnie arról, hogy a vonat össze van állítva és készen áll a gurulásra.

Szabályok

  • a programnak csak egy karakterláncot kell bevinnie.
  • A motort mindig ki kell adni, még akkor is, ha a szállítmánya üres.
  • Minden autó csak egy karaktert tartalmazhat, ne “” nyomja meg a szerencsét, így károsíthatja az árut.
  • Csak a következő nyomtatható ASCII karaktereket kell támogatnia: _-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    Ha végül többet csinál, akkor “rendben is van, de ez a minimum.
  • 1-2 záró szóköz elfogadható, csakúgy, mint egyetlen új sor.
  • Ez , a legrövidebb bájtok száma nyer.

Megjegyzések

  • Homályosan kapcsolódik.
  • Nem ‘ nem gondolja, hogy ez valójában kolmogorov-összetettség . szerkesztette ezt a meta bejegyzést , ez a kérdés minden bizonnyal a definíciónk illesztése és nem illesztése közötti határvonalon áll, és személy szerint azt mondanám, hogy nem illik a ez a kérdés , amely egyfajta karakterlánc-csomagolást is kér.
  • Ez gyönyörű ascii -art
  • @WheatWizard ‘ több műfaj keveréke. A motor összetettsége háromogrov, az egész az ASCII-Art alá tartozik, és valószínűleg egy kicsit a húr manipulációjába is esik.
  • Az volt a benyomásom, hogy a vonat tényleges mintájának tömörítése érdemes lenne a címke; de ‘ csak eltávolítom az érvelés leállításához.

Válasz

05AB1E , 101 99 bájt

Első naiv próbálkozás.

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

Próbálja ki online!

Megjegyzések

  • Nos, a kód nem ‘ nem hasonlít egy vonatra, de ‘ most nyer.

Válasz

JavaScript (ES6), 149 144 bájt

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

Nem hinném, hogy maga a motor tömöríthető, de talán lehetséges.

Tesztkód

 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> 

Megjegyzések

  • Rengeteg ismételt karaktert kell lehetővé tenni még néhány bájt összenyomására belőle.
  • Szinte láthatja, hogy a vonat a forráskódba van-e csomagolva 🙂
  • A felértékeltek elsősorban azért, mert a kód vonatra hasonlít
  • Bónuszpontok, mert éppen ott fut a böngészőben!

Válasz

Befunge, 276 270 bájt

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

Próbálja ki online!

Magyarázat

Az autó és a motor öt karakterlánc két halmazaként van kódolva a 3–12. sorokban. 1-vel vannak kikapcsolva, hogy ne kelljen foglalkozni a dupla idézőjelekkel, amelyek nem használhatók a Befunge karaktersorozatban.

A kód a teljes karakterkészlet felépítésével működik, amely szükséges a vonat továbbadásához a verem. Az egyes kimeneti sorokhoz először hozzáadunk egy megfelelő autós karakterláncot a veremhez, amelyet annyiszor ismételünk, amennyi a rakományhoz szükséges, majd a megfelelő motor-karakterlánc egy példányát.

Az egyes sorok összeállítása után a karakterláncok bal oldalán található lefelé mutató nyíl párját jobbra nyílra cseréljük, így a ciklus következő iterációja más utat követ a kódon keresztül, egy másik felhasználásával. pár karakterlánc az autóhoz és a motorhoz.

Miután az összes adatot felépítettük a veremre, megjelenik egy utolsó renderelési ciklus, amely kiírja a karaktereket, és minden alkalommal kivon egy-egy számot a kezdeti kódolás elszámolásához. .

Bónuszként a forrást lövegtorony alakban tervezik meg, arra az esetre, ha a vonatot támadás érné . A golfozók elpusztították a fegyvertornyomat.

Megjegyzések

  • A golfozók elpusztították a fegyvertornyomat, a LOL. +1. Mégis, ‘ s a C # és a Java legyőzésével.

Válasz

PHP, 218 211 204 187 183 bájt

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

Bevitelt vesz az STDIN-ből; futtassa a -nR .

A motor összenyomása ill a kocsihoz több kódra lenne szükség a kibontáshoz, mint amennyit a tárhelyre spórol.
Itt nem látok több lehetőséget.

Megjegyzések

  • a&$c=$argn ""<$c=$argv[1]
  • @J ö rgH lsermann Igen, ez a bejegyzés ősi volt. 🙂

Válasz

Python 2, 176 bájt

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

Példa:

print f("Python") 

ad

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

Válasz

Powershell, 167 166 bájt

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

Példa:

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

Esetleg érvénytelen! Ha egyáltalán nem fut argg nélkül, akkor megpróbál kinyomtatni egy üres karakterláncot, és így néz ki:

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

Ha üres bemeneti karakterlánccal futtatod, akkor helyesen tér vissza azonban:

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

a Powershell legrövidebb tömörítése +"c"*x lesz ahol c az char és x az ismétlések száma, és hogy “csak az ismétlések utólagos vagy vezetõs részéhez, minden középső karakterlánc ismétléshez extra + és egy extra " – tehát ennek nincs értelme, ha látom, hogy a tömörítés helyet takarít meg, és az egyetlen megismételt karakterkészlet: ___, amely csak 3 karakter.

Magyarázat:

$l=($a=$args[0]).Length Vegyük az első argumentumot , tedd be a $ a-ba, majd vegye be a $ a hosszát és tegye be $ l-be, ezekre az egyetlen változókra van szükséged.

" o O O"+" ___ "*$l a többi bit ezt a t formátumot követi a bal, majd a jobb rész szorozza meg a szükséges karakterek számát.

" o "+([char[]]$a|%{" | $_ |"}) hurok (|%{}) a $ a-n keresztül, mint char tömb, tehát foreach (char $_ in $a) egy nem folyamatban lévő verzió esetén, majd tegye a karaktert a szövegbe.

ez rendkívül egyszerű megközelítés, de mivel nem találok jó módot a húrok tömörítésére ezen túl, ez tűnik a leghasznosabbnak.

1 bájtot mentett a briantistnak köszönhetően! és itt arra gondoltam, hogy ez nem lesz rövidebb.

Hozzászólások

  • Nem ‘ Nem kell kezelnöm egyetlen argumot :).
  • @carusocomputing, köszönöm, hogy tudtára adtál.
  • Szép! 1 bájtot megtakaríthat a – $a[0..$l] 🙂 –
  • ah char tömböt használt, mielőtt kijelentettem volna, hogy $l, és teljesen elfelejtettem köszönöm!

Válasz

Java, 361 bájt

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

Példa

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

Hozzászólások

  • Tudom, hogy ‘ év felére csökkent, de lehet golf eléggé (a szóközök eltávolításával is): 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 bájt ) vagy még inkább, ha a new java.util.Scanner(System.in).nextLine() alternatívaként v[0] put ( 279 bájt ) Próbálja ki itt .

Válasz

Perl, 137 bájt

132 bájt kód + 5 bájt a -pF zászlókhoz.

ascii_train.pl:

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

Ne feledje, hogy a -a jelölőt felvettem a kódba, de ez csak azért van, mert a Perl régi verziói -a szükségesek, amikor -F használatos.

Futtatásához:

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

a bemenetet végleges új sor nélkül kell megadni (például echo -n).

Magyarázat:
A látottak alapján nagyjából ugyanaz az elképzelés mint az ETHProduction JavaScript-válasza.
Nem történik sok minden: sajnos a minták kissé rövidek ahhoz, hogy x operátort érdemes használni.
Először is, s/./ | $& | /g a bemenet minden karakterét | (és szóközökkel) veszi körül a vonat második szintjének kialakításához.
Ezután azon belül hosszú karakterlánc, minden a ! és az új vonal között olyan minta, amelyet megismételni szeretnénk az autók felépítéséhez. Ez az ismétlés a reg div s/!(.*)/$1x@F/ge jóvoltából történik. (! -et használtam, mert a bemenet nem tartalmazhatja).

Válasz

SOGL V0.12 , 57 56 bájt

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

Próbálja ki itt!

Magyarázat:

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

Válasz

C #, 277 bájt

Golfozott:

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

Nem sikerült:

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

Tesztelés:

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

És …

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

Válasz

C # 221 bájt

itt semmi különös nem történik … csak minden sort létrehozni és új sorokkal összekapcsolni.

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

Válasz

C, 217 212 208 bájt

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

Próbálja ki 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-" 

Válasz

Jq 1.5 , 178 bájt

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

Kiterjesztett

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

Mintafutás

$ 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 

Próbálja ki online

Válasz

Excel VBA, 218 bájt

Anonim VBE azonnali ablak funkció, amely beviszi a [A1] és kimeneti a VBE azonnali ablakba

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

Az olvashatóság érdekében formázva

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

Minta kimenet

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

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük