Betrachten Sie diese sieben ASCII-Waggons.
Motor (E)
__
====== \/
| [] |=========
| )
================
O-O-O O-O-O \\
PKW (P)
===============
| [] [] [] [] |
===============
O-O O-O
Güterwagen (B)
===============
|-|-| | |-|-|
===============
O-O O-O
Tanker (T)
_____---_____
( )
===============
O-O O-O
Trichter (H)
_______________
\ | | | | | | /
===============
O-O O-O
Pritsche (F)
===============
O-O O-O
Kombüse (C)
=====
====| |====
| [] [] |
=============
O-O O-O
Schreiben Sie ein Programm, das bei einer bestimmten Zeichenfolge EPBTHFC
die ASCII-Zugdarstellung --
für die Fahrzeugkupplungen ausgibt . Die Eingabezeichen ganz links werden zu den Waggons ganz rechts. Der Zug zeigt immer nach rechts.
Zum Beispiel sollte eine Eingabe von EEHTBPFC
erzeugen
__ __
===== ====== \/ ====== \/
====| |==== =============== =============== _____---_____ _______________ | [] |========= | [] |=========
| [] [] | | [] [] [] [] | |-|-| | |-|-| ( ) \ | | | | | | / | ) | )
=============--===============--===============--===============--===============--===============--================--================
O-O O-O O-O O-O O-O O-O O-O O-O O-O O-O O-O O-O O-O-O O-O-O \\ O-O-O O-O-O \\
Einzelheiten
- Das ist Code Golf; das kürzeste Programm in Bytes gewinnt.
- Jede Folge von einem oder mehreren Buchstaben
EPBTHFC
ist eine gültige Eingabe. - Ihr Programm muss in der Lage sein, alle 7 Fahrzeugtypen genau so auszugeben, wie sie oben angezeigt werden.
- Nehmen Sie Eingaben über die Befehlszeile oder direkt vom Benutzer (z. B. Meldungsfeld) entgegen. Ausgabe auf Standardausgabe. (Anführungszeichen um die Eingabe sind in Ordnung.)
- Die Höhe der Ausgabe sollte entweder 6 oder die maximale Höhe sein, die für die zu ziehenden Waggons erforderlich ist.
- Kupplungen (
--
) nicht vorne am ersten oder hinten am letzten Fahrzeug anbringen.
code-golf
ascii-art
kolmogorov-complexity
Calvins Hobbys
quelle
quelle
E
vorne geben und könnte esE
irgendwo in der Mitte einen geben?Antworten:
Perl, 265 Bytes
Da dieser Eintrag Bytes enthält, die nicht druckbaren ASCII-Zeichen entsprechen, kann er hier nicht direkt kopiert werden. Stattdessen stelle ich es als Hex-Dump zur Verfügung. Benutzer auf Unix-basierten Systemen können das Skript rekonstruieren, indem sie dem
xxd -r
Befehl den folgenden Hex-Dump hinzufügen:Das Skript verwendet die Perl 5.10-
say
Funktion und muss daher mit ausgeführt werdenperl -M5.010
. Es wird ein einzelnes Befehlszeilenargument aus den Buchstaben verwendetEPBTHFC
und die entsprechende Wagenanordnung ausgegeben. Die EingabeFEH
erzeugt beispielsweise die folgende Ausgabe:Der lesbare Code am Anfang des Skripts dekomprimierte einfach den mit zlib komprimierten String, der den Hauptteil des Skripts enthält, und wertet ihn aus. Der dekomprimierte Code sieht folgendermaßen aus:
Beachten Sie, dass bei allen Eisenbahnwaggons die Linien mit gleichlangen Abständen gepolstert sind und die Kupplung enthalten (die durch die Ausgangsschleife vom Wagen ganz rechts entfernt wird). Mit der von zlib verwendeten DEFLATE-Komprimierung können sich wiederholende Daten sehr gut komprimiert werden, sodass Sie nicht versuchen müssen, sie manuell zu komprimieren.
Beachten Sie, dass dies ein schneller erster Versuch ist. Ich bin mir sicher, dass es möglich wäre, einige Bytes weniger Zeit zu verbrauchen, wenn man mit Variationen wie der Neuordnung der Waggons in der Quelle spielt.
quelle
Python, 464
Ich ging mit Flüchen an die Sache heran. Es kann nicht wirklich mithalten, aber ich hatte ein bisschen Spaß damit (~ 630 Bytes):
quelle
sl
2.0Python (
582488476450 Zeichen)Der Ascii-Salat ist eine Base64-kodierte zlib-komprimierte Saite mit den Zahlen ...
quelle
string.decode('base64')
2.j=lambda y:y==4and'--'or' '
3.for c in A[::-1]:i.append(C[c][y])
f.append(j(y).join(i)
for l in((y==4and'--'or' ').join(C[c][y]for c in A[::-1])for y in range(6-h,6)):print l
for y in range(6-h,6):print(y==4and'--'or' ').join(C[c][y]for c in A[::-1])
Python,
402369Danke für die Verbesserungen, ugoren!
quelle
range(6)
,for x,y in zip("EPBTHFC",range(0,42,6)):
Javascript,> 471 Bytes
Naja Mist, schon über der besten Punktzahl, und ich bin immer noch nicht dazu gekommen, alles der Reihe nach drucken zu lassen. Aber ich habe einen Nachmittag damit verbracht und wollte es trotzdem zeigen.
Nur
console.log(c(L)); // L=train car letter
und es wird ein einzelnes Auto in der Konsole gedruckt. Ich weiß, dass es eine Menge Trimmen gibt, die ich tun könnte, aber ich gebe auf. : Pquelle
<marquee>
du teuflischer Teufel. Warum haben sie dich jemals verachtet?Java (583 Zeichen)
Bei der einfachen hausgemachten Komprimierung - bin mir aber nicht sicher, ob es so effizient ist :-) Der Zugstring (zB
EEHTBPFC
) muss als Parameter übergeben werden.Entfaltet:
quelle
C #,
758664603562 BytesKeine große Punktzahl, etwa 200 Bytes in der schlecht codierten Zeichenfolge und etwa 80 Bytes für die Decodierung. Frustrierende Menge Code, die für das Aussortieren der Kupplung am Motor aufgewendet wurde! Es hinterlässt jetzt Leerzeichen an der Vorderseite des Zuges, was unordentlich ist, aber den Regeln entspricht. Außerdem sind die Abmessungen der Datenzeichenfolge fest codiert, was ich anfangs nur ungern getan habe.
Ein bisschen formatiert:
Die Zeichenfolge wird sehr einfach komprimiert, indem ein sich wiederholendes Zeichen durch eine Zeichenfolgendarstellung der Anzahl der Zeichen gefolgt von dem Zeichen (minus 1) ersetzt wird oder nur das Zeichen, wenn es nur eines davon gibt (ich wollte mich an ASCII halten und alles vermeiden) auf der Ebene der Unterzeichen). Encoder (nicht in der Partitur enthalten):
quelle
Hier ist meine Lösung in PHP (v5.4 kompatibel), 512 Bytes. Könnte kürzer sein, habe aber einen schnellen Build gemacht, um das auszuprobieren.
Dies ist eine verbreitete Version zum einfachen Lesen:
quelle
Python, 491 Bytes
Ich mag, wie es herauskam, obwohl es kein Gewinner sein wird.
quelle
if j==5...x[j]+=y[w[i]][j]+k
umx[j]+=y[w[i]][j]+('\\ 'if j==5 and w[i]=='E'else'--'if j==4 and i!=u-1 else' ')
ein wenig zu speichern. (Sie können auch einen Tabulator anstelle von zwei Leerzeichen vorx[j]...
.)GNU sed , 491 Bytes
Probieren Sie es online!
Erläuterung
Dies ist im Grunde ein super naives benutzerdefiniertes Komprimierungsschema. Die erste Zeile fügt jedem Buchstaben in der Eingabe ein Leerzeichen hinzu und
#
markiert das Ende jedes Teils:Die nächsten 7 Zeilen ersetzen jeden Buchstaben durch eine komprimierte Darstellung des entsprechenden ASCII-Bildes:
Die nächsten 14 Zeilen führen die "Dekomprimierung" durch. Zum Beispiel
S
dekomprimiert a auf sechss
unds
dekomprimiert a auf zwei Leerzeichen, sodass esS
zu 12 Leerzeichen wird.Dekomprimiert, steht vor den Zeilen jedes Autos eine Zeilennummer, und jedes Auto wird mit abgeschlossen
#
. Der Rest des Codes steht vor dem Muster0123456;
(Zeilennummern und Begrenzer) und ersetzt dann in einer Schleife jede Ziffer durch die entsprechende Zeile jedes Wagens.Schließlich wird der Musterraum durch Aufteilen auf Ziffern in Zeilen unterteilt und überflüssige Zeichen entfernt:
Hier gibt es viel Raum für Verbesserungen. Ich war überhaupt nicht streng genug, um einen optimalen Satz von Komprimierungen zu finden, und die Verwendung einer Nachschlagetabelle anstelle von 14 separaten
s///g
s wäre ein einfacher Gewinn. Ich kann oder kann nicht mit diesem etwas mehr nudeln.quelle
Python 3 , 529 Bytes
Probieren Sie es online!
Ich denke, ich würde es posten, weil es keine Komprimierung verwendet, im Gegensatz zu den meisten anderen Antworten hier.
quelle
C (gcc) ,
501499490489484 Bytes-2 -9 -1 -5 Bytes dank ceilingcat .
Probieren Sie es online!
quelle