Všichni na palubě vlaku 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-"
Nejlepší buďte připraveni jet vlakem, protože se chystáte postavit vlak, na kterém budete jezdit. Vzhledem k řetězci s
vygenerujte plně vytvořený vlak, jak je znázorněno výše. Výstupem první věci je vždy motor, který „vás bude tahat za strunu, jak je znázorněno samostatně níže:
o O O o TS__[O] {======| ./o--000"
Po lokomotivě následují železniční vozy obsahující každý charakter vašeho drahocenného nákladu. Aby vás při vykládce ušetřil zmatek, vaše společnost vám dala za úkol označit vnější část těchto automobilů. Dotyčná auta budou vždy vypadat takto:
___ | # | |___| _|"""""| "`-0-0-"
Kde #
představuje znak, který je uvnitř “ nákladu “ Řetězení motoru ke každému vozu je také součástí vaší práce, protože jste dostali za úkol dohlížet na plynulost a úspěch celé této zásilky. Jakmile tedy označíte všechny vozy a dostanete motor na koleje, musíte zajistit, aby byl vlak smontován a připraven k rozjezdu.
Pravidla
- pouze vstup, který by měl váš program vzít, je jediný řetězec.
- Motor musí být vždy na výstupu, i když je vaše zásilka prázdná.
- Každé auto může obsahovat pouze jeden znak, ne štěstí, můžete poškodit zboží.
- Potřebujete pouze následující tisknutelné znaky ASCII:
_-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Pokud nakonec uděláte více, „je to také v pořádku, ale toto je úplné minimum. - 1-2 koncové mezery jsou přijatelné, stejně jako jeden koncový nový řádek.
- Toto je code-golf ascii-art , vyhrává nejkratší počet bajtů.
komentáře
- Nejasně příbuzní.
- ‚ Nemyslím si, že je to ve skutečnosti komplexnost kolmogorov . red on tento meta příspěvek tato otázka je určitě na hranici mezi přizpůsobením a neodpovídá naší definici a osobně bych řekl, že se nevejde na značku podobnou tato otázka , která také požaduje typ zalomení řetězce.
- To je krásné ascii -art
- @WheatWizard je ‚ směs různých žánrů. Motor by spadal pod kolmogrovskou složitost, celá věc pod ASCII-Art a pravděpodobně také trochu spadá do manipulace s řetězci.
- Měl jsem dojem, že komprese skutečného vzoru vlaku by byla hodná značky; ale ‚ jej odstraním, aby se argument zastavil.
Odpovědět
05AB1E , 101 99 bajtů
Naivní první pokus.
" o O O o"ð7×"TS__[O] {======|./o--000""J5ä¹v… _ €ÐJy“ | ÿ | |___| _|"""""|"`-0-0-"“«5ä})øJ»
Komentáře
- No, kód se ‚ nepodobá vlaku, ale ‚ nyní vyhrává.
Odpověď
JavaScript (ES6), 149 144 bajtů
s=>` o O Oa ___ o a | $& | TS__[O]a |___| {======|a_|"""""| ./o--000"a"\`-0-0-"`.replace(/a(.*)/g,(_,c)=>s.replace(/./g,c))
Nemyslím si, že samotný motor lze komprimovat, ale možná je to možné.
Testovací úryvek
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,"<br>"))"><br> <pre id=O></pre>
Komentáře
- Spousta opakovaných znaků, mělo by být možné vytlačit několik dalších bajtů z toho.
- Jeden může téměř vidět vlak zabalený ve zdrojovém kódu 🙂
- Upvoted primárně proto, že kód připomíná vlak
- bonusové body, protože běží přímo v prohlížeči!
Odpovědět
Befunge, 276 270 bajty
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_@>$$$$>,#
Vysvětlení
Auto a motor jsou na řádcích 3 až 12 kódovány jako dvě sady pěti řetězců. jsou vypnuty o 1, aby se zabránilo vypořádání se s uvozovkami, které nelze použít v řetězci Befunge.
Kód funguje vytvořením celé sady znaků potřebných k vykreslení vlaku zásobník. Pro každý řádek výstupu je nejprve do zásobníku přidán příslušný řetězec automobilu, který se pro náklad opakuje tolikrát, kolikrát je to nutné, a poté jedna kopie příslušného řetězce motoru.
Po sestavení každého řádku je dvojice šipek dolů nalevo od řetězců nahrazena šipkou doprava, takže další iterace smyčky sleduje jinou cestu kódem, používá jinou pár řetězců pro auto a motor.
Jakmile jsou všechna data vytvořena v zásobníku, existuje finální vykreslovací smyčka, která vypisuje znaky a vždy odečte 1, aby se zohlednilo počáteční kódování .
Jako bonus je zdroj navržen ve tvaru dělové věže , pro případ, že by byl vlak napaden . Golfisté zničili mou dělovou věž.
Komentáře
- Golfisté zničili mou dělovou věž, LOL. +1. Přesto ‚ s překonávání C # a Java.
Odpověď
PHP, 218 211 204 187 183 bajtů
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];
Převezme vstup z STDIN; spusťte s -nR
.
Komprese motoru nebo vůz by k dekompresi vyžadoval více kódu, než kolik ušetří na úložišti.
Zde nevidím žádný větší potenciál.
Komentáře
-
a&$c=$argn
místo""<$c=$argv[1]
- @J ö rgH ü lsermann Tento příspěvek byl starodávný. 🙂
Odpověď
Python 2, 176 bajtů
lambda i:"\n".join(map("".join,zip(*[[" o O O"," o "," TS__[O]"," {======|","./o--000""]]+[[" ___ "," | "+x+" | "," |___| ","_|"""""|","\"`-0-0-""]for x in i])))
Příklad:
print f("Python")
dává
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-"
odpověď
Powershell, 167 166 bajtů
$l=($a=$args[0]).Length;" o O O"+" ___ "*$l;" o "+($a[0..$l]|%{" | $_ |"});" TS__[O]"+" |___| "*$l;" {======|"+"_|"""""|"*$l;"./o--000""+""`-0-0-"""*$l
Příklad:
.\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-"
Možná neplatný! Pokud je spuštěn bez jakýchkoli argumentů, pokusí se vytisknout jeden prázdný řetězec a vypadat takto:
o O O o | | TS__[O] {======| ./o--000"
Pokud se spustí s prázdným vstupním řetězcem, vrátí se správně nicméně:
.\train.ps1 "" o O O o TS__[O] {======| ./o--000"
(trochu) Ungolfed:
$l=($a=$args[0]).Length " o O O"+" ___ "*$l " o "+($a[0..$l]|%{" | $_ |"}) " TS__[O]"+" |___| "*$l " {======|"+"_|"""""|"*$l "./o--000""+""`-0-0-"""*$l
nejkratší komprese v Powershellu je bude +"c"*x
kde c je char a x je počet opakování, a to pouze pro koncové nebo úvodní opakování, jakékoli opakování středového řetězce bude vyžadovat další +
a další "
– takže v tomto případě nemá smysl, abych viděl kompresi, která šetří místo, a jediná opakovaná sada znaků je ___
což je pouze 3 znaky.
Vysvětlení:
$l=($a=$args[0]).Length
Vezměte první arg , vložte jej do $ a, poté vezměte délku $ a vložte do $ l, to jsou jediné proměnné, které potřebujete.
" o O O"+" ___ "*$l
většina z ostatní bity se řídí tímto formátem t levá část a potom pravá část vynásobí počet požadovaných znaků.
" o "+([char[]]$a|%{" | $_ |"})
smyčka (|%{}
) prostřednictvím $ a jako pole char, takže foreach (char $_ in $a)
pro nepipeline verzi vložte znak do textu.
jedná se o velmi jednoduchý přístup, ale protože nemohu najít dobrý způsob komprese řetězců, zdá se to jako nejužitečnější.
uloženo 1 bajt díky briantist! a tady jsem myslel, že už to nebude kratší.
Komentáře
- Ne ‚ nemusím zpracovávat žádné argumenty :).
- @carusocomputing yay, děkuji, že jste mě informoval.
- pěkně! 1 bajt můžete ušetřit změnou
[char[]]$a
to$a[0..$l]
🙂 - ah používal char pole, než jsem deklaroval
$l
a úplně zapomněl o tom. díky za to!
Odpověď
Java, 361 bajtů
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říklad
java o O O ___ ___ ___ ___ o | j | | a | | v | | a | TS__[O] |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
Komentáře
- Vím, že ‚ bylo polovinu roku, ale můžete golf docela dost (také odstraněním mezer):
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 bajtů ) nebo ještě více, pokud nahradítenew java.util.Scanner(System.in).nextLine()
sv[0]
jako alternativou v put ( 279 bajtů ) Vyzkoušejte to zde .
Odpovědět
Perl, 137 bajtů
132 bajtů kódu + 5 bajtů pro příznaky -pF
.
ascii_train.pl
:
#!/usr/bin/perl -apF s/./ | $& | /g;$_=" o O O! ___ o $_ TS__[0]! |___| {======|!"."_|"""""|"." ./o--000"!\"`-0-0-"";s/!(.*)/$1x@F/ge
Všimněte si, že jsem do kódu přidal -a
příznak, ale je to jen proto, že staré verze Perlu vyžadují -a
když -F
je použito.
Chcete-li jej spustit:
echo -n "code-golf" | perl ascii_train.pl
The vstup musí být zadán bez posledního nového řádku (například echo -n
).
Vysvětlení:
Z toho, co jsem viděl, je to zhruba stejný nápad jako odpověď JavaScriptu ETHProduction.
Nedělá se toho hodně: vzory jsou bohužel trochu krátké, aby operátor x
stál za použití.
Nejprve s/./ | $& | /g
obklopuje každý znak vstupu |
(a mezerami) a tvoří druhou úroveň vlaku.
Pak uvnitř dlouhý řetězec, vše mezi !
a novým řádkem je vzor, který chceme opakovat pro konstrukci automobilů. Toto opakování se provádí díky regex s/!(.*)/$1x@F/ge
. (Použil jsem !
, protože vstup jej nemůže obsahovat).
Odpovědět
SOGL V0.12 , 57 56 bajtů
Τ¡ā↓mΛC┌─⁵℮Ƨ⅛□→(š;∞⅟¹°⅔Ζ‽ζ÷⁴‘9n,{"s=Ο!NθæιžGš‼t╬¼Xg`‘8n┼
Vysvětlení:
..‘ 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
Odpověď
C #, 277 bajtů
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); }
Testování:
Console.Write(new AllAboardTheASCIITrain().T("")); o O O o TS__[O] {======| ./ o--000"
A …
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-"
Odpověď
C # 221 bajtů
zde se nic zvláštního neděje .. stačí vytvořit každý řádek a spojit je s novými řádky.
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);};
odpověď
C, 217 212 208 bajtů
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("");}}
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-"
Odpověď
Jq 1.5 , 178 bajtů
[[" o O O o TS__[O] {======|./o--000""|_nwise(9)]]+[range(length)as$i|[.[$i:$i+1]|" ___ | \(.) | |___| _|\"\"\"\"\"|\"`-0-0-""|_nwise(8)]]|transpose|map(add)[]
Rozbaleno
# 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)[]
Ukázkový běh
$ 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
Odpověď
Excel VBA, 218 bajtů
Anonymní funkce okamžitého okna VBE, která přijímá vstup z rozsahu [A1]
a výstupy do okamžitého okna 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)]
Formátováno pro čitelnost
[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)]
Ukázkový výstup
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-"