Avez-vous hué aujourd'hui?

9

La distribution Debian Linux (et les distributions basées sur Debian, comme Ubuntu, Kali et autres) utilise un gestionnaire de paquets appelé APT. Pour installer le programme, foovous devez taper dans un terminal

sudo apt-get install foo

Un petit œuf de Pâques d'APT est le suivant

apt-get moo

Qui, après avoir tapé, produira la sortie suivante

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

Vous devez écrire un programme qui produit cette sortie EXACT en aussi peu d'octets que possible. (y compris les espaces de fin et une nouvelle ligne)

Voici la même sortie avec \najouté pour représenter les caractères de nouvelle ligne et a *pour représenter les espaces de fin

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

Comme demandé dans les commentaires, voici le md5sum du mooing.

35aa920972944a9cc26899ba50024115  -
James
la source
1
Je pense que c'est l'APT, pas l'aptitude; aptitude n'a pas de Super Cow Powers
aditsu quitte car SE est EVIL le
@aditsu oh, je suppose que j'ai mal compris ce qu'est l'aptitude. Je pensais que l'aptitude était le nom d'apt-get.
James
Pour référence, pourriez-vous publier la sortie de apt-get moo|md5sum?
aditsu quitte car SE est EVIL le
25
Bash, 11 octets:: apt-get mooP
Dennis
5
@Dennis Ne fonctionne pas sur Arch Linux ... ne peut pas reproduire le résultat: P
Otomo

Réponses:

6

Bash, 95 octets

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.

Ce qui précède est un hexdump réversible. Pour créer le fichier, exécutez

xxd -r -c 17 > 55918.sh

collez le hexdump et appuyez sur Enter, puis sur Ctrl+ D.

Pour exécuter le fichier créé, exécutez

bash 55918.sh 2>&-

Tout autre nom de fichier fera l'affaire.

J'ai choisi zopfli comme compresseur car il est compatible avec le programme Coreutils zcat et permet une meilleure compression que gzip, bzip2 et xz.

zcat<<''lira les lignes suivantes (jusqu'à EOF) et les alimentera en entrée zcat.

Notez que zcat affichera un avertissement (puisque j'ai supprimé la somme de contrôle du fichier compressé), tout comme bash (puisque le HEREDOC n'est pas terminé par une ligne vide). Ces avertissements sont imprimés dans STDERR (supprimé par 2>&-), ce qui est autorisé par défaut par consensus sur Meta .

Dennis
la source
10

CJam, 96

Cela utilise beaucoup d'octets désagréables, alors voici un vidage hexadécimal:

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

Vous pouvez exécuter le fichier avec l'interpréteur java; il peut être nécessaire d'utiliser le codage ISO-8859-1, tel que:
java -Dfile.encoding=ISO-8859-1 …

Essayez-le en ligne

Version ASCII équivalente (et beaucoup plus longue):

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

Essayez-le en ligne

Explication:

Il y a 7 caractères qui ont des répétitions: _o-|~.. Chacun d'eux peut être encodé sous la forme d'un nombre n compris entre 0 et 6. Pour chaque séquence répétée, j'encode à la fois l'index du caractère (n) et le nombre de répétitions (k) dans un seul octet:, 2 * (k * 7 + n)écrit comme un caractère avec celui code. Et j'encode des caractères simples comme 2 * c + 1, où c est le code ASCII. Tout se passe dans la chaîne initiale, et le reste du programme la décode:

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

Ancienne 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

Essayez-le en ligne

aditsu quitte parce que SE est MAL
la source
6

Pyth, 100

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

Essayez-le en ligne: Démonstration

r"string"9 run-length-decodes la chaîne.

Éditer:

Voici une solution de 97 caractères: Démonstration . Très probablement, cela représente également 97 octets (en iso-8859-1). Mais trop fatigué pour écrire les octets et faire une explication. Demain soir, je suppose.

Jakube
la source
4

GolfScript (107 octets)

Il s'agit d'un encodage très simple: les sauts de ligne sont remplacés par ^et les espaces sont encodés en longueur. Le résultat contient des caractères non imprimables, je le présente donc ici en xxdsortie:

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

Démo en ligne

Notez qu'il s'agit d'un caractère plus court que le code CJam correspondant. Le compromis utilise 'comme délimiteur pour la chaîne principale (en enregistrant deux \s pour échapper à "), en enregistrant un ipour convertir les valeurs de caractères en entiers dans la boucle de décodage et en obtenant une nouvelle ligne de fin libre; vs avoir des littéraux de caractères pour remplacer les littéraux de chaîne à un seul caractère.


Puisque cette question a été brièvement marquée , j'ai également fait une version avec seulement (108) caractères imprimables:

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

Au lieu de coder les longueurs des espaces sous forme de caractères ^Aà ^R(et codant pour ^Jque ^des collisions d'éviter), il laisse intacte et newlines code pour les longueurs de passe comme Ià Y.

Soit dit en passant, mon programme GolfScript Kolmogorov à usage général produit un programme de 120 octets.

Peter Taylor
la source
1

Lua, 186 178 octets

8 octets économisés grâce à une suggestion de @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?\"..."

Non golfé:

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
la source
Vous pourriez économiser 5 octets en remplaçant la ligne 2 para=repeat(" ",17)
James
Ah merci :) j'essayais de comprendre si je pouvais faire quelque chose comme ça ...
Nikolai97
1

> <> , 217 octets

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

Malheureusement, c'est une réponse assez ennuyeuse. Il commence par lire une chaîne qui dessine la vache entière, avec des nouvelles lignes faites en ajoutant une valeur de 10 à la pile (a). Il entre ensuite dans une boucle qui tire simplement la vache.

J'ai initialement fait une boucle pour ajouter un ensemble d'espaces, mais c'était en fait plus cher en octets que de simplement mettre des espaces.

EDIT: J'ai oublié que le poisson est écrit "> <>"

Blake Doeren
la source
1

PowerShell, 144 octets

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

Le code ci-dessus fonctionnera correctement dans les environnements qui impriment des sauts de ligne de style Unix ( \n). Il produit la sortie correcte avec, par exemple, Pash sur Linux.

Mathématiquement, pour PowerShell, avoir 8 espaces pour la $avariable est optimal, car moins signifie trop d'espaces supplémentaires entre la variable et la vache pour que cela en $bvaille la peine, et plus signifie que nous ne pouvons pas doubler sur les deux premières lignes pour le tête.

AdmBorkBork
la source
4
Je dirais que le "caractère de nouvelle ligne" dépend des paramètres régionaux / de la plate-forme, ce qui rend votre sortie aussi éligible que les autres.
sleblanc le
1. Il n'y a pas de "caractère de nouvelle ligne". \rest un retour chariot, \nest un saut de ligne. Ensemble, \r\nforme une nouvelle ligne sur Windows. 2. PowerShell n'est pas uniquement Windows. J'ai testé votre code avec Pash (une implémentation open-source de Windows PowerShell pour Mono) et la sortie a le hachage MD5 approprié. 3. En raison de ce qui précède, j'ai pris la liberté de décompresser votre message. Si vous n'êtes pas d'accord avec cela, veuillez le re-wiki.
Dennis
Très intéressant, @Dennis ... Je suis conscient des différences entre \r\net \n, mais comme je l'ai dit, je ne pouvais pas obtenir le MD5 correct sous Windows sans quelque chose de flagrant. Merci pour cette modification, cependant. J'ai d'abord entendu parler de Pash aussi, alors merci aussi. Je me demande à quel point ce serait compliqué de construire sous Cygwin ... ;-)
AdmBorkBork
0

Molécule , 145 octets

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

Ma première fois en essayant de compresser l'art ASCII: P


la source