Lassen Sie uns versuchen, dieses Stück ASCII-Kunst zu spielen, das einen Golfspieler darstellt:
'\. . |> 18 >> \. '. | O >>. 'o | \. | / \. | / /. ' | jgs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^
Quelle: JGS - http://www.retrojunkie.com/asciiart/sports/golf.htm
Regeln:
- Keine Eingabe erlaubt
- Keine externen Ressourcen erlaubt
- Die Ausgabe muss genau dieser Text sein, der in einer Monospace-Schriftart (Betriebssystemkonsole, JS-Konsole, HTML <pre> -Tag, ...) einschließlich des führenden und nachfolgenden Zeilenumbruchs angezeigt wird.
- Anführungszeichen oder doppelte Anführungszeichen sind zulässig (die JS-Konsole fügt doppelte Anführungszeichen hinzu, wenn Sie eine Zeichenfolge ausgeben. Dies ist in Ordnung.)
Die beste Antwort ist die, bei der in jeder Sprache weniger Zeichen verwendet werden.
Habe Spaß!
Antworten:
CJam, 62 Zeichen
Probieren Sie es online aus.
Testlauf
Wie es funktioniert
2G#b
konvertiert die vorhergehende Zeichenfolge in eine Ganzzahl, indem sie als Basis-65536-Zahl betrachtet wird.128b:c
konvertiert diese Ganzzahl zurück in eine Zeichenfolge ( 110 Byte ), indem sie als Basis-128-Zahl betrachtet wird, die~
dann Folgendes ausführt:(Caret-Notation)
Teilt die Zeichenfolge in Paare von zwei Zeichen und führt für jedes Paar die folgenden Schritte aus: Füge das zweite Zeichen der Zeichenfolge ein, konvertiere es in eine Ganzzahl und wiederhole die Zeichenfolge
" "
so oft wie möglich.Zum Beispiel
".("
wird". "
, da der ASCII - Zeichencode von(
40 ist.Endlich,
Drückt die Zeichenkette
"jgs"
, das Zeichen wird^
7 Mal wiederholt, das Zeichen`
, das Zeichen wird^
51 Mal wiederholt und ein Zeilenvorschub.quelle
Rubin, 107
Ich dachte, ich würde tatsächlich versuchen, das Bild im Code zu "generieren" (anstatt eine vorhandene Komprimierungsfunktion zu verwenden):
In diesem Array-Literal sind einige nicht druckbare Zeichen enthalten.
Hier ist die Hex-Ansicht der Datei, um auch die nicht druckbaren Zeichen anzuzeigen:
Vielen Dank an Ventero für einige wichtige Verbesserungen! (Er hat den Code im Grunde genommen um 50% reduziert.)
quelle
6.times{|i|S[i+1]=' '*55+?|}
2 Zeichen gespeichert werden.i
mehr als einmal. Guter Fang!S.fill{' '*55+?|}
stattdessen spart noch ein paar Zeichen (Sie definieren müssen ,S
wie['']*7
die Änderungputs
zuputs p,S,p
und 1 subtrahieren von allen Ihren y - Koordinaten obwohl). Dann können Sie mit varargs in f (def f(*p,c)
) die[]
in den Funktionsaufrufen speichern . Oh, und du kannst die()
Runde macheny,x
.S
eindimensional machen, können Sie weitere 55 Zeichen speichern;) Hier ist der Code, wenn Sie es nicht selbst tun möchten.bash + iconv + DosBox / x86-Maschinencode (
104979695 Zeichen)Ich schlage vor, dies in ein Skript in einem leeren Verzeichnis zu schreiben. Es ist fast garantiert, dass das Kopieren in ein Terminal alles kaputt macht. noch besser, du kannst das script hier fertig packen .
Erwartete Ausgabe:
Wie es funktioniert
Der Bash-Teil ist nur ein Startprogramm, mit
iconv
dem eine.com
Datei aus den UTF-8-Zeichen des Skripts "dekomprimiert" und mit DosBox gestartet wird.Beachten Sie, dass dies den Inhalt einschränkt, da nicht alle Eingabesequenzen als UCS-2 interpretiert werden können,
iconv
ohne sich zu beschweren. Aus irgendeinem Grund haben viele Vorgänge, die dasbx
Register betrafen, je nach dem Ort, an dem ich sie verwendet habe, Verwüstungen angerichtet, sodass ich dieses Problem mehrmals umgehen musste.Nun besteht die Unicode-Sache nur darin, die "Zeichenanzahl" -Regeln auszunutzen. Die tatsächliche Größe (in Byte) des Skripts ist viel größer als die ursprüngliche
.COM
Datei.Die extrahierte
.com
Datei istund ist 108 Bytes lang. Die NASM-Quelle dafür ist:
All dies ist nur ein Dekomprimierer,
compressed.dat
dessen Format wie folgt lautet:compressed.dat
wird wiederum mit einem Python-Skript aus dem Originaltext generiert .Das Ganze finden Sie hier .
quelle
Python, 156
Hierbei wird eine Zeichenfolgenformatierung mit Leerzeichenauffüllung für eine grundlegende Komprimierung verwendet.
quelle
PHP, 147
Dieser Befehl wird in der Befehlszeile ausgeführt und direkt an die Konsole ausgegeben:
quelle
Perl - 127
129130132135137145Vielen Dank an Ventero und m.buettner für ihre Hilfe bei meiner RegEx-Optimierung.
quelle
s/\d+(?!8?>)/%$&s/rg
/\d++(?!>)/
GCC C - 203 Bytes
Ich dachte, ich hätte ein bisschen Spaß damit. Dies kompiliert auf meiner Version von MinGW und gibt den erwarteten Text aus.
Whitespace zur Verdeutlichung hinzugefügt.
Keine der Websites zum Einfügen von Online-Code erlaubt die Verwendung von Einzelbytezeichen außerhalb des ASCII-Bereichs, daher musste ich sie für ein hochgeladenes Beispiel maskieren. Es ist ansonsten aber identisch. http://codepad.org/nQrxTBlX
Sie können es jederzeit auch mit Ihrem eigenen Compiler überprüfen.
quelle
LOLCODE, 590 Zeichen
Cuz LOLCODE iz perfik language 4 golfin: iz easy 2 verdrängt eine Verschleierung und ist überhaupt nicht ausführlich.
Im pritee sure dis werkz, aber ich doan hat einen LOLCODE-Interpreter ein http://repl.it 's scheint 2 nicht liek funcshuns.
(Tranzlashun wird großzügig von den Robotern von http://speaklolcat.com zur Verfügung gestellt , weil ich speek lolcat mache)
Eingezogene, beabstandete und kommentierte Version des Codes (LOLCODE-Kommentare beginnen mit BTW):
quelle
Python -
205203197Die Zeichenfolge
i
verschachtelt die Zeichen in der ASCII-Kunst mit ihren als Zeichen dargestellten Multiplikiten in umgekehrter Reihenfolge. Außerdem spare ich ein bisschen Platz, indem ich '!' statt 'G' reini
und dann nur noch ersetzen.quelle
Python (145)
Nicht sehr originell, ich weiß.
quelle
Javascript ( ES6 )
193175 BytesBearbeiten: RegPack v3 wurde geändert, um Zeilenumbrüche beizubehalten, eine
for in
Schleife zum Speichern von 3 Bytes zu verwenden und eval für die implizite Konsolenausgabe zu entfernen.Verwenden der Unicode-Komprimierung von xem: 133 Zeichen
quelle
ES6, 155 Zeichen
Probieren Sie einfach einen anderen Ansatz aus:
Führen Sie dies in der JS-Konsole von Firefox aus.
Jedes Unicode-Zeichen hat die folgende Form: \ uD8 [ASCII-Zeichencode] \ uDC [Anzahl der Wiederholungen].
(Unicode-Zeichenfolge erstellt mit: http://jsfiddle.net/LeaS9/ )
quelle
.replace(/../g,a=>String.fromCharCode(a[c='charCodeAt']()&255).repeat(a[c](1)&255))
PHP
Methode 1, einfacher (139 Bytes):
Verwenden einer vorentleerten Zeichenfolge.
Methode 2, Codierung von Leerzeichenfolgen in Buchstaben (192 Byte):
quelle
PowerShell,
192188119Der obige Teil enthält einige Nicht-Zeichen. Hex-Dump:
Das Codierungsschema ist RLE, wobei die Länge über den unteren 7 Bits codiert ist, die das anzuzeigende Zeichen sind.
quelle
Python - 236
quelle
JS (190b) / ES6 (146b) / ES6 verpackt (118 Zeichen)
Führen Sie dies in der JS-Konsole aus:
JS:
ES6:
ES6 gepackt: ( http://xem.github.io/obfuscatweet/ )
Vielen Dank an @nderscore!
quelle
"\n6'\\19.2.24|>18>>\n8\\14.9'1.19|\n7O>>9.17'o16|\n8\\7.38|\n8/\\4.40|\n7/1/2.'41|\n1jgs^^^^^^^`".replace(/\d+/g,a=>18-a?' '.repeat(a):a)+"^".repeat(50)+"\n"
"\n6'\\19.2.24|>0>>\n8\\14.9'1.19|\n7O>>9.17'o16|\n8\\7.38|\n8/\\4.40|\n7/1/2.'41|\n1jgs58`101\n".replace(/\d+/g,a=>' ^'[a>51|0].repeat(a%51)||18)
(stackexchange fügt nach 41 | \ unsichtbare Zeilenumbruchzeichen hinzu)ES6, 163b / 127 Zeichen
Noch ein weiterer Ansatz, dank @nderscore.
Führen Sie es in der Firefox-Konsole aus
JS (163b):
Verpackt (127c):
quelle
Python, 70 UTF-16-Zeichen
Natürlich müssen Sie wahrscheinlich die Hex-Version verwenden:
oder die base64 version:
Die erste "Zeile" des Programms deklariert die UTF-16-Codierung. Die gesamte Datei ist UTF16, aber der Python-Interpreter interpretiert die Codierungszeile immer in ASCII (es ist
#coding:UTF-16BE
). Nach dem Zeilenumbruch beginnt der UTF-16-Text. Es kommt einfach darauf an,print'<data>'.decode('zlib')
wo der Text eine deflationierte Version des Ziel-ASCII-Bildes ist. Es wurde sorgfältig darauf geachtet, dass der Stream keine Surrogate enthält (was die Dekodierung ruinieren würde).quelle
zip
stattzlib
kann ein char sparen.zlib
eher alszip
sehr zweckmäßig.zlib
ist eine gerade Anzahl von Zeichen.C # -
354332Ein bisschen Golf gespielt:
quelle
string[] args
.Main
does not need to have any arguments, it will still compile (in contrast to Java). Removing that and inliningx
brings this to 333 already. You can save another byte by removing the space between the arguments in theDeflateStream
ctor. You can use a cast for the enum member:(CompressionMode)0
, which brings us down to 324. So I'd argue it's not yet the shortest possible ;-)bzip2, 116
After seeing the CJAM answer, I figured this one should qualify too.
I doubt any further explanation is required. :)
quelle
C (gcc), 190 bytes
Try it online!
quelle
Vim, 99 keystrokes
probably golfable
Explanation:
quelle