高尔夫ASCII艺术


31

让我们尝试打高尔夫球代表高尔夫球手的这门ascii艺术作品:

      '\。。|> 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看起来更像是一个板球拍我
外国人先生

@Alien先生,我在马丁· 克莱佩(Martin Kleppe)的最近演讲中看到了:Speakerdeck.com/aemkei/…(视频: youtube.com/watch?
v = zy

Answers:


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:c通过将该整数视为基数为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 2014年

@xem:您是否从“ RAW粘贴数据”部分进行复制?如果我复制格式化的代码,则会得到相同的结果。
丹尼斯

15

露比(107)

我以为我实际上会尝试在代码中“生成”图像(而不是使用一些现有的压缩功能):

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

该数组文字中有一些不可打印的字符。

这是文件的十六进制视图,也显示了不可打印的字符:

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


努力!我希望能得到这样的答案,而不仅仅是gzip ASCII代码;)
xem14,2011年

1
第二行可能是6.times{|i|S[i+1]=' '*55+?|}保存2个字符。
2014年

@voidpigeon啊,谢谢。我实际上是从那开始的,但是最初以为我需要i不止一次。接得好!
Martin Ender 2014年

2
希望您不介意我再提几种其他方法来缩短这一时间!S.fill{' '*55+?|}相反,使用可以保存更多的字符(不过,您必须将定义S['']*7,更改为putsputs p,S,p然后从所有y坐标中减去1)。然后,通过在f(def f(*p,c))中使用varargs ,可以将[]in 保存到函数调用中。哦,您可以()到处乱逛y,x
Ventero 2014年

1
如果S 是一维的,则可以再保存55个字符;)如果您不想自己做,请使用以下代码
Ventero 2014年

13

bash + iconv + DosBox / x86机器代码(104 97 96 95个字符)

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

我建议将其放在脚本中的空目录中,几乎可以保证将其复制粘贴到终端中会破坏所有内容;更好的是,您可以在此处获取现成的脚本。

预期产量: expected output

怎么运行的

bash部分只是一个启动器,用于从脚本的UTF-8字符iconv“解压缩” .com文件并使用DosBox启动它。

注意,这对内容构成了一些限制,因为并非所有输入序列都可以iconv不加抱怨地解释为UCS-2 。例如,由于某种原因,许多操作涉及bx取决于寄存器的使用位置,寄存器的造成严重破坏,因此我不得不多次解决此问题。

现在,Unicode就是要利用“字符数”规则。脚本的实际大小(以字节为单位)比原始大小大得多.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

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

感谢Venterom.buettner在我的RegEx优化中提供的帮助。


您可以使用s/\d+(?!8?>)/%$&s/rg
Ventero

@Ventero谢谢您的建议。
2014年

2
您可以使用所有格修饰符保存另一个:/\d++(?!>)/
Martin Ender 2014年

@ 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完善的语言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

我可以肯定是dis werkz,但我确实有一个LOLCODE解释器 http: //repl.it似乎2不喜欢funcshuns。

(Tranzlashun由http://speaklolcat.com慷慨提供的机器人cuz I doan speek提供)


代码的缩进,空格和注释版本(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

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以相反的顺序交错显示了ascii艺术中的字符和代表字符的多重字符。另外,我使用'!'节省了一些空间。而不是'G' i,然后将其替换。


3

巨蟒(145)

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

我不是很原始。


2

Javascript(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的unicode压缩:133个字符

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

大!<3 RegPack的后处理!psst,您可以在143b中做到
xem

@xem 143个字符,但更多的字节
nderscore 2014年

是的,抱歉,143个字符。问题是您可以数字符。无论如何,regpack的方法比unicode混淆更有趣;)
xem

2
FWIW,mothereff.in /byte- counter是一种同时计算字符和字节的工具(按照UTF-8)。
Mathias Bynens 2014年

2

ES6,155个字符

只是尝试其他方法:

在Firefox的JS控制台中运行它。

每个unicode字符具有以下形式:\ uD8 [ascii字符代码] \ uDC [重复次数]。

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

(使用以下代码制成的Unicode字符串:http : //jsfiddle.net/LeaS9/


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

哦,太好了,谢谢!
xem 2014年

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

编码方案是RLE,其长度编码为低7位,这是要显示的字符。


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包装(118个字符)

在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 :(使用unicode压缩可降至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"
nderscore 2014年

哦,太好了,我不知道重复
Xem 2014年

@nderscore别担心,它很棒:),但是我的Firefox控制台的最后一行似乎断了
xem14年

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

谢谢,我更新了答案,它可以正常工作。:)我还添加了另一个158b anwser,也许您会有一个改进的想法!
xem 2014年

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 2014年

好吧,这是一个很大的增强(也是一个很好的小提琴)。我更新了答案。
xem 2014年

1

Python,70个UTF-16字符

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

当然,您可能必须使用十六进制版本:

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
好吧,第一行让我想到“哦,太棒了,有人制作了unicode python”
seequ 2014年

太棒了!您可以使用UTF-32在〜35b中做同样的事情吗?:)
xem14年

zip而不是zlib可以节省一个字符。
Cees Timmerman 2014年

@xem:大多数字符不再是有效的UTF-32(字符必须为<= 0x10ffff)。
nneonneo 2014年

1
@CeesTimmerman:实际上,选择zlib而不是zip非常有目的。zlib是偶数个字符。
nneonneo 2014年

1

C#-354 332

使用系统;
使用System.IO;
使用System.IO.Compression;
X级
{
    静态void Main(string [] args)
    {
        var x = Convert.FromBase64String(“ 41IAA / UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHQUBCHOmAiwsA”)
        Console.WriteLine(new StreamReader(new DeflateStream(new MemoryStream(x),CompressionMode.Decompress))。ReadToEnd());
    }
}

有点打高尔夫球:

使用系统;使用System.IO;使用System.IO.Compression;类X {静态void Main(){var x = Convert.FromBase64String(“ 41IAA / UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0B9GBK0RRWBRIFBRFEBWJRWFEBWJRFEBWZRFEBWZRJRFEBWZRFEBWJRFEB) (x),(CompressionMode)0))。ReadToEnd());}}

如果变量名的长度仍然大于字符,那并不是真的。还是类似不必要的东西string[] args
2014年

Dunno的规则,但是C#中没有其他方法,因此代码需要编译,所以这是最短的。
Erez Robinson 2014年

1
Main不需要任何参数,它仍将进行编译(与Java相反)。删除该行并对其进行内联处理后,x它已达到333个。您可以通过删除DeflateStreamctor中参数之间的空格来节省另一个字节。您可以对枚举成员使用强制转换:(CompressionMode)0,这使我们降至324。所以我认为这还不是最短的;-)
Joey

是的,你是..
Erez Robinson

1

bzip2、116

看到CJAM的答案后,我认为这个也应该合格。

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

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

$

我怀疑是否需要任何进一步的解释。:)


1
Bubblegum与DEFLATE一起使用可将其减少到77个字节。在线尝试!
英里

0

C(gcc),190字节

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

在线尝试!


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.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.