Hast du heute schon gemuht?

9

Die Debian Linux-Distribution (und Debian-basierte Distributionen wie Ubuntu, Kali und andere) verwendet einen Paketmanager namens APT. Um das Programm zu installieren, geben fooSie es in ein Terminal ein

sudo apt-get install foo

Ein kleines Osterei von APT ist das folgende

apt-get moo

Was nach der Eingabe die folgende Ausgabe erzeugt

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

Sie müssen ein Programm schreiben, das diese EXAKTE Ausgabe in so wenigen Bytes wie möglich erzeugt. (einschließlich Leerzeichen und einer neuen Zeile)

Hier ist dieselbe Ausgabe mit \nhinzugefügt, um Zeilenumbrüche darzustellen, und a *, um nachgestellte Leerzeichen darzustellen

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

Wie in den Kommentaren angefordert, ist hier die MD5-Summe des Mooing.

35aa920972944a9cc26899ba50024115  -
James
quelle
1
Ich denke, es ist APT, nicht Eignung; Eignung hat keine Super Cow Powers
Aditsu beendet, weil SE
@aditsu oh, ich glaube, ich habe falsch verstanden, was Eignung ist. Ich dachte, Eignung ist der Name von Apt-Get.
James
Könnten Sie als Referenz die Ausgabe von posten apt-get moo|md5sum?
Aditsu beendet, weil SE
25
Bash, 11 Bytes apt-get moo
Dennis
5
@ Tennis Funktioniert nicht unter Arch Linux ... kann das Ergebnis nicht reproduzieren: P
Otomo

Antworten:

6

Bash, 95 Bytes

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.

Das Obige ist ein reversibler Hexdump. Führen Sie die Datei aus, um sie zu erstellen

xxd -r -c 17 > 55918.sh

Füge den Hexdump ein und drücke Enterdann Ctrl+ D.

Führen Sie zum Ausführen der erstellten Datei aus

bash 55918.sh 2>&-

Jeder andere Dateiname reicht aus.

Ich habe zopfli als Kompressor gewählt, da es mit dem Coreutils-Programm zcat kompatibel ist und eine bessere Komprimierung erzielt als gzip, bzip2 und xz.

zcat<<''liest die folgenden Zeilen (bis EOF) und gibt sie als Eingabe an zcat.

Beachten Sie, dass zcat eine Warnung druckt (da ich die Prüfsumme der komprimierten Datei entfernt habe), ebenso wie bash (da das HEREDOC nicht durch eine leere Zeile abgeschlossen wird). Diese Warnungen werden in STDERR (unterdrückt von 2>&-) gedruckt , was standardmäßig pro Konsens auf Meta zulässig ist .

Dennis
quelle
10

CJam, 96

Dies verwendet viele böse Bytes, daher hier ein Hex-Dump davon:

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

Sie können die Datei mit dem Java-Interpreter ausführen. Möglicherweise muss die ISO-8859-1-Codierung verwendet werden, z.
java -Dfile.encoding=ISO-8859-1 …

Probieren Sie es online aus

Äquivalente (und viel längere) ASCII-Version:

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

Probieren Sie es online aus

Erläuterung:

Es gibt 7 Zeichen mit Wiederholungen : _o-|~.. Jeder von ihnen kann als eine Zahl n von 0 bis 6 codiert werden. Für jede sich wiederholende Sequenz codiere ich sowohl den Zeichenindex (n) als auch die Anzahl der Wiederholungen (k) in einem einzelnen Byte : 2 * (k * 7 + n), das als Zeichen damit geschrieben ist Code. Und ich codiere alle einzelnen Zeichen als 2 * c + 1, wobei c der ASCII-Code ist. Alles geht in die anfängliche Zeichenfolge, und der Rest des Programms dekodiert sie:

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

Alte Version (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

Probieren Sie es online aus

Aditsu beenden, weil SE böse ist
quelle
6

Pyth, 100

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

Probieren Sie es online aus: Demonstration

r"string"9 run-length-decodiert den String.

bearbeiten:

Hier ist eine 97-Zeichen-Lösung: Demonstration . Sehr wahrscheinlich sind dies auch 97 Bytes (in ISO-8859-1). Aber zu müde, um die Bytes aufzuschreiben und eine Erklärung abzugeben. Morgen Abend, denke ich.

Jakube
quelle
4

GolfScript (107 Bytes)

Dies ist eine sehr einfache Codierung: Zeilenumbrüche werden durch ersetzt ^und Leerzeichen werden in Lauflängencodierung ausgeführt. Das Ergebnis enthält einige nicht druckbare Zeichen, daher präsentiere ich es hier als xxdAusgabe:

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

Online-Demo

Beachten Sie, dass dies ein Zeichen kürzer als der entsprechende CJam-Code ist. Der Kompromiss wird 'als Trennzeichen für die Hauptzeichenfolge verwendet (Speichern von zwei \Sekunden, um der Zeichenfolge zu entkommen "), Speichern von i, um Zeichenwerte in Ganzzahlen in der Decodierungsschleife umzuwandeln, und Abrufen einer freien nachgestellten Zeilenumbruch; im Vergleich zu Zeichenliteralen als Ersatz für Zeichenfolgenliterale mit einem Zeichen.


Da diese Frage kurz mit markiert wurde , habe ich auch eine Version mit nur (108) druckbaren Zeichen erstellt:

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

Anstelle der Codierung der Lauflängen der Räume als Zeichen ^Azu ^R(und Codieren ^Jwie ^Um Kollisionen zu vermeiden), läßt es newlines unberührt und codiert die Lauflängen , wie Izum Y.

Mein universelles GolfScript Kolmogorov-Programm erzeugt übrigens ein 120-Byte-Programm.

Peter Taylor
quelle
1

Lua, 186 178 Bytes

8 Bytes dank eines Vorschlags von @DJ McMayhem gespart

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?\"..."
Nikolai97
quelle
Sie könnten 5 Bytes sparen, indem Sie Zeile 2 durcha=repeat(" ",17)
James
Ah, danke :) Ich habe versucht herauszufinden, ob ich so etwas tun kann ...
Nikolai97
1

> <> 217 Bytes

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

Leider ist das eine ziemlich langweilige Antwort. Zunächst wird eine Zeichenfolge vorgelesen, die die gesamte Kuh herauszieht, wobei neue Zeilen durch Hinzufügen eines Werts von 10 zum Stapel (a) erstellt werden. Es geht dann in eine Schleife, die nur die Kuh herauszieht.

Ich habe ursprünglich eine Schleife erstellt, um eine Reihe von Leerzeichen hinzuzufügen, aber es war tatsächlich byteweise teurer, als nur Leerzeichen einzufügen.

EDIT: Ich habe vergessen, dass Fisch als "> <>" geschrieben ist.

Blake Doeren
quelle
1

PowerShell, 144 Byte

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

Der obige Code funktioniert ordnungsgemäß in Umgebungen, in denen Zeilenumbrüche im Unix-Stil ( \n) gedruckt werden . Es erzeugt die richtige Ausgabe mit z. B. Pash unter Linux.

Für PowerShell ist es mathematisch $aoptimal, 8 Leerzeichen für die Variable zu haben, da weniger zu viele zusätzliche Leerzeichen zwischen der Variablen und der Kuh bedeutet, um sich zu $blohnen, und mehr bedeutet, dass wir die ersten beiden Zeilen für die Variable nicht verdoppeln können Kopf.

AdmBorkBork
quelle
4
Ich würde argumentieren, dass das "Newline-Zeichen" vom Gebietsschema / der Plattform abhängig ist, sodass Ihre Ausgabe genauso förderfähig ist wie jede andere.
Sleblanc
1. Es gibt kein "Newline-Zeichen". \rist ein Wagenrücklauf, \nist ein Zeilenvorschub. \r\nBildet zusammen eine neue Zeile unter Windows. 2. PowerShell ist nicht nur Windows. Ich habe Ihren Code mit Pash (einer Open-Source-Implementierung von Windows PowerShell für Mono) getestet und die Ausgabe hat den richtigen MD5-Hash. 3. Aus diesem Grund habe ich mir erlaubt, Ihren Beitrag zu entfernen. Wenn Sie damit nicht einverstanden sind, wiederholen Sie das Wiki.
Dennis
Sehr interessant, @Dennis ... Ich bin mir der Unterschiede zwischen \r\nund bewusst \n, aber wie gesagt, ich könnte das MD5 unter Windows ohne etwas Ungeheuerliches nicht richtig machen. Vielen Dank für diese Bearbeitung. Zuerst habe ich auch von Pash gehört, also danke auch dafür. Ich frage mich, wie kompliziert das wäre, unter Cygwin zu bauen ... ;-)
AdmBorkBork
0

Molekül , 145 Bytes

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

Mein erster Versuch, ASCII-Grafik zu komprimieren: P.


quelle