골프 ASCII 예술


31

골프 맨을 대표하는 아스키 아트를 골라 봅시다 :

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

출처 : JGS- http : //www.retrojunkie.com/asciiart/sports/golf.htm

규칙 :

  • 입력이 허용되지 않습니다
  • 외부 자원이 허용되지 않습니다
  • 출력은이 텍스트 여야하며 선행 및 후행 줄 바꿈을 포함하여 모노 스페이스 글꼴 (OS 콘솔, JS 콘솔, HTML <pre> 태그 등)로 표시되어야합니다.
  • 주변 따옴표 또는 큰 따옴표가 허용됩니다 (JS 콘솔은 문자열을 출력 할 때 큰 따옴표를 추가합니다. 괜찮습니다)

가장 좋은 대답은 모든 언어에서 적은 문자 를 사용하는 것입니다.

즐기세요!


2
"정확하게이 텍스트": 처음에 빈 줄 포함? 끝에 빈 줄을 포함하여? 후행 줄 바꿈이 있거나 없습니까? (마지막에 0, 1 또는 2 개의 줄 바꿈이 있습니까?)
Martin Ender

@ m.buettner 출력에는 정확히 하나의 선행 줄 바꿈과 하나의 후행 줄 바꿈 / 줄 바꿈이 있어야합니다. (그리고 당신이 그들을 피할 수 없다면 따옴표) :)
xem

1
이 ASCII는 크리켓 샷처럼 보입니다
Mr. Alien

@ Mr.Alien 나는 Martin Kleppe의 최근 강연에서 그것을 보았습니다 : speakerdeck.com/aemkei/… (동영상 : youtube.com/watch?v=zy-2ruMHdbU )
xem

답변:


14

CJam, 62 자

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

온라인으로 사용해보십시오.

시운전

$ 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^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
$

작동 원리

2G#b 선행 문자열을 기본 -65536 숫자로 간주하여 정수로 변환합니다.

128b:cbase-128 숫자를 고려 하여 해당 정수를 문자열 ( 110 바이트 )로 다시 변환 한 ~후 다음을 실행합니다.

"
^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

(캐럿 표기)

2/{)iS*}%

문자열을 두 문자 쌍으로 나누고 각 쌍에 대해 다음을 수행합니다. 문자열의 두 번째 문자를 팝하고 정수로 변환 한 후 문자열 " "을 여러 번 반복합니다 .

예를 들어, 의 ASCII 문자 코드 는 40 이므로 , ".("가됩니다 .". "(

마지막으로

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

문자열 "jgs", ^7 번 반복되는 문자 `, 문자 , ^51 번 반복 되는 문자 및 줄 바꿈을 푸시합니다 .


1
정말 대단하지만, pastebin에서 62char 버전을 가져 와서 "온라인으로 시도"하면 마지막 줄 "jgs ..."앞에 줄 바꿈이 없습니다.
xem

@xem : RAW 붙여 넣기 데이터 섹션 에서 복사 했습니까 ? 포맷 된 코드를 복사하면 동일한 결과가 나타납니다.
Dennis

15

루비, 107

실제로 기존 압축 기능을 사용하는 대신 코드에서 이미지를 "생성"하려고 생각했습니다.

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

해당 배열 리터럴에 인쇄 할 수없는 문자가 있습니다.

인쇄 할 수없는 문자도 표시하기위한 파일의 16 진보기입니다.

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

주요 개선 사항에 대한 Ventero에게 감사드립니다! (기본적으로 코드를 50 % 줄였습니다.)


좋은 노력! 난 그냥 ASCII를
압축

1
두 번째 줄은 6.times{|i|S[i+1]=' '*55+?|}2자를 저장하는 것입니다.
분노한

@voidpigeon 아 감사합니다. 나는 실제로 그것으로 시작했지만 처음에는 i한 번 이상 필요하다고 생각 했습니다. 잘 잡아!
마틴 엔더

2
이것을 단축시키는 몇 가지 방법을 언급해도 괜찮습니다. 사용 S.fill{' '*55+?|}대신하는 것은 몇 문자 (사용자가 정의해야합니다 저장 S['']*7의 변경 putsputs p,S,p귀하의 모든 y 좌표 생각에서 1을 뺍니다). 그런 다음 f ( def f(*p,c)) 에서 varargs를 사용 []하여 함수 호출에서를 저장할 수 있습니다 . 아, 그리고 당신은 ()주위를 떨어 뜨릴 수 있습니다 y,x.
Ventero

1
당신이 할 경우 S 한 차원 다른 55 개 문자를 저장할 수 있습니다) 여기에 코드입니다 당신이 스스로를하고 싶지 않는 경우가.
Ventero

13

bash + iconv + DosBox / x86 머신 코드 (104 97 96 95 자)

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

이것을 빈 디렉토리의 스크립트에 넣는 것이 좋습니다. 터미널에 복사하여 붙여 넣으면 모든 것이 깨질 것입니다. 더 나은 방법으로, 여기에서 기성품 스크립트를 얻을 수 있습니다 .

예상 출력 : expected output

작동 원리

bash 부분은 스크립트의 UTF-8 문자에서 파일 iconv을 "압축 해제"하고 DosBox로 .com파일을 시작하는 데 사용되는 실행기 일뿐 입니다.

모든 입력 시퀀스가 iconv불평하지 않고 UCS-2로 해석 될 수있는 것은 아니기 때문에 이것은 내용에 약간의 제한이 있습니다 . 예를 들어, 어떤 이유로 bx레지스터를 사용 하는 많은 작업이 내가 사용한 위치에 따라 혼란을 겪었 으므로이 문제를 여러 번 해결해야했습니다.

이제 유니 코드는 "문자 수"규칙을 활용하는 것입니다. 스크립트의 실제 크기 (바이트)는 원본보다 훨씬 큽니다..COM 파일 .

추출 된 .com파일은

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

길이는 108 바이트입니다. NASM 소스는 다음과 같습니다.

    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

이 모든 compressed.dat형식 의 압축 해제 기는 다음과 같습니다.

  • 높은 비트가 설정되지 않은 경우 문자를 그대로 인쇄하십시오.
  • 그렇지 않으면, 낮은 6 비트는 반복 카운트이고, 두 번째로 높은 비트는 공백 (비트 미 설정) 또는 캐럿 (비트 세트)을 인쇄해야하는지 여부를 지정합니다.

compressed.dat원래 텍스트에서 Python 스크립트 를 사용하여 생성 됩니다.

모든 것은 여기 에서 찾을 수 있습니다 .


10

파이썬, 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

이것은 기본적인 압축을 위해 공백으로 채워진 문자열 형식을 사용합니다.


7

PHP, 147

이것은 명령 행에서 실행되며 콘솔로 직접 출력됩니다.

php -r 'echo gzinflate(base64_decode("41IAA/UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHQUBCHOmAiwsA"));'

6

펄-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

RegEx 최적화에 도움을 주신 Venterom.buettner 에게 감사드립니다 .


한 캐릭터를 저장할 수 있습니다s/\d+(?!8?>)/%$&s/rg
Ventero

@ Ventro는 제안에 감사드립니다.
core1024

2
소유 수량/\d++(?!>)/
자를

@ m.buettner 나는 그것을 몰랐다. 매일 새로운 것을 배우기 :)
core1024

4

GCC C-203 바이트

나는 이것으로 재미있을 것이라고 생각했다. 이것은 내 MinGW 버전에서 컴파일되고 예상 텍스트를 출력합니다.

명확성을 위해 공백이 추가되었습니다.

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++));
    }
}

사이트를 붙여 넣는 온라인 코드 중 어느 것도 ASCII 범위를 벗어난 단일 바이트 문자를 사용할 수 없으므로 업로드 된 예제에서는 이스케이프해야했습니다. 그래도 동일합니다. http://codepad.org/nQrxTBlX

언제든지 자신의 컴파일러로 확인할 수도 있습니다.


4

LOLCODE, 590 자

Cuz LOLCODE iz perfik language 4 golfin : iz easy 2는 난독 한 표현이며, 장황하지는 않습니다.

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

나는 확실하게 diswerkz이지만, 나는 doan에 LOLCODE 인터프리터가 http://repl.it 있습니다 .

( http://speaklolcat.com 의 로봇 cuz I doan speek lolcat에 의해 관대하게 제공되는 Tranzlashun )


코드의 들여 쓰기, 간격 및 주석 처리 된 버전 (LOLCODE 주석은 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

하하, 좋은 압축 : D
Joshua Joshua

3

파이썬 - 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

문자열 i은 아스키 아트의 문자를 문자로 표시되는 다중성을 모두 역순으로 인터리브합니다. 또한 '!'를 사용하여 약간의 공간을 절약합니다. 대신 'G'대신 i교체하십시오.


3

파이썬 (145)

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

독창적이지는 않습니다.


2

자바 스크립트 ( ES6 ) 193 175 바이트

편집 : 바꿈을 유지하기 위해 RegPack v3수정 하고 for in루프를 사용하여 3 바이트를 저장하고 암시 적 콘솔 출력을 위해 eval을 제거했습니다.

_="\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())

xem의 유니 코드 압축 사용 : 133 자

eval(unescape(escape('𧰽𘡜𫡸𙱜𧁷𮰮𘁺嵃🠱𞀾🡜𫡾𧁜屮𛡾𘀧𮡻𮑸𘁏🠾岍𘀧𫱷𮑾𧁜𮁺𭱸𮑾𛱜𧁻𮡷峀𮀠𛰠𛰠𘀮𙱷𭱾𘁹𘁪𩱳𯑠𯑽𯑽𯑽𯑞𧡜𫡾𮀠𘁽𧡞𧡞𧡞𧡻𘀠𘁺𘀮𭱹𯁜𫡸𮱻𭱾割𞱦𫱲𚁩𘁯𩠠𘡷𮁹𮡻𯑾𘠩𭱩𭁨𚁟𛡳𬁬𪑴𚁩𚐩𧰽𪡯𪑮𚁰𫱰𚀩𚐠').replace(/uD./g,'')))

큰! <3 RegPack의 후 처리! psst
xem

@xem 143 자, 훨씬 더 많은 바이트
nderscore

네 죄송합니다, 143 자 문제는 문자를 셀 수 있다고 말합니다. 어쨌든, regpack의 접근 방식은 유니 코드 난독 화보다 더 흥미 롭습니다.)
xem

2
FWIW, mothereff.in/byte-counter 는 문자와 바이트를 모두 UTF-8로 계산하는 도구입니다.
Mathias Bynens

2

ES6, 155 자

anorher 접근 방식을 시도해보십시오.

Firefox의 JS 콘솔에서 이것을 실행하십시오.

각 유니 코드 문자의 형식은 \ uD8 [ascii charcode] \ uDC [반복 횟수]입니다.

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

( http://jsfiddle.net/LeaS9/ 로 만든 유니 코드 문자열 )


-3 :.replace(/../g,a=>String.fromCharCode(a[c='charCodeAt']()&255).repeat(a[c](1)&255))
nderscore

오, 고마워요!
xem

2

PHP

방법 1, 더 간단한 (139 바이트) :

사전 수축 ​​된 문자열 사용.

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

방법 2, 공백 문자를 알파벳 문자 (192 바이트)로 인코딩 :

<?=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
")?>

2

PowerShell을, 192 188 119

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

위 부분에는 문자 이외의 문자가 포함되어 있습니다. 육각 덤프 :

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

인코딩 체계는 표시 할 문자 인 하위 7 비트 위에 인코딩 된 길이의 RLE입니다.


1

파이썬-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')

1

JS (190b) / ES6 (146b) / ES6 포장 (118chars)

JS 콘솔에서 이것을 실행하십시오.

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 포장 : ( http://xem.github.io/obfuscatweet/ )

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

@nderscore에게 감사합니다!


1
ES6에서 158까지 : (유니 코드 압축으로 124 자까지 "\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"
줄임

오, 좋아요, 반복을 몰랐어요
xem

@nderscore는 죄송합니다 :) 훌륭하지만 :) 마지막 줄은 Firefox 콘솔에서 끊어진 것 같습니다
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는 41 | \ ‌ 뒤에 보이지 않는 줄 바꿈 문자를 추가합니다)
nderscore

감사합니다, 나는 대답을 업데이트하고 작동합니다. :) 나는 또 다른 158b anwser를 추가했다. 아마도 그것을 향상시킬 아이디어가있을 것이다!
xem

1

ES6, 163b / 127 자

@nderscore 덕분에 또 다른 접근법.

Firefox 콘솔에서 실행

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

포장 (127c) :

eval(unescape(escape('𘡜𫠆𙱜𧀓𛠂𛠘𯀾𜐸🠾𧁮𒁜𧀎𛠉𙰁𛠓𯁜𫠇𣰾🠉𛠑𙱯𔁼𧁮𒁜𧀇𛠦𯁜𫠈𛱜𧀄𛠨𯁜𫠇𛰁𛰂𛠧𚑼𧁮𐑪𩱳🁠𪁜𫠢𛡲𩑰𫁡𨱥𚀯𦱞𙱠𣱧𧁮🡜𧀬𛐸𪠭𯁝𛱧𛁡🐾𘠠𧠢𦱡👡𛡣𪁡𬡃𫱤𩑁𭀨𚐬𨐾𝐳𯀰𧐮𬡥𬁥𨑴𚁡𙐵𜰩𚐠').replace(/uD./g,'')))

나는 @nderscore가 향상을 찾을 것이라고 확신한다 :)
xem

SE 가이 솔루션의 일부 문자를 깨고 있다고 생각합니다. 내가 당신의 다른 대답으로 한 것과 비슷한 접근법을 사용하면 163으로 넘어갑니다. jsfiddle.net/2Fbxq/3
nderscore

음, 그것은 대단한 향상입니다. 나는 대답을 up 다.
xem

1

파이썬, 70 UTF-16 문자

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

물론 16 진수 버전을 사용해야 할 것입니다.

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

또는 base64 버전 :

I2NvZGluZzpVVEYtMTZCRQoAcAByAGkAbgB0ACd4nONSAAP1GAVMoAdG2EGNnaGFnR0XjIumHaFNHasRNTCN/nZ2WDTBNefj1Ai3EacLcWnUjyFBG5JGfSBU0FMnVh9IY1Z6cRwEJMSRDgCgLkcFACcALgBkAGUAYwBvAGQAZQAoACd6bGliACcAKQA=

프로그램의 첫 번째 "줄"은 UTF-16 인코딩을 선언합니다. 전체 파일은 UTF16이지만 Python 인터프리터는 항상 코딩 라인을 ASCII로 해석합니다 (#coding:UTF-16BE ). 줄 바꿈 후 UTF-16 텍스트가 시작됩니다. 그것은 단순히 금액 print'<data>'.decode('zlib')텍스트가 대상 ASCII 이미지의 수축 버전입니다. 스트림에 서로 게이트가 없는지 확인하기 위해주의를 기울였습니다 (디코딩을 망칠 수 있음).


1
글쎄, 첫 줄은 "오, 누군가가 유니 코드 파이썬을 만들었습니다"라고 생각하게 만들었습니다.
seequ

대단해! ~ 35b에서 UTF-32를 사용하여 동일한 작업을 수행 할 수 있습니까? :)
xem

zip대신 zlib하나의 문자를 저장할 수 있습니다.
Cees Timmerman

@xem : 대부분의 문자는 유효한 UTF-32가되지 않습니다 (문자는 <= 0x10ffff 여야 함).
nneonneo

1
@CeesTimmerman : 실제로 zlib오히려 선택하는 zip것은 매우 목적이 있습니다. zlib짝수 문자입니다.
nneonneo

1

C 번호 - 354 332

시스템 사용;
System.IO 사용;
System.IO.Compression 사용;
X 급
{
    static void Main (문자열 [] 인수)
    {
        var x = Convert.FromBase64String ( "41IAA / UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHQUBCHOmAiwsA");
        Console.WriteLine (new StreamReader (새로운 DeflateStream (new MemoryStream (x), CompressionMode.Decompress)). ReadToEnd ());
    }
}

약간의 골프 :

시스템을 사용함; System.IO을 사용함; System.IO.Compression를 이용하여, 클래스 X {정적 무효 메인 () {VAR X = Convert.FromBase64String ( "41IAA / UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHQUBCHOmAiwsA"); Console.WriteLine (새에서는 StreamReader (새 DeflateStream (새 MemoryStream을 (x), (압축 모드) 0)). ReadToEnd ());}}

거기에 문자보다 더 긴 변수 이름이 있다면 실제로 골프는 아닙니다. 또는 불필요한 것들 string[] args.
Joey

규칙은 무시하지만 C #에는 다른 방법이 없으므로 코드를 컴파일해야하므로 가능한 한 가장 짧습니다.
Erez Robinson

1
Main인수가 필요하지 않지만 여전히 Java와 달리 컴파일됩니다. 그것을 제거하고 인라이닝 x하면 이미 333이됩니다. DeflateStreamctor 에서 인수 사이의 공백을 제거하여 다른 바이트를 저장할 수 있습니다 . : 당신은 열거 형 멤버에 대한 캐스트 사용할 수 있습니다 (CompressionMode)0나는 그것을 ;-) 아직 짧은 불가능 논쟁 것 그래서, (324)에 우리를 제공합니다
조이


1

bzip2, 116

CJAM의 답변을 본 후, 나는 이것도 자격이 있어야한다고 생각했습니다.

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

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

$

추가 설명이 필요하지 않습니다. :)


1
DEFLATE와 함께 Bubblegum 을 사용하면 77 바이트로 줄어 듭니다. 온라인으로 사용해보십시오!
Miles


0

Vim, 99 개의 키 입력

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

아마 골프

설명:

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.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.