Alles einsteigen in den ASCII-Zug!
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-'
Sie sollten am besten darauf vorbereitet sein, mit dem Zug zu fahren, da Sie gleich den Zug bauen, mit dem Sie fahren werden. Geben Sie bei gegebener Zeichenfolge s
einen vollständig geformten Zug aus, wie oben dargestellt. Das erste, was ausgegeben wird, ist immer die Engine, die Ihre Saite mitreißt, wie im Folgenden allein dargestellt:
o O O
o
TS__[O]
{======|
./o--000'
Der Lokomotive folgen Eisenbahnwaggons, die jeden Charakter Ihrer kostbaren Fracht enthalten. Um beim Entladen Verwirrung zu vermeiden, hat Ihr Unternehmen Sie damit beauftragt, die Außenseiten dieser Fahrzeuge zu kennzeichnen. Die fraglichen Autos werden immer so aussehen:
___
| # |
|___|
_|"""""|
"`-0-0-'
Wobei die #
für den Charakter repräsentativ ist, der sich im Laderaum befindet. Das Anketten des Motors an jedes Auto ist ebenfalls Teil Ihrer Arbeit, da Sie die Aufgabe haben, den reibungslosen Ablauf und den Erfolg dieser gesamten Sendung zu überwachen. Sobald Sie alle Wagen markiert und den Motor auf die Gleise gebracht haben, müssen Sie sicherstellen, dass der Zug montiert und fahrbereit ist.
Regeln
- Die einzige Eingabe, die Ihr Programm vornehmen sollte, ist eine einzelne Zeichenfolge.
- Der Motor muss immer ausgegeben werden, auch wenn Ihre Sendung leer ist.
- Jedes Auto kann nur einen Charakter aufnehmen, nicht zu viel Glück, sonst kann die Ware beschädigt werden.
- Sie müssen nur die folgenden druckbaren ASCII-Zeichen unterstützen:
_-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Wenn Sie am Ende mehr tun, ist das auch in Ordnung, aber dies ist das absolute Minimum. - 1-2 nachgestellte Leerzeichen sind zulässig, ebenso wie eine einzelne nachgestellte Zeile.
- Dies ist Code-Golf- Ascii-Art , die kürzeste Anzahl an Bytes.
Antworten:
05AB1E ,
10199 BytesNaiver erster Versuch.
Probieren Sie es online!
quelle
JavaScript (ES6),
149144 ByteIch denke nicht, dass der Motor selbst komprimiert werden kann, aber vielleicht ist es möglich.
Testschnipsel
Code-Snippet anzeigen
quelle
Befunge,
276270 BytesProbieren Sie es online!
Erläuterung
Auto und Motor sind in den Zeilen 3 bis 12 als zwei Sätze zu je fünf Zeichenfolgen codiert. Die Zeichenwerte sind um 1 versetzt, um die doppelten Anführungszeichen zu vermeiden, die in einer Befunge-Zeichenfolge nicht verwendet werden können.
Der Code baut den vollständigen Zeichensatz auf, der zum Rendern des Zugs auf dem Stapel erforderlich ist. Für jede Ausgabezeile wird zuerst ein entsprechender Wagen-String zum Stapel hinzugefügt, der so oft wiederholt wird, wie es für die Ladung erforderlich ist, und dann eine Kopie des entsprechenden Motor-Strings.
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, wobei ein anderes Zeichenfolgenpaar für das Auto und verwendet wird Motor.
Sobald alle Daten auf dem Stapel aufgebaut sind, gibt es eine letzte Rendering-Schleife, in der die Zeichen ausgeschrieben werden. Dabei wird jedes Mal 1 abgezogen, 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.quelle
PHP
218 211 204 187183 BytesÜbernimmt die Eingabe von STDIN; renn mit
-nR
.Das Komprimieren des Motors oder Wagens würde mehr Code zum Dekomprimieren erfordern, als Speicherplatz spart.
Ich sehe hier kein Potenzial mehr.
quelle
a&$c=$argn
statt""<$c=$argv[1]
Python 2, 176 Bytes
Beispiel:
gibt
quelle
Powershell,
167166 BytesBeispiel:
Möglicherweise ungültig! Wenn es überhaupt ohne Argumente ausgeführt wird, wird versucht, eine leere Zeichenfolge zu drucken, und es sieht so aus:
Wenn es mit einer leeren Eingabezeichenfolge ausgeführt wird, wird es jedoch korrekt zurückgegeben:
(irgendwie) Ungolfed:
Die kürzeste Komprimierung in Powershell ist,
+'c'*x
wenn c das Zeichen und x die Anzahl der Wiederholungen ist. Dies gilt nur für abschließende oder führende Wiederholungen. Für Wiederholungen in der Mitte der Zeichenfolge ist ein Extra+
und ein Extra erforderlich"
Ich kann sehen, dass die Komprimierung Speicherplatz spart, und der einzige Zeichensatz, der wiederholt wird___
, besteht aus nur 3 Zeichen.Erläuterung:
$l=($a=$args[0]).Length
Nehmen Sie das erste Argument, schreiben Sie es in $ a, nehmen Sie dann die Länge von $ a und schreiben Sie es in $ l. Dies sind die einzigen Variablen, die Sie benötigen." o O O"+" ___ "*$l
Die meisten anderen Bits folgen diesem Format des linken Teils und dann des rechten Teils multipliziert mit der Anzahl der erforderlichen Zeichen." o "+([char[]]$a|%{" | $_ |"})
loop (|%{}
) durch $ a als char-Array, alsoforeach (char $_ in $a)
für eine Nicht-Pipeline-Version, dann setze das Zeichen in den Text.Dies ist ein äußerst einfacher Ansatz, aber da ich keine gute Möglichkeit finde, die Zeichenfolgen nach diesem Ansatz zu komprimieren, scheint er am nützlichsten zu sein.
1 Byte gespart dank briantist! und hier dachte ich, das würde nicht kürzer werden ..
quelle
[char[]]$a
auf$a[0..$l]
:)$l
und total vergaß. Dank dafür!Java, 361 Bytes
Beispiel
quelle
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 ersetzennew java.util.Scanner(System.in).nextLine()
mitv[0]
als alternative Eingabe ( 279 Bytes ) Versuchen Sie es hier .Perl, 137 Bytes
132 Byte Code + 5 Byte für
-pF
Flags.ascii_train.pl
:Beachten Sie, dass ich das
-a
Flag im Code hinzugefügt habe , aber nur, weil alte Versionen von Perl erfordern,-a
wann-F
verwendet wird.Um es auszuführen:
Die Eingabe muss ohne abschließenden Zeilenumbruch erfolgen (
echo -n
z. B. mit).Erklärungen:
Soweit ich gesehen habe, ist es ungefähr die gleiche Idee wie die JavaScript-Antwort von ETHProduction.
Es ist nicht viel los: Leider sind die Muster ein bisschen zu kurz, damit der
x
Bediener es wert ist, verwendet zu werden.Zunächst
s/./ | $& | /g
umgibt jedes Zeichen des Eingangs mit|
(und Zwischenräumen) , um die zweite Ebene der Bahn zu bilden.Dann ist in dieser langen Schnur alles zwischen einer
!
und einer Newline ein Muster, das wir wiederholen möchten, um die Autos zu konstruieren. Diese Wiederholung erfolgt dank der Regexs/!(.*)/$1x@F/ge
. (Ich habe verwendet,!
weil die Eingabe es nicht enthalten kann).quelle
C #, 277 Bytes
Golf gespielt:
Ungolfed:
Testen:
Und...
quelle
C # 221 Bytes
Hier passiert nichts Besonderes ... erstelle einfach jede Zeile und verbinde sie mit neuen Zeilen.
quelle
C
217212208 BytesProbieren Sie es online aus
Ausgabe:
quelle
SOGL V0.12 ,
5756 BytesProbieren Sie es hier aus!
Erläuterung:
quelle
Jq 1,5 , 178 Bytes
Erweitert
Probelauf
Probieren Sie es online aus
quelle
Excel VBA, 218 Bytes
Anonyme VBE-Direktfensterfunktion, die Eingaben aus dem Bereich
[A1]
und Ausgaben in das VBE-Direktfenster übernimmtZur besseren Lesbarkeit formatiert
Beispielausgabe
quelle