今日は無事ですか?


9

Debian Linuxディストリビューション(およびUbuntuやKaliなどのDebianベースのディストリビューション)は、APTと呼ばれるパッケージマネージャを使用します。プログラムをインストールするfooには、ターミナルに入力します

sudo apt-get install foo

APTの小さなイースターエッグは次のとおりです

apt-get moo

入力後、次の出力が生成されます

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

この正確な出力をできるだけ少ないバイト数で生成するプログラムを作成する必要があります。(末尾のスペースと改行を含む)

以下は、\n改行文字を表すために追加された同じ出力と、*末尾のスペースを表すためのa です。

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

コメントで要求されているように、これはムーイングのmd5sumです。

35aa920972944a9cc26899ba50024115  -

1
適性ではなくAPTだと思います。aptitudeはスーパー牛の力を持っていません
SEは悪であるため、aditsuはやめ

@aditsuああ、私は適性が何であるかを誤解したと思います。適性はapt-getの名前だと思いました。
James

参考までに、出力を投稿していただけapt-get moo|md5sumませんか?
SEがイービルである2015

25
バッシュ、11バイト::apt-get mooP
Dennis

5
@DennisはArch Linuxでは機能しません...結果を再現できません:P
Otomo

回答:


6

バッシュ、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.

上記は可逆的な16進ダンプです。ファイルを作成するには、次を実行します

xxd -r -c 17 > 55918.sh

hexdumpを貼り付けてEnter、次にCtrl+ を押しDます。

作成したファイルを実行するには、次を実行します

bash 55918.sh 2>&-

他のファイル名でも十分です。

Coreutilsプログラムzcatと互換性があり、gzip、bzip2、xzよりも優れた圧縮を実現するため、コンプレッサーとしてzopfliを選択しました

zcat<<''次の行を(EOFまで)読み取り、それらをへの入力としてフィードしますzcat

zcatは警告を出力します(圧縮ファイルのチェックサムを取り除いたため)、bashは(HEREDOCが空の行で終了していないため)。これらの警告はSTDERR(によって抑制されます2>&-)に出力されますが、これはMetaのコンセンサスごとにデフォルトで許可されています。


10

CJam、96

これは多くの厄介なバイトを使用するので、これを16進ダンプします。

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-|~.。それらの各々は、各繰り返しシーケンスについて数としてnは0から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

Pyth、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 run-lengthは文字列をデコードします。

編集:

これが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コードよりも1文字短いことに注意してください。トレードオフは'、メイン文字列の区切り文字として(\をエスケープするために2つのsを"保存)を使用し、を保存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として^回避衝突に)、それはそのまま改行を残しとしてランレングスをコードIしますY

ちなみに、私の汎用の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行目を次のように置き換えると、5バイトを節約できますa=repeat(" ",17)
James

ありがとうございます:)私はそのようなことができるかどうかを考えていました...
Nikolai97

1

> <>、217バイト

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

残念ながら、これはかなり退屈な答えです。まず、スタック全体に10の値を追加することによって作成された改行とともに、牛全体を引き出す文字列を読み取ります(a)。次に、牛を引き出すだけのループに入ります。

私は元々、一連のスペースを追加するためにループを作成しましたが、実際には、スペースを置くだけの場合よりもバイト単位でコストがかかりました。

編集:魚が "> <>"と書かれていることを忘れた


1

PowerShell、144バイト

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

上記のコードは、Unixスタイルの改行(\n)を出力する環境で適切に動作します。LinuxのPashなどで正しい出力を生成します。

数学的には、PowerShellの場合、$a変数のスペースが8つあるのが最適です。これは、変数と牛の間のスペースが多すぎて$b価値がないためであり、より多くの場合、最初の2行を二重にできないためです。頭。


4
「改行文字」はロケール/プラットフォームに依存するため、出力を他の出力と同じように適格にすることができます。
sleblanc

1.「改行文字」というものはありません。\rはキャリッジリターン、\nはラインフィードです。一緒に、\r\nWindowsで改行を形成します。2. PowerShellはWindowsだけではありません。私はあなたのコードをPash(Windows PowerShell for Monoのオープンソース実装)でテストしましたが、出力には適切なMD5ハッシュが含まれています。3.上記の理由により、私は自由にあなたの投稿をunwikiしました。これに同意しない場合は、再wikiしてください。
Dennis

、非常に興味深い@Dennis ...私はとの違いを意識だ\r\n\n、私は言ったように、私が何かひどいことなく、Windows上でMD5正しいを得ることができませんでした。でも編集してくれてありがとう。最初に私はパシュのことも聞いたので、それに感謝します。Cygwinでのビルドはどれほど複雑になるのでしょうか... ;-)
AdmBorkBork

0

分子、145バイト

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

アスキーアートを圧縮しようとする私の初めて:P

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.