Herausforderung: Produziere die folgende Ausgabe mit so wenig Zeichen wie möglich:
_ _ _ _ _ _ _
| | | | ___| | | ___ __ _____ _ __| | __| | |
| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | |
| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_|
|_| |_|\___|_|_|\___( ) \_/\_/ \___/|_| |_|\__,_(_)
|/
Regeln und Einschränkungen:
Sie dürfen FIGLet oder ähnliche Tools nicht verwenden . (Sonst
figlet Hello, world!
wäre das eine triviale und ziemlich unschlagbare Lösung.)Ihr Programm muss vollständig aus druckbaren ASCII- Zeichen bestehen , insbesondere den Codepunkten 9 (TAB), 10 (LF) und 32 - 126. (Wenn Ihre Sprache / Ihr Betriebssystem CRLF-Zeilenumbrüche erfordert, können Sie diese anstelle von einfachen LFs verwenden.) Ja Dies disqualifiziert bedauerlicherweise jede Sprache, die Nicht-ASCII-Zeichen (oder Nicht-Textdaten) als Teil ihrer Syntax benötigt.
Die Ausgabe muss genau wie im obigen Beispiel aussehen. Sie können jedoch zusätzliche Leerzeichen um die Ausgabe einfügen, wenn Sie möchten. Sie können einen Tabulatorabstand von 8 Zeichen annehmen (oder die native Standardeinstellung Ihrer gewählten Plattform, falls eine konsistente vorhanden ist).
Ps. Um den Wert zu bestimmen, habe ich mir eine Perl-Lösung mit 199 Zeichen ausgedacht. Ich werde es jedoch noch nicht veröffentlichen, falls jemand es selbstständig erstellt. (Außerdem ist es ein bisschen kitschig.) Dies sollte Sie natürlich nicht davon abhalten, Ihre eigene Lösung zu veröffentlichen, auch wenn sie länger ist.
Update: Jetzt, wo Han es mit einem Char geschlagen hat, ist hier meine kitschige 199-Char-Perl-Lösung:
use Compress'Zlib;say uncompress unpack u,'M>-I]BT$*`S$,`^]YQ=R:0,&_Z<DP?8@?WVQJ]E2J"%E$$@)R(/(/MCJ*\U!OM`Z#=5`4Y>6M=L\L%DMP&DB0V.4GQL&OOGB$4:%`4TT4!R8O-Z(^BTZWNV?>F86K:9+""-35*-LNC:T^D:_$#%^`";"DD0'
Es ist der DC-Lösung (und allen anderen ZLIB / GZIP-basierten Lösungen in verschiedenen Sprachen) sehr ähnlich , mit der Ausnahme, dass ich für den komprimierten Text und einige andere kleine Golftricks Uuencoding anstelle von base64 verwendet habe .
Update 2 : Ich denke, es ist Zeit, einen Gewinner offiziell zu akzeptieren. Der erste Platz geht an den PHP-Code von konsolenfreddy , da er zwar die Zeichen zählt, aber der kürzeste ist, der bisher eingereicht wurde. In der Tat ergibt die Kombination mit dem optimierten DEFLATE-Stream aus meinem Perl-Code mit 199 Zeichen eine noch kürzere Lösung mit 176 Zeichen:
<?=gzinflate(base64_decode("fYtBCgMxDAPvecXcmkDBv+nJMH2IH99savZUqghZRBICciDyD7Y6ivNQbwOg3VQFOXlrXbPLBZLcBpIkNjlJ8bBr754hFGhQFNNFAcmLzeiPotOt7tn3plq2mSwgjU1SjbLo2tPpGvxAxfgA"));
Ich denke jedoch, dass Han eine besondere Auszeichnung verdient, weil er so nah dran ist, ohne zuvor geschriebene Dekomprimierungswerkzeuge zu verwenden. Wir gratulieren Ihnen beiden und wünschen allen ein frohes neues Jahr!
quelle
Antworten:
Stax , 137 Bytes
Führen Sie es aus und debuggen Sie es
Das funktioniert so.
0
s gefolgt von a1
werden in Nicht-Leerzeichen übersetzt.1
s werden durch Leerzeichen ersetzt.quelle
Perl 5.10 - 195
198202203ZeichenHier ist ein Eintrag, für den keine Bibliotheken über den regulären Ausdruck hinaus erforderlich sind. Die codierte Zeichenfolge besteht aus 131 Zeichen, und der Code zum Decodieren und Drucken benötigt 64 Zeichen (sofern am Ende der Quelle kein Zeilenumbruch erfolgt). Die Idee ist, übliche 3-stellige Zeichenfolgen durch Kleinbuchstaben darzustellen.
Der Encoder ist viel länger und momentan leider nicht sehr gut lesbar. Die Grundidee besteht darin, mit dynamischer Programmierung die kürzeste Codierung für jede Zeile zu finden, wenn eine feste Menge von Zeichenfolgensubstitutionen vorliegt. Die Folge von Ersetzungen in der letzten Zeile wurde durch Ausprobieren erstellt, und es ist möglich, dass eine andere Folge von Ersetzungen zu einem kürzeren Programm als oben führt.
Ein Trick ist , dass einige Substitutionen sind kürzer als drei Zeichen lang sein : Aufgrund der Art und Weise Perl
substr
funktioniert,x
wird ersetzt durch ‚_
‘ undy
durch ‚_
‘. Letzteres ist notwendig, weil\w
in der Regex '_
' steht, die dann durch '(_)
' ersetzt wird.quelle
print
durchsay
say
entwederuse 5.010;
als Einzeiler mit ausführen oder ausführen, um es zu verwendenperl -E 'script here'
. Ersteres verlängert den Code und Letzteres ist für ein mehrzeiliges Skript nicht geeignet. Habe ich etwas verpasst?-E
zählt nicht in der Anzahl der Zeichen.s''...'
anstelle von verwenden$_=q!...!
. Denken Sie daran, das einfache Anführungszeichen zu umgehen. Damit undsay
anstattprint
(und ohne die letzte Zeile) bekomme ich das auf 198 Zeichen runter.#
Whitespace zu verwenden, und Ihre Lösung auf 190 Zeichen reduziert. Ich frage mich, ob ein Unterschreiten von 184 Zeichen möglich ist - das würde alle bisher mit zlib komprimierten Lösungen übertreffen.Brainfuck - 862 Zeichen:
quelle
[<---->---]
der ersten Zeile hängen. (Vermutlich wäre es irgendwann zu Ende gegangen, aber ich habe nicht lange genug darauf gewartet.)Python (2.x), 194 Zeichen
quelle
Javascript,
273265264 Zeichen:(
quelle
return
, -1Diese Antwort ist länger als nur das Drucken der Zeichenfolge. Aber nur zum Spaß, hier ist es:
Python, 485 Zeichen ☺
Da ich eine der kürzesten ASCII-Darstellungen des komprimierten Originaltexts habe, muss ich die längste Bildlaufleiste in meinem Code haben! Es ist ein Gewinn! :)
quelle
PHP,
194189 ZeichenEs ist im Grunde dasselbe wie die Antwort von Python und Perl, etwas kürzer
quelle
php -r'=...'
Trick scheint bei mir nicht zu funktionieren, aber Sie könnten ihn nur<?=...
für 184 Zeichen verwenden. Außerdem scheint Ihre Ausgabe einen zusätzlichen Raum zu haben, in dem sich dier
undl
treffen.-r'=..'
. zählt dasphp -r
nicht? Es ist in meinen 189 Zeichen enthalten ...-r
Schalter von PHP ist ein Grenzfall, da er nicht nur Code als Parameter verwendet und ausführt, sondern auch die Parsing-Umgebung im Vergleich zum Ausführen des Codes aus einer Datei leicht verändert. Ich wäre geneigt, es als 2 zusätzliche Zeichen zu zählen - was es übrigens auch mit bringt<?
.J,
167160 Zeichen (47 + 113)Eine weitere Vorlage ohne eingebaute Komprimierung. Verwendet eine recht unkomplizierte Codierung mit variabler Länge, bei der jedes Zeichen als eine Reihe von 1-Bit-Zeichen codiert und durch 0-Bit-Zeichen getrennt wird. Die komprimierte Zeichenfolge besteht nur aus 113 Zeichen.
quelle
Python (2.7.x), 218 Zeichen
Ziemlich unkompliziert ... nicht sehr zufrieden mit diesem Versuch.
quelle
Bash,
199196193 ZeichenNahe genug...
EDIT: Bis auf 193!
quelle
gzip -d
mitzcat
.Bash,
196192quelle
Perl, 230 Zeichen
Dies ist im Grunde das Gleiche wie meine Python-Antwort. Ich würde gerne die 199-Zeichen-Version sehen ... klingt nach Magie.
quelle
Perl,
294290 Bytes.Die komprimierte Zeichenfolge allein ist
151130 Bytes.Das ist nicht kurz, aber es hat wirklich Spaß gemacht zu schreiben.
quelle
Perl, 346 Bytes
Die komprimierte Zeichenfolge allein hat 111 Byte.
Als
key= (0,(1,((((7,5),(6,(8,(11,(9,10))))),(4,3)),2)))
ich versuchte zu verstehen, was die Python- Version tat, erstellte ich eine sehr ähnlich aussehende Perl-Version.quelle
PHP 590
offensichtlich versuche ich nicht zu gewinnen, habe mich nur für ein anderes Komprimierungsschema interessiert, obwohl es nicht einmal die einfachere 302-PHP-Lösung zum einfachen Kopieren und Einfügen schlagen kann
Es funktioniert als Bitmap auf 10 Kanälen
"Golf"
lesbar
quelle
Pylongolf2, 300 Bytes
Ich konnte keine erstklassigen Codierungsmethoden finden, daher nehme ich wahrscheinlich nicht an Wettbewerben teil.
quelle
Golf-Basic 84, 325
Angenommen, ein Taschenrechner druckt Backticks, Backslashes, einzelne Pipes und Unterstriche.
quelle
HTML + JS (223 Unicode-Zeichen)
Nur zum Spaß:
NB: Sie müssen es in einer "UTF-8 with BOM" HTML-Datei speichern.
quelle
PowerShell , 220 Byes = Skript: 9 + Archiv: 211
Probieren Sie es online!
Das Powershell-Skript zum Erstellen des Archivs
t
(siehe TIO):quelle