你今天有心情吗?


9

Debian Linux发行版(以及基于Debian的发行版,如Ubuntu,Kali和其他发行版)使用称为APT的软件包管理器。要安装程序,foo您需要在终端中输入

sudo apt-get install foo

以下是APT的一个小复活节彩蛋:

apt-get moo

键入后将产生以下输出

                 (__) 
                 (oo) 
           /------\/ 
          / |    ||   
         *  /\---/\ 
            ~~   ~~   
..."Have you mooed today?"...

您必须编写一个程序,以尽可能少的字节产生此EXACT输出。(包括尾随空格和换行符)

这是与输出相同的输出,\n以表示换行符,并以a *表示尾随空格

                 (__)*\n
                 (oo)*\n
           /------\/*\n
          / |    ||***\n
         *  /\---/\*\n
            ~~   ~~***\n
..."Have you mooed today?"...\n

根据注释中的要求,这是mooing的md5sum。

35aa920972944a9cc26899ba50024115  -

1
我认为这是APT,而不是能力。资质没有超级母牛的力量
aditsu退出,因为SE是邪恶的

@aditsu哦,我想我误会了什么才华。我以为能力是apt-get的名称。
詹姆斯

供参考,您可以发布输出apt-get moo|md5sum吗?
aidtsu退出是因为SE为EVIL,2015年

25
Bash,11个字节: apt-get moo P
Dennis

5
@Dennis在Arch Linux上不起作用...无法重现结果:P
Otomo

Answers:


6

Bash,95个字节

0000000: 7a 63 61 74 3c 3c 27 27 0a 1f 8b 08 01 01 01 01 01  zcat<<''.........
0000011: 02 03 53 40 07 1a f1 f1 9a 0a 5c 98 c2 f9 f9 a8 c2  ..S@......\......
0000022: fa ba 60 10 a3 8f 2c aa af 50 03 a2 6a 40 24 42 58  ..`...,..P..j@$BX
0000033: 0b 28 11 03 54 ab 1f 83 6a 70 5d 1d 8c e0 d2 d3 d3  .(..T...jp]......
0000044: 53 f2 48 2c 4b 55 a8 cc 2f 55 c8 cd cf 4f 4d 51 28  S.H,KU../U...OMQ(
0000055: c9 4f 49 ac b4 57 02 ca 70 01                       .OI..W..p.

上面是可逆的十六进制转储。要创建文件,执行

xxd -r -c 17 > 55918.sh

粘贴hexdump并按Enter,然后按Ctrl+ D

要运行创建的文件,执行

bash 55918.sh 2>&-

任何其他文件名都可以。

我选择了 zopfli作为压缩器,因为它与Coreutils程序zcat兼容,并且比gzip,bzip2和xz压缩效果更好。

zcat<<''将读取以下几行(直到EOF)并将它们作为输入提供给zcat

请注意,zcat将打印警告(因为我剥离了压缩文件的校验和),而bash也将打印警告(因为HEREDOC未被空行终止)。这些警告将打印到STDERR(受抑制2>&-),根据对Meta的共识,默认情况下允许使用。


10

果酱,96

这使用了很多讨厌的字节,所以这是它的十六进制转储:

00000000  22 ee 51 1e 53 41 15 ee  51 20 53 41 15 9a 5f 5a  |".Q.SA..Q SA.._Z|
00000010  b9 5f 41 15 8c 5f 41 f9  38 24 2a 15 7e 55 1c 5f  |._A.._A.8$*.~U._|
00000020  b9 30 5f b9 41 15 a8 26  2a 26 2a 15 36 45 91 c3  |.0_.A..&*&*.6E..|
00000030  ed cb 41 f3 df eb 41 db  20 cb c9 41 e9 df c9 c3  |..A...A. ..A....|
00000040  f3 7f 45 36 15 22 7b 69  32 6d 64 5c 5f 63 5c 37  |..E6."{i2md\_c\7|
00000050  6d 64 22 20 5f 6f 2d 7c  7e 2e 22 3d 2a 3f 7d 2f  |md" _o-|~."=*?}/|

您可以使用java解释器运行文件;可能需要使用ISO-8859-1编码,例如:
java -Dfile.encoding=ISO-8859-1 …

在线尝试

等效(且更长)的ASCII版本:

[238 81 30 83 65 21 238 81 32 83 65 21 154 95 90 185 95 65 21 140 95 65 249 56 36 42 21 126 85 28 95 185 48 95 185 65 21 168 38 42 38 42 21 54 69 145 195 237 203 65 243 223 235 65 219 32 203 201 65 233 223 201 195 243 127 69 54 21]:c
{i2md\_c\7md" _o-|~."=*?}/

在线尝试

说明:

有7个重复的字符: _o-|~.。它们中的每一个都可以被编码为一个从0编号n设置为6.对于每个重复序列,我编码字符的索引两者(n)和在一个单一的字节重复(k)的数目:2 * (k * 7 + n),写为与该字符码。我将任何单个字符编码为2 * c + 1,其中c是ASCII码。一切都放在初始字符串中,程序的其余部分对其进行解码:

{…}/      for each character in the string
  i       convert to integer (extended-ASCII code)
  2md     integer division by 2, obtaining the quotient (q) and remainder (r)
           r decides whether it's a repetition or single character
  \_      swap q and r, and duplicate q
  c\      convert q to character and move it before the other q
           this is for the r=1 case (single character)
  7md     divide q by 7, obtaining the quotient (k) and remainder (n)
  "…"=    get the corresponding character from that string (decoding n)
  *       repeat the character k times
  ?       use the single character or the repetition, depending on r

旧版本(109):

" H(_2) 
 H(o2) 
 B/-6\/ 
 A/ | 4|2 3
 9* 2/\-3/\ 
 C~2 3~2 3
.6"{_'M,48>&{~*}&}/3/"Have you mooed today?"`*N

在线尝试


6

珀斯100

r"17 (__) 
17 (oo) 
11 /6-\/ 
10 / |4 ||3 
9 *  /\\3-/\ 
12 ~~3 ~~3 
3.\"Have you mooed today?\"3."9

在线尝试:演示

r"string"9 运行长度解码字符串。

编辑:

这是一个97个字符的解决方案:演示。这很有可能也是97个字节(在iso-8859-1中)。但是太累了,无法写下字节并进行解释。我想明天晚上。


4

GolfScript(107字节)

这是一种非常简单的编码:换行符被替换为^,空格被游程长度编码。结果包含一些不可打印的字符,因此我在这里将其显示为xxd输出:

0000000: 2711 285f 5f29 015e 1128 6f6f 2901 5e0b  '.(__).^.(oo).^.
0000010: 2f2d 2d2d 2d2d 2d5c 2f01 5e0a 2f01 7c04  /------\/.^./.|.
0000020: 7c7c 035e 092a 022f 5c2d 2d2d 2f5c 015e  ||.^.*./\---/\.^
0000030: 0c7e 7e03 7e7e 035e 2e2e 2e22 4861 7665  .~~.~~.^..."Have
0000040: 0179 6f75 016d 6f6f 6564 0174 6f64 6179  .you.mooed.today
0000050: 3f22 2e2e 2e27 7b2e 3332 3c7b 2220 222a  ?"...'{.32<{" "*
0000060: 7d2a 7d25 225e 222f 6e2a 0a              }*}%"^"/n*.

在线演示

请注意,这比相应的CJam代码短一个字符。折衷方法用'作主字符串的定界符(节省两个\s来转义"),保存一个an i以在解码循环中将字符值转换为整数,并获得一个自由的尾随换行符;与使用字符文字来替换单字符字符串文字。


由于这个问题被简短标记 ,我还制作了一个仅包含(108)个可打印字符的版本:

'Y(__)I
Y(oo)I
S/------\/I
R/I|L||K
Q*J/\---/\I
T~~K~~K
..."HaveIyouImooedItoday?"...'{.82-.*82<{72-' '*}*}%

代替编码的空间的运行长度为字符^A^R(和编码^J^以避免碰撞),它留下换行符原封不动,编码游程为IY

顺便说一句,我的通用GolfScript Kolmogorov程序生成一个120字节的程序。


1

Lua中,186个 178字节

@DJ McMayhem的建议节省了8个字节

p=print s=" "a=s:rep(17)b=s:rep(9)p(a.."(__) ")p(a.."(oo) ")p(b.."  /------\\/ ")p(b.." / |    ||   ")p(b.."*  /\\---/\\ ")p(b.."   ~~   ~~   ")p"...\"Have you mooed today?\"..."

取消高尔夫:

p=print --Save the print function for later use
s=" " --Space character
a=s:rep(17) --string.rep(string, times) repeats the given string
b=s:rep(9)
p(a.."(__) ") --print out the lines
p(a.."(oo) ")
p(b.."  /------\\/ ")
p(b.." / |    ||   ")
p(b.."*  /\\---/\\ ")
p(b.."   ~~   ~~   ")
p"...\"Have you mooed today?\"..."

您可以通过将第2行替换为a=repeat(" ",17)
James

啊,谢谢你:)我正试图找出我是否可以做类似的事情……
Nikolai97'9

1

> <>,217个字节

!v"                 (__) "a"                 (oo) "a"           /------\/ "a"          / |    ||   "a"         *  /\---/\ "a"            ~~   ~~   "a"..."c3*2-"Have you mooed today?"c3*2-"..."a!
 >r>l0)?v;
    ^   o<

不幸的是,这是一个很无聊的答案。它首先读取绘制出整个母牛的字符串,并通过在堆栈(a)中添加10来换行。然后进入一个循环,将牛抽出。

我最初制作了一个循环以添加一组空格,但实际上,按字节计算比仅添加空格要昂贵得多。

编辑:忘记了鱼写为“> <>”


1

PowerShell,144字节

$a="        "
"$a$a (__) "
"$a$a (oo) "
"$a   /------\/ "
"$a  / |    ||   "
"$a *  /\---/\ "
"$a    ~~   ~~   "
'..."Have you mooed today?"...'

上面的代码将在打印Unix风格的换行符(\n)的环境中正常工作。它使用例如Pash产生正确的输出在Linux上使用。

从数学上讲,对于PowerShell,$a变量的8个空格是最佳选择,因为较少意味着变量和母牛之间的额外空间太多,因此不$b值得使用,而更多则意味着我们不能在前两行加倍头。


4
我认为“换行符”取决于语言环境/平台,使您的输出与其他任何输出一样有资格。
sleblanc

1.没有“换行符”之类的东西。\r是回车符,\n是换行符。一起\r\n在Windows上形成换行符。2. PowerShell不仅限于Windows。我已经使用Pash(Windows PowerShell for Mono的开源实现)测试了您的代码,并且输出具有正确的MD5哈希。3.由于上述原因,我自由地取消对您的帖子的维基百科。如果您不同意,请重新设置维基。
丹尼斯

很有意思,@Dennis ......我知道之间的区别\r\n\n,但就像我说的,我不能没有什么令人震惊的获得Windows上的MD5正确。不过,感谢您的编辑。首先,我也听说过Pash,因此也感谢您。我想知道在Cygwin下构建这样的结构到底有多复杂... ;-)
AdmBorkBork 2015年

0

分子,145个字节

"   "_____:a"  (__) 
";a____"  (oo) 
";a__"  /------\\/ 
";a__" / |    ||   
";a__"*  /\\---/\\ 
";a____"~~"b"~~
...\"Have you mooed today?\"..."

我第一次尝试压缩ASCII art:P

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.