Golf ASCII-art

31

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ß!

xem
quelle
2
"genau dieser Text": einschließlich der Leerzeile am Anfang? einschließlich der Leerzeile am Ende? mit einem nachgestellten Zeilenumbruch oder ohne? (Das heißt, 0, 1 oder 2 neue Zeilen am Ende?)
Martin Ender
@m.buettner der ausgang sollte genau einen führenden zeilenumbruch und einen nachfolgenden zeilenumbruch / neue zeile haben. (und Anführungszeichen, wenn Sie sie nicht vermeiden können) :)
Xem
1
Das ASCII sieht für mich eher aus wie ein Cricket-Schuss
Mr. Alien
@ Mr.Alien Ich habe es in Martin Kleppes jüngstem Vortrag gesehen: speakerdeck.com/aemkei/… (Video: youtube.com/watch?v=zy-2ruMHdbU )
xem

Antworten:

14

CJam, 62 Zeichen

"Ⴀ지尦렒>Ä΀ྀ㸀⡅쇋蒧ʸ鿀ʃ케袧Ƽ蟀ʄ導뤷쀂萯Ű⋥ἀ਎밊耧台 ⢙⿶ꝍ㕟劢햟騤꩏脽啎"2G#b128b:c~

Probieren Sie es online aus.

Testlauf

$ base64 -d > golf.cjam <<< IgHhgqDsp4DlsKbroJLujJ8+w4TOgOC+gOO4gOKhheyHi+iSp8q46b+AyoPsvIDvoIPuhKvooqfGvOifgMqE5bCO66S37ICC6JCvxbDii6XhvIDgqI7rsIrvgYvogKflj7DCoOKimeK/tuqdjeOVn+WKou2Wn+mopO+em+qpj+iEve6arOWVjiIyRyNiMTI4Yjpjfg==
$ wc -m golf.cjam
62 golf.cjam
$ cjam golf.cjam

      '\                   .  .                        |>18>>
        \              .         ' .                   |
       O>>         .                 'o                |
        \       .                                      |
        /\    .                                        |
       / /  .'                                         |
 jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
$

Wie es funktioniert

2G#b konvertiert die vorhergehende Zeichenfolge in eine Ganzzahl, indem sie als Basis-65536-Zahl betrachtet wird.

128b:ckonvertiert diese Ganzzahl zurück in eine Zeichenfolge ( 110 Byte ), indem sie als Basis-128-Zahl betrachtet wird, die ~dann Folgendes ausführt:

"
^F'^@\^S.^B.^X|^@>^@1^@8^@>^@>^@
^H\^N.^I'^A.^S|^@
^GO^@>^@>^I.^Q'^@o^P|^@
^H\^G.&|^@
^H/^@\^D.(|^@
^G/^A/^B.^@')|^@
^A"2/{)iS*}%"jgs"'^7*'`'^51*N

(Caret-Notation)

2/{)iS*}%

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,

"jgs"'^7*'`'^51*N

Drückt die Zeichenkette "jgs", das Zeichen wird ^7 Mal wiederholt, das Zeichen `, das Zeichen wird ^51 Mal wiederholt und ein Zeilenvorschub.

Dennis
quelle
1
Wirklich großartig, aber wenn ich die 62char-Version aus dem Pastebin nehme und "online probiere", fehlt ein Zeilenumbruch vor der letzten Zeile "jgs ..."
xem
@xem: Haben Sie aus dem Abschnitt RAW-Daten einfügen kopiert ? Wenn ich den formatierten Code kopiere, erhalte ich das gleiche Ergebnis.
Dennis
15

Rubin, 107

Ich dachte, ich würde tatsächlich versuchen, das Bild im Code zu "generieren" (anstatt eine vorhandene Komprimierungsfunktion zu verwenden):

S=?\s*351+?^*60
"⠀鰇𗀈렜렟🀸쐺⠾𗁇롖鱠롢🁶⡷𓱿뢋鲝𛲞🂯⢰𗂹룁🃨⣩볲𗃳룸🄡⤢봪봬뤯鴰🅚⥛𚥝𙵞𜵟𘅧".chars{|q|S[511&r=q.ord]=(r>>10).chr}
puts S

In diesem Array-Literal sind einige nicht druckbare Zeichen enthalten.

Hier ist die Hex-Ansicht der Datei, um auch die nicht druckbaren Zeichen anzuzeigen:

0000000: 533d 3f5c 732a 3335 312b 3f5e 2a36 300a  S=?\s*351+?^*60.
0000010: 22e2 a080 e9b0 87f0 9780 88eb a09c eba0  "...............
0000020: 9ff0 9f80 b8ef a0b9 ec90 baee 80bb efa0  ................
0000030: bcef a0bd e2a0 bef0 9781 87eb a196 e9b1  ................
0000040: a0eb a1a2 f09f 81b6 e2a1 b7f0 93b1 bfef  ................
0000050: a280 efa2 81eb a28b e9b2 9df0 9bb2 9ef0  ................
0000060: 9f82 afe2 a2b0 f097 82b9 eba3 81f0 9f83  ................
0000070: a8e2 a3a9 ebb3 b2f0 9783 b3eb a3b8 f09f  ................
0000080: 84a1 e2a4 a2eb b4aa ebb4 aceb a4af e9b4  ................
0000090: b0f0 9f85 9ae2 a59b f09a a59d f099 b59e  ................
00000a0: f09c b59f f098 85a7 222e 6368 6172 737b  ........".chars{
00000b0: 7c71 7c53 5b35 3131 2672 3d71 2e6f 7264  |q|S[511&r=q.ord
00000c0: 5d3d 2872 3e3e 3130 292e 6368 727d 0a70  ]=(r>>10).chr}.p
00000d0: 7574 7320 53                             uts S

Vielen Dank an Ventero für einige wichtige Verbesserungen! (Er hat den Code im Grunde genommen um 50% reduziert.)

Martin Ender
quelle
Gute Mühe! Ich hatte auf solche Antworten gehofft, die nicht nur den ASCII-
Code verschlüsseln
1
In der zweiten Zeile können 6.times{|i|S[i+1]=' '*55+?|}2 Zeichen gespeichert werden.
ängstlich
@voidpigeon Ah danke. Eigentlich habe ich damit angefangen, dachte aber zunächst, ich brauche imehr als einmal. Guter Fang!
Martin Ender
2
Ich hoffe, es macht Ihnen nichts aus, wenn ich noch ein paar Möglichkeiten erwähne, dies zu verkürzen! Mit S.fill{' '*55+?|}stattdessen spart noch ein paar Zeichen (Sie definieren müssen , Swie ['']*7die Änderung putszu puts p,S,pund 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 machen y,x.
Ventero
1
Wenn Sie S eindimensional machen, können Sie weitere 55 Zeichen speichern;) Hier ist der Code, wenn Sie es nicht selbst tun möchten.
Ventero
13

bash + iconv + DosBox / x86-Maschinencode (104 97 96 95 Zeichen)

echo ↾각슈삨੽₲ɻ庲錿ʴ⇍罋곹삄ૃ蘊尧⺓⺂粘ㄾ㸸ਾ岈⺎➉⸠粓蜊㹏褾鄮漧粐蠊蝜꘮੼⾈葜꠮੼⾇⼠⺂ꤧ੼樠獧惇૳|iconv -futf8 -tucs2>o.com;dosbox o*

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: expected output

Wie es funktioniert

Der Bash-Teil ist nur ein Startprogramm, mit iconvdem eine .comDatei 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, iconvohne sich zu beschweren. Aus irgendeinem Grund haben viele Vorgänge, die das bxRegister 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 .COMDatei.

Die extrahierte .comDatei ist

00000000  be 21 01 ac 88 c2 a8 c0  7d 0a b2 20 7b 02 b2 5e  |.!......}.. {..^|
00000010  83 e0 3f 93 b4 02 cd 21  4b 7f f9 ac 84 c0 75 e4  |..?....!K.....u.|
00000020  c3 0a 0a 86 27 5c 93 2e  82 2e 98 7c 3e 31 38 3e  |....'\.....|>18>|
00000030  3e 0a 88 5c 8e 2e 89 27  20 2e 93 7c 0a 87 4f 3e  |>..\...' ..|..O>|
00000040  3e 89 2e 91 27 6f 90 7c  0a 88 5c 87 2e a6 7c 0a  |>...'o.|..\...|.|
00000050  88 2f 5c 84 2e a8 7c 0a  87 2f 20 2f 82 2e 27 a9  |./\...|../ /..'.|
00000060  7c 0a 20 6a 67 73 c7 60  f3 0a 0a 00              ||. jgs.`....|
0000006c

und ist 108 Bytes lang. Die NASM-Quelle dafür ist:

    org 100h

start:
    ; si: pointer to current position in data
    mov si,data
    ; load the character in al
    lodsb
mainloop:
    ; bx: repetition count
    ; - zero at startup
    ; - -1 after each RLE run
    ; - one less than each iteration after each "literal" run
    ; the constant decrement is not really a problem, as print
    ; always does at least one print, and there aren't enough
    ; consecutive literal values to have wraparound

    ; if the high bit is not set, we have a "literal" byte;
    ; we prepare it in dl just in case
    mov dl,al
    ; then check if it's not set and branch straight to print
    ; notice that bx=0 is fine, as print prints always at least one character
    ; test the top two bits (we need the 6th bit below)
    test al,0xc0
    ; to see if the top bit was set, we interpret it as the sign bit,
    ; and branch if the number is positive or zero (top bit not set)
    jge print
rle:
    ; it wasn't a literal, but a caret/space with a repetition count
    ; space if 6th bit not set, caret otherwise
    mov dl,' '
    ; exploit the parity bit to see if the 6th bit was set
    jnp nocaret
    mov dl,'^'
nocaret:
    ; lower 6 bits: repetition count
    ; and away the top bits and move in bx
    ; we and ax and not al because we have to get rid of the 02h in ah
    and ax,3fh
    xchg ax,bx
print:
    ; print bx times
    mov ah,2
    int 21h
    dec bx
    jg print
    ; read next character
    lodsb
    test al,al
    ; rinse & repeat unless we got a zero
    jnz mainloop
end:
    ret
data:
    ; here be data
    incbin "compressed.dat"
    ; NUL terminator
    db 0

All dies ist nur ein Dekomprimierer, compressed.datdessen Format wie folgt lautet:

  • Wenn das High-Bit nicht gesetzt ist, drucken Sie das Zeichen wie es ist.
  • Andernfalls sind die niedrigen 6 Bits die Wiederholungszahl und das zweithöchste Bit gibt an, ob ein Leerzeichen (Bit nicht gesetzt) ​​oder ein Caret (Bit gesetzt) ​​gedruckt werden muss.

compressed.datwird wiederum mit einem Python-Skript aus dem Originaltext generiert .

Das Ganze finden Sie hier .

Matteo Italia
quelle
10

Python, 156

print'''
%6s'\%19s.  .%24s|>18>>
%8s\%14s.%9s' .%19s|
%7sO>>%9s.%17s'o%16s|
%8s\%7s.%38s|
%8s/\%4s.%40s|
%7s/ /  .'%41s|
 jgs'''%(('',)*19)+'^'*7+'`'+'^'*51

Hierbei wird eine Zeichenfolgenformatierung mit Leerzeichenauffüllung für eine grundlegende Komprimierung verwendet.

grc
quelle
7

PHP, 147

Dieser Befehl wird in der Befehlszeile ausgeführt und direkt an die Konsole ausgegeben:

php -r 'echo gzinflate(base64_decode("41IAA/UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHQUBCHOmAiwsA"));'
zimperliches Ossifrage
quelle
6

Perl - 127 129 130 132 135 137 145

print q(
6'\19.2.24|>18>>
8\14.9'1.19|
7O>>9.17'o16|
8\7.38|
8/\4.40|
7/1/2.'41|
1jgs^^^^^^^`0
)=~s/\d++(?!>)/$"x$&||'^'x51/reg

Vielen Dank an Ventero und m.buettner für ihre Hilfe bei meiner RegEx-Optimierung.

core1024
quelle
Sie können ein Zeichen mits/\d+(?!8?>)/%$&s/rg
Ventero
@Ventero danke für den Vorschlag.
Core1024
2
Sie können einen anderen speichern, indem Sie einen besitzergreifenden Quantifizierer verwenden :/\d++(?!>)/
Martin Ender
@m.buettner das wusste ich nicht. Jeden Tag Neues lernen :)
core1024
4

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.

char*v="\n ú'\\ í.  . è|>18>>\n ø\\ ò. ÷' . í|\n ùO>> ÷. ï'o ð|\n ø\\ ù. Ú|\n ø/\\ ü. Ø|\n ù/ /  .' ×|\n jgs^ù`^Í\n";
main(g,o,l){
    for(;*v;
        g=!g&*v<0&l?-*v++:g){
        v+=!(l=*v-35);
        putchar((g-=g>0)?o:(o=*v++));
    }
}

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.

Kaslai
quelle
4

LOLCODE, 590 Zeichen

Cuz LOLCODE iz perfik language 4 golfin: iz easy 2 verdrängt eine Verschleierung und ist überhaupt nicht ausführlich.

HAI
HOW DUZ I D C T
I HAZ A O
I HAZ A N ITZ 0
IM IN YR LOOP UPPIN YR N TIL BOTH SAEM N AN T
O R SMOOSH O AN C MKAY
IM OUTTA YR LOOP
FOUND YR O
IF U SAY SO
VISIBLE ""
VISIBLE SMOOSH "  '\" AN D " " 19 AN ".  ." AN D " " 24 AN "|>18>>" MKAY
VISIBLE "    \              .         ' .                   |"
VISIBLE "   O>>         .                 'o                |"
VISIBLE SMOOSH "    \       ." AN D " " 38 AN "|" MKAY
VISIBLE SMOOSH "    /\    ." AN  D " " 40 AN "|" MKAY
VISIBLE SMOOSH "   / /  .'" AN D " " 41 AN "|" MKAY
VISIBLE SMOOSH "jgs^^^^^^^`" AN D "^" 51 MKAY
VISIBLE ""
KTHXBYE

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):

HAI BTW All LOLCODE programs start with HAI
    HOW DUZ I D C T BTW Function declarations follow the form "HOW DUZ I <func-name>[ <func-arg1>[ <func arg2>[ ...]]]". In this case, D is a function that repeats a YARN C (YARN is the equivalent of string in LOLCODE) NUMBR T (NUMBR = int) times.
        I HAZ A O BTW Variable declarations follow the form "I HAZ A <var-name>"

        I HAZ A N ITZ 0 BTW Variables can be intialised when declared by appending " ITZ <init-value>" to the declaration 
        IM IN YR LOOP UPPIN YR N TIL BOTH SAEM N AN T BTW Loops follow the form "IM IN YR LOOP <action> TIL <condition>" where action and condition are "UPPIN YR N" and "BOTH SAEM N AN T", respectively, in this case
            O R SMOOSH O AN C MKAY BTW "R" assigns a new value to a variable. YARN (string) concatenation follows the form "SMOOSH <str-1> AN <str-2>[ AN <str-3>[...]] MKAY"
        IM OUTTA YR LOOP BTW "IM OUTTA YR LOOP" ends LOLCODE loops

        FOUND YR O BTW "FOUND YR <value>" returns a value
    IF U SAY SO BTW "IF U SAY SO" ends functions

    VISIBLE "" BTW "VISIBLE" prints its argument to stdout
    VISIBLE SMOOSH "  '\" AN D " " 19 AN ".  ." AN D " " 24 AN "|>18>>" MKAY BTW The function I wrote above only "pays off" in terms of characters added/saved when repeating 19 or more characters (the function call itself takes 8 characters, assuming a one-character first argument and a 2-digit second one; you need to factor in the added quotes (2 characters), spaces (4) and ANs (4) for 18 total extra characters; and possible SMOOSH/MKAY)
    VISIBLE "    \              .         ' .                   |"
    VISIBLE "   O>>         .                 'o                |"
    VISIBLE SMOOSH "    \       ." AN D " " 38 AN "|" MKAY
    VISIBLE SMOOSH "    /\    ." AN  D " " 40 AN "|" MKAY
    VISIBLE SMOOSH "   / /  .'" AN D " " 41 AN "|" MKAY
    VISIBLE SMOOSH "jgs^^^^^^^`" AN D "^" 51 MKAY
    VISIBLE ""    
KTHXBYE BTW "KTHXSBYE" ends LOLCODE programs
wec
quelle
haha, nette Kompression, wie es: D
Joshua
3

Python - 205 203 197

i="""
G^y`G^MsGgGj!G
G|!o'G.!H/!G/!M
G|!n.!J\G/!N
G|!l.!M\!N
G|!VoG'!W.!O>HO!M
G|!Y.!G'!O.!T\!N
G>H8G1G>G|!^.!H.!Y\G'!L
G""".replace('!','G ')
o=''
j=140
while j:j-=2;o+=ord(i[j+1])%70*i[j]
print o

Die Zeichenfolge iverschachtelt 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' rein iund dann nur noch ersetzen.

Alex L
quelle
3

Python (145)

'eJzjUgAB9RgFTKAHRthBjZ2hhZ0dF5SHphuhSx2rCTVQff52dlj0wPXm49IHtw+n83Do048hQRdCnz4QKuipE6sNqC8rvTgOAhLiSAdcAG/9Ri8='.decode('base64').decode('zip')

Nicht sehr originell, ich weiß.

ɐɔıɐɔuʇǝɥʇs
quelle
2

Javascript ( ES6 ) 193 175 Bytes

Bearbeiten: RegPack v3 wurde geändert, um Zeilenumbrüche beizubehalten, eine for inSchleife zum Speichern von 3 Bytes zu verwenden und eval für die implizite Konsolenausgabe zu entfernen.

_="\nx'\\w{. z~|>18>>\n~\\~x.~ 'z{yx O>>~z 'owy~\\xzwxy~/\\{zw~yx / /  .'ww~ y jgs}`}}}}}}}^^\n~x  }^^^^^^^{   z .wy|\nx{{w~~";for(i of "wxyz{}~")with(_.split(i))_=join(pop())

Verwenden der Unicode-Komprimierung von xem: 133 Zeichen

eval(unescape(escape('𧰽𘡜𫡸𙱜𧁷𮰮𘁺嵃🠱𞀾🡜𫡾𧁜屮𛡾𘀧𮡻𮑸𘁏🠾岍𘀧𫱷𮑾𧁜𮁺𭱸𮑾𛱜𧁻𮡷峀𮀠𛰠𛰠𘀮𙱷𭱾𘁹𘁪𩱳𯑠𯑽𯑽𯑽𯑞𧡜𫡾𮀠𘁽𧡞𧡞𧡞𧡻𘀠𘁺𘀮𭱹𯁜𫡸𮱻𭱾割𞱦𫱲𚁩𘁯𩠠𘡷𮁹𮡻𯑾𘠩𭱩𭁨𚁟𛡳𬁬𪑴𚁩𚐩𧰽𪡯𪑮𚁰𫱰𚀩𚐠').replace(/uD./g,'')))
nderscore
quelle
toll! <3 die Nachbearbeitung des RegPacks! psst, du kannst es in 143b schaffen: xem.github.io/obfuscatweet
xem
@xem 143 Zeichen, aber viel mehr Bytes
nderscore
Ja, tut mir leid, 143 Zeichen. Die Frage besagt, dass Sie Zeichen zählen können. auf jeden fall ist der ansatz des regpack interessanter als die unicode-obfuscation;)
xem
2
FWIW, mothereff.in/byte-counter ist ein Tool, das sowohl Zeichen als auch Bytes zählt (gemäß UTF-8).
Mathias Bynens
2

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].

"𒠁𘀆𙰁𧀁𘀓𛠁𘀂𛠁𘀘𯀁🠁𜐁𞀁🠂𒠁𘀈𧀁𘀎𛠁𘀉𙰁𘀁𛠁𘀓𯀁𒠁𘀇𣰁🠂𘀉𛠁𘀑𙰁𫰁𘀐𯀁𒠁𘀈𧀁𘀇𛠁𘀦𯀁𒠁𘀈𛰁𧀁𘀄𛠁𘀨𯀁𒠁𘀇𛰁𘀁𛰁𘀂𛠁𙰁𘀩𯀁𒠁𘀁𪠁𩰁𬰁𧠇𨀁𧠳𒠁".replace(/../g,a=>String.fromCharCode(a[c='charCodeAt']()&255).repeat(a[c](1)&255))

(Unicode-Zeichenfolge erstellt mit: http://jsfiddle.net/LeaS9/ )

xem
quelle
-3:.replace(/../g,a=>String.fromCharCode(a[c='charCodeAt']()&255).repeat(a[c](1)&255))
nderscore
Oh, großartig, danke!
Xem
2

PHP

Methode 1, einfacher (139 Bytes):

Verwenden einer vorentleerten Zeichenfolge.

<?=gzinflate(base64_decode('41IAA/UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHQUBCHOmACwA='));?>

Methode 2, Codierung von Leerzeichenfolgen in Buchstaben (192 Byte):

<?=preg_replace_callback('#[D-NP-Zu]#',function($e){return str_repeat('a'<$e[0]?'^':' ',ord($e[0])-66);},"
H'\U.D.Z|>18>>
J\P.K' .U|
IO>>K.S'oR|
J\I.WS|
J/\F.ZR|
I/ /D.'ZS|
 jgs^^^^^^^`u
")?>
LSerni
quelle
2

PowerShell, 192 188 119

 -join('̠§Üঠ®Ġ®ఠü¾±¸ľРÜܠ®Ҡ§ ®ঠüΠÏľҠ®ࢠ§ïࠠüРÜΠ®ጠüР¯ÜȠ®ᐠüΠ¯ ¯Ġ®§ᒠü êçóϞà᧞'[0..70]|%{"$([char]($_%128))"*(+$_-shr7)})

Der obige Teil enthält einige Nicht-Zeichen. Hex-Dump:

00: 002D 006A 006F 0069 │ 006E 0028 0027 008A  -join('
10: 0320 00A7 00DC 09A0 │ 00AE 0120 00AE 0C20  ̠§Üঠ®Ġ®ఠ
20: 00FC 00BE 00B1 00B8 │ 013E 008A 0420 00DC  ü¾±¸ľРÜ
30: 0720 00AE 04A0 00A7 │ 00A0 00AE 09A0 00FC  ܠ®Ҡ§ ®ঠü
40: 008A 03A0 00CF 013E │ 04A0 00AE 08A0 00A7  ΠÏľҠ®ࢠ§
50: 00EF 0820 00FC 008A │ 0420 00DC 03A0 00AE  ïࠠüРÜΠ®
60: 1320 00FC 008A 0420 │ 00AF 00DC 0220 00AE  ጠüР¯ÜȠ®
70: 1420 00FC 008A 03A0 │ 00AF 00A0 00AF 0120  ᐠüΠ¯ ¯Ġ
80: 00AE 00A7 14A0 00FC │ 008A 00A0 00EA 00E7  ®§ᒠü êç
90: 00F3 03DE 00E0 19DE │ 0027 005B 0030 002E  óϞà᧞'[0.
A0: 002E 0037 0030 005D │ 007C 0025 007B 0022  .70]|%{"
B0: 0024 0028 005B 0063 │ 0068 0061 0072 005D  $([char]
C0: 0028 0024 005F 0025 │ 0031 0032 0038 0029  ($_%128)
D0: 0029 0022 002A 0028 │ 002B 0024 005F 002D  )"*(+$_-
E0: 0073 0068 0072 0037 │ 0029 007D 0029       shr7)})

Das Codierungsschema ist RLE, wobei die Länge über den unteren 7 Bits codiert ist, die das anzuzeigende Zeichen sind.

Joey
quelle
1

Python - 236

s=' ';print('\n'+6*s+"'\\"+19*s+'.  .'+24*s+"|>18>>\n"+8*s+'\\'+14*s+'.'+9*s+"' ."+19*s+"|\n       O>>"+9*s+'.'+17*s+"'o"+16*s+'|\n'+8*s+"\\       ."+38*s+'|\n'+8*s+"/\\    ."+40*s+"|\n       / /  ."+42*s+"|\n jgs^^^^^^^`"+51*'^'+'\n')
Ian D. Scott
quelle
1

JS (190b) / ES6 (146b) / ES6 verpackt (118 Zeichen)

Führen Sie dies in der JS-Konsole aus:

JS:

"\n7'\\20.3.25|>18>>\n9\\15.10'2.20|\n8O>>10.9 9'o17|\n9\\8.39|\n9/\\5.41|\n8/2/3.'42|\n2jgs^^^^^^^`".replace(/\d+/g,function(a){return 18==a?a:Array(+a).join(' ')})+Array(51).join("^")+"\n"

ES6:

"\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)

ES6 gepackt: ( http://xem.github.io/obfuscatweet/ )

eval(unescape(escape('𘡜𫠶𙱜𧀱𞐮𜠮𜠴𯀾𜀾🡜𫠸𧁜𜐴𛠹𙰱𛠱𞑼𧁮𝱏🠾𞐮𜐷𙱯𜐶𯁜𫠸𧁜𝰮𜰸𯁜𫠸𛱜𧀴𛠴𜁼𧁮𝰯𜐯𜠮𙰴𜑼𧁮𜑪𩱳𝐸𨀱𜀱𧁮𘠮𬡥𬁬𨑣𩐨𛱜𩀫𛱧𛁡🐾𙰠𧠧𦱡🠵𜑼𜁝𛡲𩑰𩑡𭀨𨐥𝐱𚑼𯀱𞀩').replace(/uD./g,'')))

Vielen Dank an @nderscore!

xem
quelle
1
ES6 runter auf 158: (geht runter auf 124 Zeichen mit Unicode-Komprimierung)"\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"
nderscore
oh, toll, ich wusste nicht, wiederholen
Xem
@nderscore tut mir nicht leid, es ist toll :) aber die letzte Zeile in meiner Firefox-Konsole scheint kaputt zu sein
xem
146: "\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)
nderscore
Danke, ich habe die Antwort aktualisiert und es funktioniert. :) Ich habe auch eine weitere 158b-Antwort hinzugefügt, vielleicht haben Sie eine Idee, diese zu verbessern!
Xem
1

ES6, 163b / 127 Zeichen

Noch ein weiterer Ansatz, dank @nderscore.

Führen Sie es in der Firefox-Konsole aus

JS (163b):

"\n'\\..|>18>>\n\\. '.|\nO>>    .'o|\n\\.&|\n/\\.(|\n//.')|\njgs<`h\n".replace(/[^'`Og\n>\\,-8j-|]/g,a=>" ^"[a=a.charCodeAt(),a>53|0].repeat(a%53))

Verpackt (127c):

eval(unescape(escape('𘡜𫠆𙱜𧀓𛠂𛠘𯀾𜐸🠾𧁮𒁜𧀎𛠉𙰁𛠓𯁜𫠇𣰾🠉𛠑𙱯𔁼𧁮𒁜𧀇𛠦𯁜𫠈𛱜𧀄𛠨𯁜𫠇𛰁𛰂𛠧𚑼𧁮𐑪𩱳🁠𪁜𫠢𛡲𩑰𫁡𨱥𚀯𦱞𙱠𣱧𧁮🡜𧀬𛐸𪠭𯁝𛱧𛁡🐾𘠠𧠢𦱡👡𛡣𪁡𬡃𫱤𩑁𭀨𚐬𨐾𝐳𯀰𧐮𬡥𬁥𨑴𚁡𙐵𜰩𚐠').replace(/uD./g,'')))
xem
quelle
Ich bin sicher, @nderscore wird eine Verbesserung finden :)
Xem
Ich denke, SE bricht einige der Zeichen in dieser Lösung. In ähnlicher Weise wie bei Ihrer anderen Antwort: jsfiddle.net/2Fbxq/3
nderscore
Nun, das ist eine großartige Verbesserung (und eine sehr schöne Fiedel). Ich aktualisiere die Antwort.
Xem
1

Python, 70 UTF-16-Zeichen

挣摯湩㩧呕ⵆ㘱䕂
print砧RԘꁌ䘇䇘鶍薡ᶝ谗ꚋꄝᵍᆫ〵ﺍ癶㑘㗁ࣔᆷ஧楱返䄡鈛絆吠叐嘧䠟噣煺М쐤ຑꀀ䜮'.decode(稧楬b')

Natürlich müssen Sie wahrscheinlich die Hex-Version verwenden:

23 63 6F 64 69 6E 67 3A 55 54 46 2D 31 36 42 45 0A 00 70 00 72 00 69 00 6E 00 74 00 27 78 9C E3 52 00 03 F5 18 05 4C A0 07 46 D8 41 8D 9D A1 85 9D 1D 17 8C 8B A6 1D A1 4D 1D AB 11 35 30 8D FE 76 76 58 34 C1 35 E7 E3 D4 08 B7 11 A7 0B 71 69 D4 8F 21 41 1B 92 46 7D 20 54 D0 53 27 56 1F 48 63 56 7A 71 1C 04 24 C4 91 0E 00 A0 2E 47 05 00 27 00 2E 00 64 00 65 00 63 00 6F 00 64 00 65 00 28 00 27 7A 6C 69 62 00 27 00 29 00

oder die base64 version:

I2NvZGluZzpVVEYtMTZCRQoAcAByAGkAbgB0ACd4nONSAAP1GAVMoAdG2EGNnaGFnR0XjIumHaFNHasRNTCN/nZ2WDTBNefj1Ai3EacLcWnUjyFBG5JGfSBU0FMnVh9IY1Z6cRwEJMSRDgCgLkcFACcALgBkAGUAYwBvAGQAZQAoACd6bGliACcAKQA=

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).

nneonneo
quelle
1
Nun, die erste Zeile hat mich denken „oh toll, jemand Unicode - Python gemacht“
seequ
genial! Können Sie dasselbe in ~ 35b mit UTF-32 tun? :)
Xem
zipstatt zlibkann ein char sparen.
Cees Timmerman
@xem: Die meisten Zeichen sind mit UTF-32 ungültig (Zeichen müssen <= 0x10ffff sein).
Nneonneo
1
@CeesTimmerman: eigentlich ist die Auswahl zlibeher als zipsehr zweckmäßig. zlibist eine gerade Anzahl von Zeichen.
Nneonneo
1

C # - 354 332

using System;
using System.IO;
using System.IO.Compression;
Klasse X
{
    static void Main (string [] args)
    {
        var x = Convert.FromBase64String ("41IAA / UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHFH"
        Console.WriteLine (neuer StreamReader (neuer DeflateStream (neuer MemoryStream (x), CompressionMode.Decompress)). ReadToEnd ());
    }
}

Ein bisschen Golf gespielt:

Using System; using System.IO; mit System.IO.Compression; class X {static void Main () {var x = Convert.FromBase64String ( "41IAA / UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHQUBCHOmAiwsA"); Console.WriteLine (new Stream (neu DeflateStream (new Memory (x), (CompressionMode) 0)). ReadToEnd ());}}
Erez Robinson
quelle
Das ist nicht wirklich gut, wenn Sie noch Variablennamen haben, die länger als ein Zeichen sind. Oder unnötige Dinge wie string[] args.
Joey
Keine Ahnung von den Regeln, aber es gibt keinen anderen Weg in C #, und Code muss kompiliert werden, dies ist der kürzestmögliche.
Erez Robinson
1
Main does not need to have any arguments, it will still compile (in contrast to Java). Removing that and inlining x brings this to 333 already. You can save another byte by removing the space between the arguments in the DeflateStream 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 ;-)
Joey
Right you are..
Erez Robinson
1

bzip2, 116

After seeing the CJAM answer, I figured this one should qualify too.

$ wc -c golf.txt.bz2 
116 golf.txt.bz2
$ bzip2 -dc golf.txt.bz2

  '\                   .  .                        |>18>>
    \              .         ' .                   |
   O>>         .                 'o                |
    \       .                                      |
    /\    .                                        |
   / /  .'                                         |
jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

$

I doubt any further explanation is required. :)

Alex Mooney
quelle
1
Using Bubblegum with DEFLATE gets it down to 77 bytes. Try it online!
Miles
0

C (gcc), 190 bytes

r(n,c){while(n--)putchar(c);}f(c){for(char*s="F'\\S.B.X|>18>>\nH\\N.I' .S|\nGO>>I.Q'oP|\nH\\G.ZL|\nH/\\D.ZN|\nG/ /B.'ZN |\n jgs^^^^^^^`";c=*s++;)c>64&&c<91&&c^79?r(c-64,32):r(1,c);r(51,94);}

Try it online!

gastropner
quelle
0

Vim, 99 keystrokes

63i^<Esc>0R jgs<C-O>7l`<Esc>O<Esc>55I <Esc>A|<Esc>Y5PA>18>><Esc>7|R'\<Down>\<Down><Left><Left>O>><Down><Left><Left>\<Down>\<Down><Left><Left><Left>/<Up>/<Down>/<Right><Right>.'<Up>.<Right><Up>.<Right><Right><Up>.<Right><Right><Right><Up>.<Right><Right><Right><Up>.<Right><Right>.<Right><Right><Down>'<Right>.<Down><Right>'o

probably golfable

Explanation:

63i^<Esc>0R jgs<C-O>7l`<Esc>
Bottom line, 63 '^'s, replace the beginning with ' jgs', then move 7 caracters to the right and replace one character with '`'

O<Esc>55I <Esc>A|<Esc>
Above current line, add one line and insert 55 spaces, then a trailing '|'

Y5PA>18>><Esc>
Copy that line and paste it above five times. Cursor ends up in topmost line. Append '>18>>'

7|R'\<Down>\<Down><Left><Left>O>><Down><Left><Left>\<Down>\<Down><Left><Left><Left>/<Up>/<Down>/<Right><Right>.'<Up>.<Right><Up>.<Right><Right><Up>.<Right><Right><Right><Up>.<Right><Right><Right><Up>.<Right><Right>.<Right><Right><Down>'<Right>.<Down><Right>'o
Go to 7th column, enter Replace-mode, and replace spaces with golfer and golf ball trail. Arrow keys are used to move around, since it uses fewer keypresses to use the arrow keys instead of <C-o>+movement for up to three keypresses.
oktupol
quelle