Dies ist ein Problem bei Luogu OJ. Ich habe mich dazu entschlossen, es hier zu veröffentlichen, da sich viele Leute, darunter ich und mein Freund, für die Lösung dieses Problems mit den wenigsten Charakteren interessieren.
Ihre Aufgabe ist es, folgende ASCII-Art auszugeben:
************
####....#.
#..###.....##....
###.......###### ### ###
........... #...# #...#
##*####### #.#.# #.#.#
####*******###### #.#.# #.#.#
...#***.****.*###.... #...# #...#
....**********##..... ### ###
....**** *****....
#### ####
###### ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
########################################## #----------#
#.....#......##.....#......##.....#......# #----------#
########################################## #----------#
#.#..#....#..##.#..#....#..##.#..#....#..# #----------#
########################################## ############
Dies ist Code-Golf, also gewinnt das kürzeste Programm.
code-golf
ascii-art
kolmogorov-complexity
Hochradioaktiv
quelle
quelle
Antworten:
Brainfuck , 1347 Bytes
Warum tue ich mir das an?
Probieren Sie es online!
Die "lesbare" Version:
quelle
T-SQL,
322 298288 BytesVerwendet die in SQL 2016 und höher integrierte G-Zip-Komprimierung sowie die Base64-Codierung. Weitere Informationen finden Sie in diesem Artikel mit Tipps .
In SSMS müssen Sie entweder nach dem Ändern der SSMS-Zeichenbegrenzungen in den Einstellungen als Text ausgeben oder die Ausgabe einfach kopieren und in das Codefenster einfügen:
BEARBEITUNGEN : Dank @someone wurden 24 Bytes mit einer besser komprimierten Zeichenfolge gespeichert. sparte
CONCAT
dank @digscoop 10 Bytes mit einer impliziten Konvertierung .quelle
H4sIAAAAAAACA6WRQYrEIBQF955CqJ0wdf/jjehM2rwOdofUQvIoHj9f65m2UMLRsYNng/4ZQU0NThjUtBFLDXwRBpWIWYfGpCaIRCy5cZswuFVX6U3bOAA73/+8nXYw2368uWwfj3r5MKzfq4W0UHhEQcUBsk0/b9yafllX9P/YpeDu7rVDTF6226WoPpy6bMUmPZ66UH4BHz4rVE8EAAA=
. Ich kann das nicht testen, weil ich keine Ahnung habe, wie, aber Sie könnten oder könnten nicht in der Lage sein, das wegzulassen=
.=
) und speichert 24 Bytes. denke, meine Kodierungsroutine ist alles andere als ideal.DECLARE @ XML='H4sIAAAAAAACA6WRQYrEIBQF955CqJ0wdf/jjehM2rwOdofUQvIoHj9f65m2UMLRsYNng/4ZQU0NThjUtBFLDXwRBpWIWYfGpCaIRCy5cZswuFVX6U3bOAA73/+8nXYw2368uWwfj3r5MKzfq4W0UHhEQcUBsk0/b9yafllX9P/YpeDu7rVDTF6226WoPpy6bMUmPZ66UH4BHz4rVE8EAAA='SELECT CONCAT('',DECOMPRESS(@.value('.','varbinary(max)')))
CONCAT
Trick verwendet, aber nicht die XML-Variable, daPHP ,
176.155Bytes-21 Bytes dank der super komprimierten Saite von Ryan Moore .
Diese Version verwendet die unformatierte Ausgabe von gzdeflate und enthält nicht druckbare Binärdaten, sodass der Code selbst und der TIO-Link hier nicht veröffentlicht werden können. Hier ist jedoch ein Hex-Dump davon:
Dank @dzaima gibt es hier ein TIO, das bash verwendet, um diese Datei zu erstellen und auszuführen: Probieren Sie es online aus!
Dies kehrt im Grunde die Entleerung um und gibt das Ergebnis aus. Speichern Sie es als Binärdatei und führen Sie es dann folgendermaßen aus:
php mario.php
PHP ,
239216 Bytes-23 Bytes dank der super komprimierten Saite von Ryan Moore .
Probieren Sie es online!
Entspricht der obigen Version, verwendet jedoch base64_encode bei der Ausgabe von
gzdeflate
, sodass der Code lesbar ist und auch TIO-Link verfügbar ist. Dies kehrt im Grunde genommen das base64 um und lässt die Luft ab und druckt das Ergebnis.quelle
Bubblegum , 138 Bytes
Probieren Sie es online!
quelle
Jelly ,
235213 BytesProbieren Sie es online!
Verwendet eine Kombination aus Lauflängencodierung und Ersetzen von Sequenzen mit gemeinsamer Länge 2 durch eine einzelne Ziffer. Verwendet keine Standard-Komprimierungsbibliothek wie gzip. Insgesamt hat 169 Bytes komprimierte Daten und 44 Code.
Erläuterung
Schritt 1: Ersetzen Sie Werte in den Daten zwischen 17 und 39 durch vorgespeicherte Bytepaare
Schritt 2: Run-Length-Decodierung und Konvertierung in einen String
quelle
LaTeX,
452448 BytesErstellt mit Bigram-Ersetzung (und einem Trigramm), anstatt eine Schleife zum Ersetzen mehrerer aufeinanderfolgender Symbole zu programmieren.
LaTeX, 506 Bytes
Höchstwahrscheinlich wird es eine effizientere Variante geben, aber das habe ich per Hand geschafft (keine eingebauten Komprimierungswerkzeuge in LaTeX ...). Ich habe eine kleine Schleife erstellt, um aufeinanderfolgende Sequenzen zu ersetzen.
Terminalausgang (beider Codes):
quelle
Bash + coreutils + xz,
243242240 Bytesquelle
Keg ,
22041012745 BytesProbieren Sie es online!
267 Bytes dank @Sriotchilism O'Zaic gespeichert
1012-Byte-Programm
Probieren Sie es online!
Dies ist nur eine Lauflängencodierung des ASCII-Bildes, die jedoch in Keg implementiert ist
Altes Programm
Probieren Sie es online!
Ich weiß, dass dies wahrscheinlich keine Wettbewerbe gewinnen wird, aber hey, es sieht gut aus. Buchstäblich einfach jedem Zeichen entkommen und es ausdrucken. Ich meine, es könnte Golf gespielt werden, aber liebt ihr nicht einfach ASCII-Kunstprogramme?
quelle
JavaScript (Node.js) ,
265 bis264 Byte1 Byte dank @ Night2 gespeichert
Entleert.
Probieren Sie es online!
JavaScript (Node.js) , 318 Byte
Aufeinanderfolgende String-Ersetzungen.
Probieren Sie es online!
JavaScript (ES7), 340 Byte
Zerquetscht.
Probieren Sie es online!
Oder hier:
Code-Snippet anzeigen
quelle
C (gcc) ,
322,320,318,316 Bytes-2 Bytes dank Ceilingcat.
Probieren Sie es online!
quelle
Bash + Coreutils,
269262261 BytesEin bisschen trivial - hier passiert nichts Schlaues. Ich bin mir nicht sicher, ob ich so gzip verwenden darf. Wenn ich nicht bin, habe ich keinen Zweifel, dass mich jemand anschreit.
(besser wenn ich sinnlose Leerzeichen / Anführungszeichen entferne)
Vielen Dank an @manatwork für das Speichern eines Bytes
Probieren Sie es online!
quelle
echo
Befehl und eine Pipebase64 -d<<<...|gunzip
Python3,
921 916 752 751 539 534476 BytesUnd hier ist eine verbindliche faire Version. Ich habe ein Skript verwendet, um die einzelnen Zeichen zu zählen, sollte identisch sein:
Probieren Sie es online!
Mit freundlicher Genehmigung der großartigen Jungs in den Kommentaren, die viel besser sind als ich!
Und hier ist das (python3) -Skript für alle anderen, die Code generieren möchten und zu faul / effizient sind, um manuell zu zählen:
Python3-Lücke missbraucht, 167 BytesDa nichts über Standardlücken gesagt wurde, schleiche ich diese hier rein, solange ich kann. TIO mag urllib aus irgendeinem Grund nicht. Wenn jemand eine Site kennt, auf der das Skript gehostet werden kann, teilen Sie mir dies bitte mit. Natürlich könnte ein Link-Shortener ein paar Bytes einsparen, aber ich wollte dieses Kaninchenloch nicht weiter runter.
quelle
many people, including me and my friend, are interested about how to solve this problem within the fewest characters
, dachte ich, dass es ein gutes Lachen wert sein könnte; welche Art von passt zum Thema Freizeitprogrammierung dieses Beitrags und zu Teilen dieser Website.print(input())
MarioLANG ,
3287 32863285 BytesIch musste das für das Thema tun.
Probieren Sie es online!
Das ist schrecklich und es tut mir sehr leid.Loops können in MarioLANG sehr teuer werden (bytes weise), wenn Sie nicht schlau sind und ich beinahe den Lebenswillen verloren habe, als ich so weit gekommen bin, dass Mario buchstäblich nur in einer geraden Linie läuft Setzen Sie 6 Speicherzellen auf die korrekten ASCII-Werte und schalten Sie zwischen ihnen um, um sie in der richtigen Reihenfolge auszugeben. Dies kann definitiv weiter verbessert werden und wenn Sie sich wirklich hassen, empfehle ich Ihnen, es zu versuchen.(Ein Byte wurde durch Löschen des letzten Gleichheitszeichens (Floor Character) gespeichert, da Mario die letzte Anweisung trifft, da er auch ohne diese Anweisung fällt, und ein weiteres Byte, indem er erkennt, dass er im Herbst tatsächlich zwei Anweisungen treffen könnte.)
5413 Bytes
Probieren Sie es online!
Dies ist eine Portierung der Antwort von The random guy, die Dennis 'Brainfuck in MarioLANG-Konverter verwendet, um ein paar Bytes zu sparen. Obwohl es offensichtlich viel länger ist, enthält es mehr Funktionen der Sprache und zeigt besser, wie die Sprache funktioniert, so dass ich dachte, ich würde es einschließen.
quelle
Pyth , 211 Bytes
Probieren Sie es online!
Komprimierungsmethode: Da es nur 6 Zeichen gibt
#.-*
, ersetzen das Leerzeichen, das Zeilenumbruchzeichen sowie jedes dieser Zeichen durch einen Buchstaben vona-f
. Anschließend wird das Ganze mit Run-Length codiert (aaaaaccc
->5a3c
etc.) und dann mit zlib komprimiert.Die komprimierte Zeichenfolge ist
quelle
Bash , 486 Bytes
Probieren Sie es online!
Die Run-Length Encoded-Zeichenfolge $ S, die vom Nicht-Golf-Programm generiert wurde, finden Sie hier: Probieren Sie es online aus!
Dann wurden die Variablen $ a, $ b, $ c in $ S durch manuelle Überprüfung ersetzt, und ein einzelner Back-Tick musste in $ S maskiert werden, damit die Variablen verwendet werden konnten.
quelle
Perl,
422396370366365 ZeichenLauflänge in 2 Schritten codiert: aufeinanderfolgende Zeichen und aufeinanderfolgende Muster aus mehreren Zeichen.
Probieren Sie es online!
quelle
PHP,
608565557 BytesVerwendet GMP, die
5kJvr...
Zeichenfolge wurde erstellt, indem zuerst das Original mit Substitutionen in die Basis5und dann GMP in die Basis 62 konvertiert wurde.Online ausführen.
quelle
Python3, 557 Bytes
Lauflänge codiert, dann einige wiederholte Teilzeichenfolgen (Leerzeichen, dann drei "#", "-", umgeben von Blöcken usw.) manuell extrahiert. Auf jeden Fall Raum für Verbesserungen
Python3, 789 Bytes
Spaß mit Zufallsgeneratoren. Das Bild wird lauflängencodiert und dann in 6er-Blöcke aufgeteilt. Der erste Block (Indizes für das zu druckende Symbol) wird von einem Pseudozufallszahlengenerator generiert. Die zweite ist eine Base64-Codierung der 6 Zahlen.
quelle
print(line1,line2,...,sep='\n')
C,
114210681044 BytesEs ist nicht sehr gut, aber ich habe es geschafft. Grundsätzlich ging ich zeilenweise vor und an jeder Stelle, an der eine Funktion plus zwei oder mehr Funktionsaufrufe kürzer war als der ursprüngliche Text, ersetzte ich den Text durch eine Funktion.
Es spart 99 Bytes bei Verwendung von Straight PrintF.
Durch Entfernen der int- und void- Bezeichner und des # include <stdio> wurden 69 Byte gespart . Weitere 2 Bytes wurden gespeichert, indem i anstelle der for- Schleife als global deklariert wurde . Es wurden weitere 3 Bytes gespeichert, wobei printf an zwei Stellen in putchar geändert wurde. Weitere 21 Bytes wurden mit den von @Christian Gibbons vorgeschlagenen Änderungen entfernt: Die Variablendeklarationen am Anfang wurden entfernt, die for- Schleife wurde in eine while- Dekrementierungsschleife geändert und '\ n' in der Funktion n () in 10 geändert . Mit freundlicher Genehmigung dieser Antwort wurden weitere 3 Bytes gespeichert, indem putchar (10) in puts ("") geändert wurde .
1143 Bytes
Probieren Sie es hier online aus .
Ungolfed (ish)
quelle
s,a,h,d,m,
Von Anfang an entfernen , diese werden implizit alsint
s deklariert, wenn Sie sie unmittelbar danach initialisieren.for(;i++>n;)
Dadurch können Sie vermeiden, dass Siei
innerhalb der Schleife erneut schreiben .putchar('\n')
->putchar(10)
um ein paar Bytes mehr zu rasieren. Auch sieht aus wie Sie eine Fremd haben;
in Ihrerz
Funktion.i
insgesamt entsorgen . Anstelle einer for-Schleife sollten Siewhile(n--)
x()
nach oben gehen, können Sie es habenc()
undo()
aufrufen, um einige Bytes zu sparen.x()
selbst kann dauernint*
, da alle Zeiger tendenziell die gleiche Größe haben, und mit druckenprintf(c)
, um ein paar Bytes mehr zu sparen. Zwei Funktionen können etwas verkürzt werden:n(){p(10,1);}
undp(c,n){while(n--)x(&c);}
(setzt Little Endian voraus). Jedes Mal, wenn Sie eine Funktion ohne Argument aufrufen, können Sie den vorherigen Funktionsaufruf wie folgt als Argument verwenden:c();n();
->n(c());
.Python ,
340378 BytesIch habe die Kodierung in der ursprünglichen Antwort durcheinander gebracht, hier eine, die auf der LZW-Komprimierung basiert. Könnte meine ursprüngliche Antwort irgendwann wiederholen.
Probieren Sie es online!
quelle
Reines JavaScript 419 Bytes (keine Lib)
Komprimierung (1 Schritt: Zählen Sie jedes Zeichen in hexadezimalen
**********
Zahlen*a
, 2 Schritt: Konvertieren Sie zwei Zeichen wie * 1 oder # 4 in ein einzelnes Zeichen ohne ASCII-Code)Code-Snippet anzeigen
Dekompression
Code-Snippet anzeigen
quelle
Power Shell + tar, 265 = 9 + 256 Byte
Dieses Skript funktioniert mit Windows und Linux. Das Skript extrahiert die Ausgabe aus dem tar-Archiv
t
(256 Byte). Dast
sollte in das gleiche Verzeichnis wie das Skript gestellt werden.Probieren Sie es online!
Das Powershell-Skript zum Erstellen des Tar-Archivs
t
:quelle
Perl mit Filter: sh Modul, 672 Bytes
Es ist lang, aber es ist auch ziemlich unleserlich, also dachte ich, dass es eine Golfantwort ist ...
Erläuterung: Der Filter ersetzt
S
mit" "
und eine Zahl mitx(num) .
, so zum BeispielS14
wird" "x14
. In Perl bedeutet dies "14-mal Leerzeichen drucken". Darüber hinaus gibt es einige manuelle Kompression für Sequenzen , die oft Variablen auftreten$a
-$h
.quelle
s/regex/replace/g
Syntax nativ unterstützt ?e
Regex Modifikator , die hier benötigt wird , um den x Operator nach der Substitution auszuführen - aber jetzt weiß ich: DSOGL V0.12 , 971 Bytes
Ich habe einfach die ganze Saite auf den Kompressor kopiert. Mir wurde klar, dass die Saite nicht stark komprimiert war.
Probieren Sie es hier aus!
quelle