วันนี้คุณ mooed


9

การกระจาย Debian Linux (และ distros ตาม 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

ตามที่ร้องขอในความคิดเห็นนี่คือ md5sum ของ mooing

35aa920972944a9cc26899ba50024115  -

1
ฉันคิดว่ามันเป็น APT ไม่ใช่ความถนัด ความถนัดไม่มี Super Cow Powers
aditsu ออกเพราะ SE เป็นความชั่วร้าย

@aditsu โอ้ฉันเดาว่าฉันเข้าใจผิดว่าความถนัดคืออะไร ฉันคิดว่าความถนัดเป็นชื่อของ apt-get
James

สำหรับการอ้างอิงคุณสามารถโพสต์เอาท์พุทของapt-get moo|md5sum?
aditsu ออกจากเพราะ SE นั้นชั่วร้าย

25
Bash, 11 ไบต์:: apt-get mooP
Dennis

5
@Dennis ไม่ทำงานบน Arch Linux ... ไม่สามารถทำซ้ำผลลัพธ์: P
Otomo

คำตอบ:


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.

ด้านบนเป็น hexdump ย้อนกลับได้ ในการสร้างไฟล์ให้เรียกใช้งาน

xxd -r -c 17 > 55918.sh

วาง hexdump และกดEnterแล้ว+CtrlD

หากต้องการเรียกใช้ไฟล์ที่สร้างขึ้นให้เรียกใช้งาน

bash 55918.sh 2>&-

ชื่อไฟล์อื่น ๆ จะทำ

ฉันเลือกzopfliเป็นคอมเพรสเซอร์เนื่องจากเข้ากันได้กับโปรแกรม Coreutils zcat และได้รับการบีบอัดที่ดีกว่า gzip, bzip2 และ xz

zcat<<''จะอ่านบรรทัดต่อไปนี้ (จนถึง EOF) และให้อาหารพวกเขาเป็น input zcatเพื่อ

โปรดทราบว่า zcat จะพิมพ์คำเตือน (เนื่องจากฉันลอกเช็คซัมของไฟล์บีบอัด) เช่นเดียวกับจะทุบตี (เนื่องจาก HEREDOC ไม่ได้ถูกยกเลิกด้วยบรรทัดว่าง) คำเตือนเหล่านี้จะพิมพ์เพื่อ STDERR (เก็บกด2>&-) ซึ่งได้รับอนุญาตโดยค่าเริ่มต้นต่อฉันทามติเกี่ยวกับ Meta


10

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

คุณสามารถเรียกใช้ไฟล์ด้วยตัวแปลจาวา อาจจำเป็นต้องใช้การเข้ารหัส 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 ความยาวถอดรหัสถอดรหัสสตริง

แก้ไข:

นี่เป็นทางออกที่ 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 ที่เกี่ยวข้อง tradeoff ใช้'เป็นตัวคั่นสำหรับสตริงหลัก (บันทึกสอง\s เพื่อหลีกเลี่ยง") บันทึกiแปลงค่าอักขระเป็นจำนวนเต็มในลูปการถอดรหัสและการขึ้นบรรทัดใหม่ที่ว่าง vs มีตัวอักษรตัวอักษรเพื่อแทนที่ตัวอักษรสตริงตัวเดียว


เนื่องจากคำถามนี้ถูกแท็กไว้สั้น ๆ ฉันยังสร้างเวอร์ชันที่มีอักขระที่พิมพ์ได้เท่านั้น (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 ไบต์

บันทึก 8 ไบต์ด้วยคำแนะนำโดย @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?\"..."

Ungolfed:

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

คุณสามารถบันทึก 5 ไบต์โดยแทนที่บรรทัดที่ 2 ด้วยa=repeat(" ",17)
James

อ่าขอบคุณ :) ฉันพยายามคิดออกว่าฉันจะทำอะไรแบบนั้นได้
ไหม

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) มันสร้างผลลัพธ์ที่ถูกต้องด้วยเช่นPashบน Linux

ในทางคณิตศาสตร์สำหรับ PowerShell การมีช่องว่าง 8 ตัวสำหรับ$aตัวแปรนั้นเหมาะสมที่สุดเนื่องจากน้อยกว่าหมายถึงช่องว่างเพิ่มเติมมากเกินไประหว่างตัวแปรและวัวเพื่อให้$bคุ้มค่า ศีรษะ.


4
ฉันจะยืนยันว่า "อักขระขึ้นบรรทัดใหม่" ขึ้นอยู่กับสถานที่ / แพลตฟอร์มทำให้การแสดงผลของคุณมีสิทธิ์เหมือนกัน
sleblanc

1. ไม่มีสิ่งเช่น "อักขระบรรทัดใหม่" \rคือการคืนสินค้า\nเป็น linefeed ร่วมกัน\r\nสร้างบรรทัดใหม่ใน Windows 2. PowerShell ไม่ใช่ Windows เท่านั้น ฉันได้ทดสอบโค้ดของคุณด้วยPash (การใช้งานแบบโอเพ่นซอร์สของ Windows PowerShell for Mono) และผลลัพธ์มีแฮช MD5 ที่เหมาะสม 3. ด้วยเหตุผลข้างต้นฉันใช้เสรีภาพในการโพสต์ข้อความของคุณใน unwiki หากคุณไม่เห็นด้วยกับเรื่องนี้
เดนนิส

น่าสนใจมาก @Dennis ... ฉันตระหนักถึงความแตกต่างระหว่าง \r\nและ\nแต่อย่างที่ฉันบอกว่าฉันไม่สามารถแก้ไข MD5 บน Windows ได้โดยที่ไม่มีอะไรร้ายแรง ขอบคุณสำหรับการแก้ไข ก่อนอื่นฉันก็เคยได้ยินเรื่องของ Pash เช่นกันดังนั้นก็ขอบคุณเช่นกัน ฉันสงสัยว่าซับซ้อนแค่ไหนที่จะสร้างภายใต้ Cygwin ... ;-)
AdmBorkBork

0

โมเลกุล , 145 ไบต์

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

ครั้งแรกที่ฉันพยายามบีบอัดศิลปะ ASCII: P

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.