Sudahkah Anda menganiaya hari ini?


9

Distribusi Linux Debian (dan distro berbasis Debian, seperti Ubuntu, Kali dan lainnya) menggunakan paket-manajer yang disebut APT. Untuk menginstal program, fooAnda akan mengetik ke terminal

sudo apt-get install foo

Satu Telur Paskah kecil APT adalah sebagai berikut

apt-get moo

Yang setelah mengetik akan menghasilkan output berikut

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

Anda harus menulis sebuah program yang menghasilkan output TEPAT ini dalam sesedikit mungkin byte. (termasuk spasi tambahan dan baris baru)

Berikut adalah output yang sama dengan yang \nditambahkan untuk mewakili karakter baris baru, dan *untuk mewakili spasi tambahan

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

Seperti yang diminta dalam komentar, ini adalah md5sum dari mooing.

35aa920972944a9cc26899ba50024115  -

1
Saya pikir itu APT, bukan bakat; aptitude tidak memiliki Super Cow Powers
aditsu berhenti karena SE adalah JAHAT

@ aditsu oh, saya kira saya salah paham apa itu bakat. Saya pikir aptitude adalah nama apt-get.
James

Untuk referensi, bisakah Anda memposting output apt-get moo|md5sum?
Aditsu berhenti karena SE adalah JAHAT

25
Bash, 11 byte:: apt-get mooP
Dennis

5
@Dennis Tidak berfungsi di Arch Linux ... tidak dapat mereproduksi hasilnya: P
Otomo

Jawaban:


6

Bash, 95 byte

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.

Di atas adalah hexdump reversibel. Untuk membuat file, jalankan

xxd -r -c 17 > 55918.sh

rekatkan hexdump dan tekan Enter, lalu Ctrl+ D.

Untuk menjalankan file yang dibuat, jalankan

bash 55918.sh 2>&-

Nama file lain akan dilakukan.

Saya memilih zopfli sebagai kompresor karena itu kompatibel dengan program Coreutils zcat dan mencapai kompresi yang lebih baik daripada gzip, bzip2 dan xz.

zcat<<''akan membaca baris berikut (sampai EOF) dan mengumpankannya sebagai masukan zcat.

Perhatikan bahwa zcat akan mencetak peringatan (karena saya menghapus checksum dari file yang dikompresi), seperti akan bash (karena HEREDOC tidak diakhiri oleh baris kosong). Peringatan ini dicetak ke STDERR (ditekan oleh 2>&-), yang diizinkan secara default per konsensus di Meta .


10

CJam, 96

Ini menggunakan banyak byte jahat, jadi inilah dump hex-nya:

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-|~."=*?}/|

Anda dapat menjalankan file dengan penerjemah java; mungkin perlu menggunakan pengkodean ISO-8859-1, seperti:
java -Dfile.encoding=ISO-8859-1 …

Cobalah online

Versi ASCII Setara (dan lebih lama):

[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-|~."=*?}/

Cobalah online

Penjelasan:

Ada 7 karakter yang memiliki pengulangan: _o-|~.. Masing-masing dapat dikodekan sebagai nomor n dari 0 sampai 6. Untuk setiap urutan mengulang, saya pengkodean kedua indeks karakter (n) dan jumlah pengulangan (k) dalam satu byte: 2 * (k * 7 + n), ditulis sebagai karakter dengan yang kode. Dan saya mengkodekan setiap karakter tunggal sebagai 2 * c + 1, di mana c adalah kode ASCII. Semuanya berjalan di string awal, dan program lainnya menguraikannya:

{…}/      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

Versi lama (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

Cobalah online


6

Pyth, 100

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

Cobalah online: Peragaan

r"string"9 run-length-menerjemahkan string.

edit:

Inilah solusi untuk char: 97 Demonstrasi . Sangat mungkin ini juga 97 byte (dalam iso-8859-1). Tetapi terlalu lelah untuk menuliskan byte dan melakukan penjelasan. Besok malam, kurasa.


4

GolfScript (107 byte)

Ini adalah pengkodean yang sangat sederhana: baris baru diganti dengan ^, dan spasi di-run-encode. Hasilnya berisi beberapa karakter yang tidak dapat dicetak, jadi saya tampilkan di sini sebagai xxdkeluaran:

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

Demo online

Perhatikan bahwa ini adalah satu karakter lebih pendek dari kode CJam yang sesuai. Tradeoff digunakan 'sebagai pembatas untuk string utama (menyimpan dua \s untuk keluar dari "), menyimpan sebuah iuntuk mengonversi nilai karakter ke integer dalam decoding loop, dan mendapatkan baris baru yang bebas jejak; vs memiliki karakter literal untuk menggantikan string karakter tunggal karakter.


Karena pertanyaan ini secara singkat ditandai , saya juga membuat versi dengan hanya (108) karakter yang dapat dicetak:

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

Alih-alih mengkode run-length dari spasi sebagai karakter ^A untuk ^R(dan encoding ^Jsebagai ^tabrakan menghindari), ia meninggalkan baris tersentuh dan mengkodekan jangka-panjang sebagai Iuntuk Y.

Kebetulan, program GolfScript Kolmogorov tujuan umum saya menghasilkan program 120 byte.


1

Lua, 186 178 byte

8 byte disimpan berkat saran dari @DJ McMayhem

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?\"..."

Tidak Disatukan:

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?\"..."

Anda bisa menghemat 5 byte dengan mengganti baris 2 dengana=repeat(" ",17)
James

Ah terima kasih :) saya mencoba mencari tahu apakah saya bisa melakukan sesuatu seperti itu ...
Nikolai97

1

> <> , 217 byte

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

Sayangnya ini adalah jawaban yang cukup membosankan. Dimulai dengan membacakan string yang menarik seluruh sapi, dengan baris baru dibuat dengan menambahkan nilai 10 ke tumpukan (a). Kemudian masuk ke loop yang hanya menarik keluar sapi.

Saya awalnya membuat lingkaran untuk menambahkan dalam satu set spasi, tapi itu sebenarnya lebih mahal daripada hanya menempatkan spasi.

EDIT: Lupa bahwa ikan ditulis sebagai "> <>"


1

PowerShell, 144 byte

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

Kode di atas akan bekerja dengan baik di lingkungan yang mencetak baris gaya Unix ( \n). Ini menghasilkan output yang benar dengan, misalnya, Pash di Linux.

Secara matematis, untuk PowerShell, memiliki 8 ruang untuk $avariabel adalah optimal, karena kurang berarti terlalu banyak ruang tambahan antara variabel dan sapi untuk membuat yang $bberharga, dan lebih banyak berarti kita tidak dapat menggandakan pada dua baris pertama untuk variabel kepala.


4
Saya berpendapat bahwa "karakter baris baru" adalah tergantung pada platform / platform, membuat output Anda memenuhi syarat seperti yang lain.
sleblanc

1. Tidak ada yang namanya "karakter baris baru". \radalah carriage return, \nadalah linefeed. Bersama-sama, \r\nmembentuk baris baru di Windows. 2. PowerShell bukan hanya Windows. Saya telah menguji kode Anda dengan Pash (implementasi open-source Windows PowerShell untuk Mono) dan hasilnya memiliki hash MD5 yang tepat. 3. Karena hal di atas, saya mengambil kebebasan untuk membatalkan posting Anda. Jika Anda tidak setuju dengan ini, silakan kembali wiki.
Dennis

Sangat menarik, @Dennis ... Saya menyadari perbedaan antara \r\ndan \n, tapi seperti yang saya katakan, saya tidak bisa mendapatkan MD5 dengan benar di Windows tanpa sesuatu yang mengerikan. Terima kasih untuk hasil editnya. Pertama, saya pernah mendengar tentang Pash, jadi terima kasih untuk itu juga. Saya ingin tahu betapa rumitnya membangun di bawah Cygwin ... ;-)
AdmBorkBork

0

Molekul , 145 byte

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

Pertama kali saya mencoba mengompres seni ASCII: P

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.