Bạn đã mooed ngày hôm nay?


9

Bản phân phối Debian Linux (và các bản phát hành dựa trên Debian, như Ubuntu, Kali và các bản khác) sử dụng trình quản lý gói có tên APT. Để cài đặt chương trình, foobạn sẽ gõ vào một thiết bị đầu cuối

sudo apt-get install foo

Một ít Easter Egg của APT là như sau

apt-get moo

Mà sau khi gõ sẽ tạo ra đầu ra sau

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

Bạn phải viết một chương trình tạo đầu ra CHÍNH XÁC này càng ít byte càng tốt. (bao gồm cả dấu cách và một dòng mới)

Đây là cùng một đầu ra \nđược thêm vào để thể hiện các ký tự dòng mới và a *để thể hiện các khoảng trắng ở cuối

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

Theo yêu cầu trong các ý kiến, đây là md5sum của mooing.

35aa920972944a9cc26899ba50024115  -

1
Tôi nghĩ đó là APT, không phải năng khiếu; aptitude không có Super Cow Powers
aditsu bỏ vì SE là EVIL

@aditsu oh, tôi đoán tôi đã hiểu nhầm năng khiếu là gì. Tôi nghĩ năng khiếu là tên của apt-get.
James

Để tham khảo, bạn có thể gửi đầu ra của apt-get moo|md5sum?
aditsu nghỉ việc vì SE là EVIL

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

5
@Dennis Không hoạt động trên Arch Linux ... không thể sao chép kết quả: P
Otomo

Câu trả lời:


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.

Trên đây là một hexdump đảo ngược. Để tạo tập tin, thực thi

xxd -r -c 17 > 55918.sh

dán hexdump và nhấn Enter, sau đó Ctrl+ D.

Để chạy tệp đã tạo, thực thi

bash 55918.sh 2>&-

Bất kỳ tên tệp khác sẽ làm.

Tôi đã chọn zopfli làm máy nén vì nó tương thích với zcat chương trình Coreutils và đạt được độ nén tốt hơn gzip, bzip2 và xz.

zcat<<''sẽ đọc các dòng sau (cho đến EOF) và đưa chúng làm đầu vào zcat.

Lưu ý rằng zcat sẽ in cảnh báo (vì tôi đã xóa tổng kiểm tra của tệp nén), cũng như bash (vì HEREDOC không bị chấm dứt bởi một dòng trống). Các cảnh báo này được in thành STDERR (bị chặn bởi 2>&-), được cho phép theo mặc định theo sự đồng thuận trên Meta .


10

CJam, 96

Điều này sử dụng rất nhiều byte khó chịu, vì vậy đây là một kết xuất hex của nó:

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

Bạn có thể chạy tệp với trình thông dịch java; có thể cần phải sử dụng mã hóa ISO-8859-1, chẳng hạn như:
java -Dfile.encoding=ISO-8859-1 …

Dùng thử trực tuyến

Phiên bản ASCII tương đương (và dài hơn nhiều):

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

Dùng thử trực tuyến

Giải trình:

Có 7 ký tự có sự lặp lại : _o-|~.. Mỗi trong số chúng có thể được mã hóa thành một số n từ 0 đến 6. Với mỗi chuỗi lặp lại, tôi mã hóa cả chỉ số của ký tự (n) và số lần lặp lại (k) trong một byte duy nhất: 2 * (k * 7 + n)được viết dưới dạng một ký tự với điều đó mã. Và tôi đang mã hóa bất kỳ ký tự đơn nào 2 * c + 1, trong đó c là mã ASCII. Mọi thứ diễn ra trong chuỗi ban đầu và phần còn lại của chương trình đang giải mã nó:

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

Phiên bản cũ (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

Dùng thử trực tuyến


6

Bình, 100

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

Dùng thử trực tuyến: Trình diễn

r"string"9 run-length-giải mã chuỗi.

biên tập:

Đây là một giải pháp 97 char: Trình diễn . Rất có thể đây cũng là 97 byte (trong iso-8859-1). Nhưng quá mệt mỏi cho việc viết các byte xuống và làm một lời giải thích. Tối mai, tôi đoán thế.


4

GolfScript (107 byte)

Đây là một mã hóa rất đơn giản: dòng mới được thay thế ^và không gian được mã hóa theo chiều dài. Kết quả chứa một số ký tự không in được, vì vậy tôi trình bày nó ở đây dưới dạng xxdđầu ra:

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

Bản demo trực tuyến

Lưu ý rằng đây là một ký tự ngắn hơn mã CJam tương ứng. Sự cân bằng đang sử dụng 'làm dấu phân cách cho chuỗi chính (lưu hai \giây để thoát khỏi chuỗi "), lưu một iđể chuyển đổi giá trị ký tự thành số nguyên trong vòng giải mã và nhận được một dòng mới miễn phí; vs có ký tự chữ để thay thế chuỗi ký tự đơn ký tự.


Vì câu hỏi này được gắn thẻ ngắn gọn , tôi cũng đã tạo một phiên bản chỉ có (108) ký tự có thể in:

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

Thay vì mã hóa run-chiều dài của không gian như nhân vật ^Ađể ^R(và mã hóa ^Jnhư ^va chạm tránh), nó để lại dòng mới hoang sơ và mã hóa thời gian chuẩn độ dài càng Iđến Y.

Tình cờ, chương trình GolfScript Kolmogorov đa năng của tôi tạo ra chương trình 120 byte.


1

Lua, 186 178 byte

8 byte được lưu nhờ một đề xuất của @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?\"..."

Ung dung:

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

Bạn có thể tiết kiệm 5 byte bằng cách thay thế dòng 2 bằnga=repeat(" ",17)
James

À cảm ơn bạn :) tôi đã cố gắng tìm hiểu xem liệu tôi có thể làm điều gì đó như thế không ...
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<

Thật không may đây là một câu trả lời khá nhàm chán. Nó bắt đầu bằng cách đọc ra một chuỗi rút ra toàn bộ con bò, với các dòng mới được tạo bằng cách thêm giá trị 10 vào ngăn xếp (a). Sau đó, nó đi vào một vòng lặp mà chỉ rút ra con bò.

Ban đầu tôi đã tạo một vòng lặp để thêm vào một tập hợp các khoảng trắng, nhưng nó thực sự tốn kém hơn so với việc đặt các khoảng trắng vào.

EDIT: Quên rằng cá được viết là "> <>"


1

PowerShell, 144 byte

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

Đoạn mã trên sẽ hoạt động chính xác trong các môi trường in các dòng mới theo kiểu Unix ( \n). Nó tạo ra đầu ra chính xác với, ví dụ, Pash trên Linux.

Về mặt toán học, đối với PowerShell, có 8 khoảng trắng cho $abiến là tối ưu, vì ít có nghĩa là có quá nhiều khoảng trắng bổ sung giữa biến và bò để tạo $bgiá trị và nhiều hơn có nghĩa là chúng ta không thể nhân đôi hai dòng đầu tiên cho cái đầu.


4
Tôi sẽ lập luận rằng "nhân vật dòng mới" phụ thuộc vào ngôn ngữ / nền tảng, làm cho đầu ra của bạn đủ điều kiện như bất kỳ loại nào khác.
sleblanc

1. Không có thứ gọi là "nhân vật dòng mới". \rlà một sự trở lại vận chuyển, \nlà một nguồn cấp dữ liệu. Cùng nhau, \r\ntạo thành một dòng mới trên Windows. 2. PowerShell không chỉ dành cho Windows. Tôi đã kiểm tra mã của bạn với Pash (một triển khai Windows PowerShell cho Mono) nguồn mở và đầu ra có hàm băm MD5 thích hợp. 3. Vì những điều trên, tôi đã lấy tự do để mở bài của bạn. Nếu bạn không đồng ý với điều này, xin vui lòng wiki lại nó.
Dennis

Rất thú vị, @Dennis ... Tôi nhận thấy sự khác biệt giữa \r\n\n, nhưng như tôi đã nói, tôi không thể sửa MD5 trên Windows mà không có điều gì quá lớn. Cảm ơn vì chỉnh sửa, mặc dù. Đầu tiên tôi cũng đã nghe nói về Pash, vì vậy cũng cảm ơn vì điều đó. Tôi tự hỏi sẽ phức tạp đến mức nào khi xây dựng theo Cygwin ... ;-)
admBorkBork

0

Phân tử , 145 byte

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

Lần đầu tiên tôi cố nén nghệ thuật ASCII: P

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.