Alle an Bord des ASCII-Zugs

Alle an Bord des ASCII-Zugs!

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

Am besten Seien Sie bereit, mit dem Zug zu fahren, denn Sie sind dabei, den Zug zu bauen, auf dem Sie fahren werden. Geben Sie bei gegebener Zeichenfolge s einen vollständig ausgebildeten Zug wie oben dargestellt aus. Das erste, was ausgegeben wird, ist immer der Motor, der „Ihre Schnur mitreißt, wie unten dargestellt:

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

Nach der Lokomotive befinden sich jeweils Triebwagen Um Verwirrung beim Entladen zu vermeiden, hat Ihr Unternehmen Sie beauftragt, die Außenseite dieser Autos zu kennzeichnen. Die betreffenden Autos sehen immer so aus:

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

Wobei die # repräsentativ für das Zeichen ist, das sich in der “ Fracht “ hold. Die Verkettung des Motors mit jedem Auto gehört ebenfalls zu Ihrer Aufgabe, da Sie die Aufgabe haben, die Fließfähigkeit und den Erfolg dieser gesamten Sendung zu überwachen. Sobald Sie alle Autos beschriftet und den Motor auf die Gleise gebracht haben, müssen Sie sicherstellen, dass der Zug zusammengebaut und rollbereit ist.

Regeln

  • Die Die einzige Eingabe, die Ihr Programm annehmen sollte, ist eine einzelne Zeichenfolge.
  • Der Motor muss immer ausgegeben werden, auch wenn Ihre Sendung leer ist.
  • Jedes Auto kann nur ein Zeichen enthalten, nicht wahr? Wenn Sie Ihr Glück versuchen, können Sie die Ware beschädigen.
  • Sie müssen nur die folgenden druckbaren ASCII-Zeichen unterstützen: _-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    Wenn Sie am Ende mehr tun, ist dies der Fall „ist auch in Ordnung, aber dies ist das absolute Minimum.
  • 1-2 nachgestellte Leerzeichen sind akzeptabel, ebenso wie eine einzelne nachfolgende Zeilenumbruch.
  • Dies ist , kürzeste Byte-Anzahl gewinnt.

Kommentare

  • Vage verwandt.
  • Ich habe glaube nicht, dass dies tatsächlich kolmogorov-Komplexität ist. Bas ed on dieser Meta-Beitrag Diese Frage bewegt sich sicherlich zwischen der Anpassung und Nichtanpassung unserer Definition, und ich persönlich würde sagen, dass sie nicht zu dem Tag passt, das diese Frage , die auch nach einer Art Zeichenfolgenumbruch fragt.
  • Dies ist wunderschön ascii -art
  • @WheatWizard it ‚ ist eine Mischung aus mehreren Genres. Der Motor würde unter die Komplexität von Kolmogrow fallen, das Ganze unter ASCII-Art und wahrscheinlich auch ein wenig in die Manipulation von Saiten.
  • Ich hatte den Eindruck, dass es sich lohnen würde, das tatsächliche Muster des Zuges zu komprimieren des Tags; aber ich ‚ entferne es einfach, um das Argument zu stoppen.

Antwort

05AB1E , 101 99 Bytes

Naiver erster Versuch.

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

Probieren Sie es online aus!

Kommentare

  • Nun, der Code ‚ ähnelt keinem Zug, aber ‚ gewinnt jetzt.

Antwort

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

Ich glaube nicht, dass der Motor selbst komprimiert werden kann, aber vielleicht ist es möglich.

Test-Snippet

 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> 

Kommentare

  • Viele wiederholte Zeichen sollten möglich sein, um weitere Bytes zu komprimieren
  • Man kann fast sehen, wie der Zug im Quellcode verpackt ist 🙂
  • Upvoted in erster Linie, weil der Code einem Zug ähnelt
  • Bonuspunkte, weil es läuft genau dort im Browser!

Antwort

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

Probieren Sie es online aus!

Erläuterung

Das Auto und der Motor werden in den Zeilen 3 bis 12 als zwei Sätze mit fünf Zeichenfolgen codiert. Die Zeichenwerte sind um 1 versetzt, um zu vermeiden, dass Sie sich mit doppelten Anführungszeichen befassen müssen, die in einer Befunge-Zeichenfolge nicht verwendet werden können.

Der Code baut den gesamten Zeichensatz auf, der zum Rendern des Zugs erforderlich ist der Stapel. Für jede Ausgabezeile wird zuerst eine geeignete Fahrzeugzeichenfolge zum Stapel hinzugefügt, die so oft wie für die Ladung erforderlich wiederholt wird, und dann eine Kopie der entsprechenden Motorzeichenfolge.

Nachdem jede Zeile erstellt wurde, wird ein Paar der Abwärtspfeile links von den Zeichenfolgen durch einen Rechtspfeil ersetzt, sodass die nächste Iteration der Schleife einem anderen Pfad durch den Code folgt und einen anderen verwendet Zeichenfolgenpaar für Auto und Motor.

Sobald alle Daten auf dem Stapel aufgebaut wurden, gibt es eine letzte Rendering-Schleife, die die Zeichen ausschreibt und jedes Mal 1 subtrahiert, um die anfängliche Codierung zu berücksichtigen .

Als Bonus ist die Quelle in Form eines Geschützturms ausgelegt, falls der Zug angegriffen wird . Golfer haben meinen Geschützturm zerstört.

Kommentare

  • Golfer haben meinen Geschützturm zerstört, LOL. +1. Dennoch ‚ schlägt C # und Java.

Antwort

PHP, 218 211 204 187 183 Bytes

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

Nimmt Eingaben von STDIN entgegen; wird mit -nR ausgeführt

Komprimieren des Motors oder wagon würde mehr Code zum Dekomprimieren benötigen, als Speicherplatz spart.
Ich sehe hier kein größeres Potenzial.

Kommentare

  • a&$c=$argn anstelle von ""<$c=$argv[1]
  • @J ö rgH ü lsermann Ja, dieser Beitrag war uralt. 🙂

Antwort

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

Beispiel:

print f("Python") 

gibt

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

Antwort

Powershell, 167 166 Bytes

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

Beispiel:

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

Möglicherweise ungültig! Wenn es ohne Argumente ausgeführt wird, wird versucht, eine leere Zeichenfolge zu drucken. Es sieht folgendermaßen aus:

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

Wenn es mit einer leeren Eingabezeichenfolge ausgeführt wird, wird es korrekt zurückgegeben jedoch:

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

(irgendwie) ungolfed:

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

kürzeste Komprimierung in Powershell ist +"c"*x wobei c das Zeichen und x die Anzahl der Wiederholungen ist und dies nur für nachfolgende oder führende Wiederholungen gilt. Für Wiederholungen in der Mitte der Zeichenfolge ist ein zusätzliches + und ein zusätzliches " – es gibt also keinen Punkt, an dem ich sehen kann, dass die Komprimierung Platz spart, und der einzige wiederholte Zeichensatz ist ___ Dies sind nur 3 Zeichen.

Erläuterung:

$l=($a=$args[0]).Length Nehmen Sie das erste Argument , setzen Sie es in $ a, nehmen Sie dann die Länge von $ a und setzen Sie es in $ l, dies sind die einzigen Variablen, die Sie benötigen.

" o O O"+" ___ "*$l die meisten Die anderen Bits folgen diesem Format von t Der linke Teil und dann der rechte Teil multiplizieren die Anzahl der erforderlichen Zeichen.

" o "+([char[]]$a|%{" | $_ |"}) Schleife (|%{}) durch $ a als char-Array, also foreach (char $_ in $a) für eine Nicht-Pipeline-Version, und fügen Sie das char in den Text ein.

Dies ist ein äußerst einfacher Ansatz. aber weil ich keinen guten Weg finde, die Strings darüber hinaus zu komprimieren, scheint es der nützlichste zu sein.

dank briantist 1 Byte gespart! und hier dachte ich, das würde nicht kürzer werden.

Kommentare

  • Sie haben nicht ‚ Sie müssen keine Argumente verarbeiten :).
  • @carusocomputing yay, danke, dass Sie mich informiert haben.
  • Schön! Sie können 1 Byte sparen, indem Sie bis $a[0..$l] 🙂
  • ah hat das char-Array verwendet, bevor ich $l deklariert und völlig vergessen habe Danke!

Antwort

Java, 361 Bytes

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

Beispiel

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

Kommentare

  • Ich weiß, dass ‚ ein halbes Jahr vergangen ist, aber Sie können Golf ziemlich viel (auch durch Entfernen von Leerzeichen): 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 Bytes ) Oder noch mehr, wenn Sie new java.util.Scanner(System.in).nextLine() mit v[0] als Alternative in put ( 279 Bytes ) Probieren Sie es hier aus .

Antwort

Perl, 137 Bytes

132 Bytes Code + 5 Bytes für -pF Flags.

ascii_train.pl:

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

Beachten Sie, dass ich im Code das Flag -a hinzugefügt habe, aber nur, weil alte Versionen von Perl -a erfordern, wenn -F wird verwendet.

So führen Sie es aus:

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

Die Die Eingabe muss ohne letzten Zeilenumbruch erfolgen (z. B. mit echo -n).

Erläuterungen:
Nach dem, was ich gesehen habe, ist es ungefähr dieselbe Idee als JavaScript-Antwort von ETHProduction.
Es ist nicht viel los: Leider sind die Muster etwas zu kurz, um den Operator x nutzbar zu machen.
Erstens s/./ | $& | /g umgibt jedes Zeichen der Eingabe mit | (und Leerzeichen), um die zweite Ebene des Zuges zu bilden.
Dann innerhalb dieser lange Zeichenfolge, alles zwischen einer ! und einer Newline ist ein Muster, das wir wiederholen möchten, um die Autos zu konstruieren. Diese Wiederholung erfolgt dank des regulären Ausdrucks s/!(.*)/$1x@F/ge. (Ich habe ! verwendet, weil die Eingabe sie nicht enthalten kann.)

Antwort

SOGL V0.12 , 57 56 Bytes

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

Probieren Sie es hier aus!

Erläuterung:

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

Antwort

C #, 277 Bytes

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

Testen:

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

Und …

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

Antwort

C # 221 Bytes

Hier passiert nichts Besonderes. Erstellen Sie einfach jede Zeile und verbinden Sie sie mit neuen Zeilen.

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

Antwort

C, 217 212 208 Bytes

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

Probieren Sie es online aus

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

Antwort

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

Erweitert

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

Beispiellauf

$ 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 

Probieren Sie es online aus

Antwort

Excel VBA, 218 Bytes

Anonyme VBE-Sofortfensterfunktion, die Eingaben aus dem Bereich [A1] und gibt an das VBE-Sofortfenster aus

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

Aus Gründen der Lesbarkeit formatiert

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

Beispielausgabe

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.