Ihre Aufgabe ist es, die folgende ASCII-Grafik zu drucken:
_ _ _______ _
| | | | (_______) _ | |
| |__ | | ____ ____ ____ _ _ _____ ____ ___| |_ ____ ____| |
| __)| |/ _ | _ \| _ \| | | | | ___) / _ |/___) _)/ _ )/ ___)_|
| | | ( ( | | | | | | | | |_| | | |____( ( | |___ | |_( (/ /| | _
|_| |_|\_||_| ||_/| ||_/ \__ | |_______)_||_(___/ \___)____)_| |_|
|_| |_| (____/
Denken Sie daran, dies ist Code-Golf , also gewinnt der Code mit der geringsten Anzahl von Bytes. Viel Glück.
code-golf
string
kolmogorov-complexity
Oliver Ni
quelle
quelle
|()/\_
was zu völlig unterschiedlichen Formen der Komprimierung führt. Wir hatten schon ähnliche ASCII-Kunstherausforderungen, aber ich würde gerne sehen, wie diese Frage ausgeführt wird, um zu sehen, ob jemand die Geometrie nutzt. Auf der anderen Seite ist es nicht besonders bemerkenswert, und Sie haben Recht, wir brauchen keinen Osteranhänger.Antworten:
Bubblegum, 130 Bytes
Probieren Sie es online aus.
Komprimiert mit
zopfli --deflate --i10000
.quelle
JavaScript (ES6),
377373360359345 ByteVielen Dank an @Neil für eine Einsparung von einem Byte und an @ edc65 für weitere 14!
Ich dachte, ich würde es versuchen. Komprimiert häufig wiederholte Muster im Text.
_____
(5 Unterstriche) wird gespeichert als_5
5
| | | | |
(5 des|
Musters) wird gespeichert als~5
quelle
=>
._
s gespeichert werden ._
mit_
gefolgt von der~1
oder_2
scheint es kaum wert zu sein. (Warum nicht|2
zum Beispiel verwenden?)BinaryFuck ,
565378 BytesDadurch werden im Wesentlichen die im Array verwendeten Zeichen gespeichert, dann durch das Array navigiert und entsprechend gedruckt. Derzeit ziemlich lang, wird es verkürzen.
Hier ist der Code ohne Wolf:
BEARBEITEN: Durch Umordnen der Reihenfolge der Zeichen in den Zellen habe ich 186 Bytes gespart!
quelle
1
. Bitte geben Sie einen Link zu einem Interpreter und den Hexdump des Quellcodes an, damit Ihre Ergebnisse reproduziert werden können.JavaScript (ES6), 380 Byte
Der Vollständigkeit halber bemühe ich mich, eine andere Komprimierungsmethode zu verwenden, obwohl diese, wie sich herausstellt, nicht so effizient ist wie die Lauflängencodierung. Jede Ziffer gibt an, dass die letzten N bereits generierten Zeichen wiederholt werden. Nachfolgende Ziffern können bereits wiederholte Zeichen wiederholen, z . B. werden
| 23
zu| | |
. Ich wünschte nur, ich könnte einen Lauf von drei Zeichen komprimieren.quelle
C,
517427407 BytesUngolfed Online versuchen
quelle
JavaScript, 297 Bytes
Einfache Codierung der zehn (soweit ich das beurteilen kann) häufigsten Teilzeichenfolgen. Sie sind wegen Überlappungen nicht in Ordnung; Mein Encoder (unten) muss zB
'_ '
und' _'
vorher sehen' '
.Dies erfordert eine Zeichenfolge und ein Array von Teilzeichenfolgen zum Codieren und gibt a) die codierte Zeichenfolge b) die Liste der möglichen nächsten Einsparungen c) die Anzahl der bisher gespeicherten Bytes zurück.
quelle
𝔼𝕊𝕄𝕚𝕟 72 Zeichen / 209 Bytes
Try it here (Firefox only).
Nun, zumindest die Anzahl der Zeichen ist großartig, aber wir können die benutzerdefinierte Codepage nicht verwenden. Es ist nur eine LZString-Dekomprimierung. Ich arbeite auch an einer anderen Lösung - dazu später mehr.
quelle
Perl 5, 286 Bytes
perl -M5.01 happy.pl
, wohappy.pl
ist:Vielen Dank an Dom Hastings (in einem Kommentar dazu) für eine Idee, die mir zwei Bytes erspart hat und zu einer anderen Idee von mir geführt hat, die vier weitere gerettet hat.
quelle
L
als Abkürzung für verwenden|_
;-)Python 2,
343328316 BytesDiese Lösung verwendet keine Dekomprimierungsfunktionen oder andere Importe.
Lesbare Version:
Verwendet eine Version der Lauflängencodierung mit 3 Bits für ein Symbol aus der Menge "\ n _ | () /". Der Rest des Bytes ist die Länge, aber ich habe die Länge auf 10 begrenzt und sie so bearbeitet, dass die Ergebnisse druckbare Zeichen sind, die in einer Python-Zeichenfolge gültig sind, ohne dass sie maskiert werden.
Das Ersetzen der Zeichenfolge, die "|" entspricht, durch ein einzelnes Zeichen in den codierten Daten spart einige weitere Bytes.
Ich habe die nachgestellten Leerzeichen in den Zeilen 1 und 5 entfernt, was die Regeln möglicherweise etwas verbiegt, aber praktisch erscheint.
Dieses Programm generiert die gepackten Daten:
quelle
Python 2, 159 Bytes
Diese Quelle enthält nicht druckbare Zeichen und wird daher als Hexdump dargestellt, mit dem dekodiert werden kann
xxd -r
.quelle
Schläger,
367364 BytesUngolfed
Aufgrund einer ähnlichen Herausforderung antwortete ich .
quelle
/// ,
282279 BytesVerbesserung: Ich habe festgestellt, dass
//
die Ersetzungsbefehle zu viele enthalten , daher habe ich beschlossen, sie auch (aufm
) zu komprimieren , wodurch ich 3 Bytes gespart habe.Komprimieren Sie den häufigsten Teilstring wiederholt.
Dreizehnte Generation, 282 Bytes
Probieren Sie es online aus!
Erste Generation, 486 Bytes
Keine Komprimierung. Entkam dem
/
und dem\
.Probieren Sie es online aus!
Zweite Generation, 402 Bytes
Komprimierte zwei Leerzeichen auf
a
. Das/a/ /
bedeutet "alle Vorkommen vona
bis zu zwei Leerzeichen ersetzen ".Probieren Sie es online aus!
Dritte Generation, 369 Bytes
Komprimiert
__
aufb
. Das/b/__/
am Anfang bedeutet "alle Vorkommen vonb
bis ersetzen__
".Probieren Sie es online aus!
Vierte Generation, 339 Bytes
Komprimiert
|
aufc
. Das/c/ |/
am Anfang bedeutet "alle Vorkommen vonc
bis ersetzen|
".Probieren Sie es online aus!
Der Rest der Komprimierungsregeln
Also, die Liste der Komprimierungsregeln:
a
.__
aufb
.|
aufc
.aa
aufd
.bb
aufe
.cc
auff
.dd
aufg
.|c
aufh
.\/
aufi
. Sowohl die\
als auch die/
in den Regeln sind weiter entkommen.b_
aufj
.|a
aufk
._
aufl
.//
aufm
.Wie Sie sehen, gibt es überlappende Komprimierungsregeln. Zum Beispiel
g
codiert,dd
welche codiert,aaaa
welche 8 Leerzeichen codiert.quelle
Deine Mutter (nicht konkurrierend), 331 Bytes
Dekodieren Sie den String und dekomprimieren Sie ihn mit dem Jelly-Kompressor
quelle
Python 3, 377 Bytes
Ähnlich wie bei der Javascript-Antwort wurde RLE plus eine Reihe von Ersetzungen für gängige Teilzeichenfolgen verwendet.
Ich glaube, ich habe mit dem Ersetzen ein bisschen übertrieben, wahrscheinlich hat das nicht viel geholfen, aber na ja.
quelle
JavaScript (ES6), 354 Byte
Ein weiterer Versuch. Leider nicht so effizient wie die Lauflänge.
Speichert eine Reihe von Basis-36-Zahlen in der ersten Zeichenfolge, die durch ein
und
!
Trennzeichen begrenzt sind. Ersetzt dann die Zahlen (zusammen mit den!
) durch die Basis-4-Darstellungen der Zahlen. Ersetzt alle 0'en, 1'S, und 2 ist in der Basis-4 - Nummer mit_
,|
bzw., und alle 3'S sind mit den Elementen in der zweiten Folge der Reihe nach ersetzt.quelle
Python 3, 263 Bytes
Erster Durchlauf mit eingebauten Funktionen.
Einige zusätzliche Anführungszeichen und Zeilenumbrüche wurden hinzugefügt, um horizontales Scrollen nur zu Anzeigezwecken zu vermeiden (nicht in der Punktzahl gezählt).
quelle
repr()
der rohen Saite war viel länger als ascii85CJam, 229
Keine funky Charaktere und keine eingebaute Komprimierung :)
Probieren Sie es online aus
quelle
Lua, 353 Bytes
Programm:
Vielen Dank an @jrich für die Komprimierung.
quelle
Ruby,
271262248 BytesProbieren Sie es hier aus
quelle
Vim ,
374365326319313311 Tastenanschläge9 Tastenanschläge dank @Dr Green Eggs und Ham DJ .
Kann wahrscheinlich mit weiter Golf gespielt werden
:nn
?quelle
<number>a <esc>
viel. Wenn Sie diesyl
auf einem Leerzeichen tun , können Sie dies durch ersetzen<number>p
. Das sollte um 8. 2. Sie sparen könnte ersetzenea
mitA
. Sie könnten wahrscheinlich noch mehr nehmen, wenn Sie Ihren Ansatz ändern, aber das sind die schnellen Tipps, die ich sehe._
und|
etc?:s
Ersetzt nur in einer Zeile. Du willst:% s
. Sie können auch einige Tastenanschläge speichern, indem Sie:im
(imap) ausführen, anstatt zu suchen und zu ersetzen. (Obwohl Sie möglicherweise Strg-V oder Strg-Q verwenden müssen, um einem Leerzeichen zuzuordnen):im
kann ich nur noch ein paar Bytes Golf spielen, nehme ich an.Javascript (ES6)
464352 BytesProbieren Sie es hier aus!
quelle
HTML,
482481475 Bytesquelle
05AB1E , 171 Bytes
Probieren Sie es online aus.
Erläuterung:
Lesen Sie diesen 05AB1E-Tipp von mir (Abschnitt Komprimieren großer Ganzzahlen und Komprimieren von Ganzzahllisten? ) , Um zu verstehen, wie die komprimierte Ganzzahl und die Base-8-Liste funktionieren.
quelle
C (gcc) ,
280279 BytesProbieren Sie es online aus!
Heruntergewirtschaftet
Wir definieren ein Alphabet mit 8 Symbolen
" _|/\\()\n"
und komprimieren die Daten, indem wir zwei Symbole pro Byte gemäß ihrem Index im Alphabet packen, wobei das erste Symbol in den Bits 0..2 und das zweite in 3..5 steht. Bit 6 wird gesetzt, um das resultierende Byte in ein druckbares ASCII-Gebiet zu bringen. Ein einfacher RLE wird dann auf dem komprimierten String ausgeführt. Wenn ein Symbol in der Zeichenfolge mehr als zweimal hintereinander vorkommt, wird es als Zeichenpaar gespeichert, wobei das erste die Lauflänge plus 32 (Bit 5-Satz) und das zweite das Symbol selbst enthält.Probieren Sie es online aus!
quelle
Javascript ES6, 314 Bytes
Enthält nicht druckbare Bytes. Verwendet etwas schwarze JS-Magie, um zu laufen. Wenn
console.log()
diese Antwort gültig sein muss, beträgt die Byteanzahl 327.Es war ein großer Schmerz, das richtig zu machen, und ich konnte es nicht schaffen, das loszuwerden
.slice(0,-2)
:(Wird morgen in einer Erklärung bearbeitet, wenn ich weniger müde bin.
Ersetzt jedes einzelne Byte durch den entsprechenden Hex-Wert, damit das Code-Snippet ausgeführt werden kann
quelle
JavaScript,
294292 BytesDies ... ist buchstäblich nur eine Kodierung der Kunst ... damit ...
Wenn
console.log()
erforderlich, beträgt dieByteanzahl 307 bis305 Byte.294-> 292, -2B zum Codieren
\n
nach7
.quelle