¿Te mugía hoy?

9

La distribución Debian Linux (y las distribuciones basadas en Debian, como Ubuntu, Kali y otras) usan un administrador de paquetes llamado APT. Para instalar el programa foo, escribiría en un terminal

sudo apt-get install foo

Un pequeño huevo de Pascua de APT es el siguiente

apt-get moo

Que después de escribir producirá el siguiente resultado

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

Debe escribir un programa que produzca esta salida EXACTA en la menor cantidad de bytes posible. (incluidos los espacios finales y una nueva línea)

Aquí está el mismo resultado con \nagregado para representar caracteres de nueva línea y a *para representar espacios finales

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

Como se solicitó en los comentarios, aquí está el md5sum del mugido.

35aa920972944a9cc26899ba50024115  -
James
fuente
1
Creo que es APT, no aptitud; aptitude no tiene Super Cow Powers
aditsu se retiró porque SE es MALO el
@aditsu oh, supongo que no entendí lo que es la aptitud. Pensé que aptitud es el nombre de apt-get.
James
Como referencia, ¿podría publicar la salida de apt-get moo|md5sum?
Aditsu renunció porque SE es MALO
25
Bash, 11 bytes:: apt-get mooP
Dennis
55
@Dennis no funciona en Arch Linux ... no puede reproducir el resultado: P
Otomo

Respuestas:

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.

Lo anterior es un hexdump reversible. Para crear el archivo, ejecute

xxd -r -c 17 > 55918.sh

pegue el hexdump y presione Enter, luego Ctrl+ D.

Para ejecutar el archivo creado, ejecute

bash 55918.sh 2>&-

Cualquier otro nombre de archivo servirá.

Elegí zopfli como compresor, ya que es compatible con el programa Coreutils zcat y logra una mejor compresión que gzip, bzip2 y xz.

zcat<<''leerá las siguientes líneas (hasta EOF) y las alimentará como entrada para zcat.

Tenga en cuenta que zcat imprimirá una advertencia (ya que eliminé la suma de comprobación del archivo comprimido), al igual que bash (ya que HEREDOC no termina con una línea vacía). Estas advertencias se imprimen en STDERR (suprimido por 2>&-), que está permitido de forma predeterminada por consenso en Meta .

Dennis
fuente
10

CJam, 96

Esto usa muchos bytes desagradables, así que aquí hay un volcado hexadecimal:

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

Puede ejecutar el archivo con el intérprete de Java; Puede ser necesario utilizar la codificación ISO-8859-1, como:
java -Dfile.encoding=ISO-8859-1 …

Pruébalo en línea

Versión ASCII equivalente (y mucho más larga):

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

Pruébalo en línea

Explicación:

Hay 7 personajes que tienen repeticiones: _o-|~.. Cada uno de ellos puede codificarse como un número n del 0 al 6. Para cada secuencia repetitiva, estoy codificando tanto el índice del carácter (n) como el número de repeticiones (k) en un solo byte:, 2 * (k * 7 + n)escrito como un carácter con ese código. Y estoy codificando cualquier carácter individual como 2 * c + 1, donde c es el código ASCII. Todo va en la cadena inicial, y el resto del programa lo decodifica:

{…}/      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ón anterior (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

Pruébalo en línea

aditsu renunció porque SE es MALO
fuente
6

Pyth, 100

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

Pruébelo en línea: demostración

r"string"9 run-length-decodifica la cadena.

editar:

Aquí hay una solución de 97 char: Demostración . Muy probablemente esto también sea de 97 bytes (en iso-8859-1). Pero demasiado cansado para escribir los bytes y hacer una explicación. Mañana por la noche, supongo.

Jakube
fuente
4

GolfScript (107 bytes)

Esta es una codificación muy simple: las líneas nuevas se reemplazan por ^, y los espacios se codifican por longitud de ejecución. El resultado contiene algunos caracteres no imprimibles, así que lo presento aquí como xxdsalida:

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

Demostración en línea

Tenga en cuenta que este es un carácter más corto que el código CJam correspondiente. La compensación se usa 'como delimitador para la cadena principal (guardando dos \s para escapar de la "), guardando ipara convertir valores de caracteres a enteros en el ciclo de decodificación y obteniendo una nueva línea libre; vs tener literales de caracteres para reemplazar los literales de cadena de un solo carácter.


Dado que esta pregunta se etiquetó brevemente como , también hice una versión con solo (108) caracteres imprimibles:

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

En lugar de codificar los run-longitudes de los espacios como caracteres ^Aa ^R(y codifica ^Jcomo ^a las colisiones evitar), que deja intacto saltos de línea y codifica el período previo longitudes como Ia Y.

Por cierto, mi programa GolfScript Kolmogorov de uso general produce un programa de 120 bytes.

Peter Taylor
fuente
1

Lua, 186 178 bytes

8 bytes guardados gracias a una sugerencia 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?\"..."

Sin 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
fuente
Puede guardar 5 bytes reemplazando la línea 2 cona=repeat(" ",17)
James
Ah, gracias :) estaba tratando de averiguar si podría hacer algo así ...
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<

Lamentablemente, esta es una respuesta bastante aburrida. Comienza leyendo una cadena que dibuja toda la vaca, con líneas nuevas agregando un valor de 10 a la pila (a). Luego entra en un bucle que simplemente saca a la vaca.

Originalmente hice un bucle para agregar un conjunto de espacios, pero en realidad era más costoso en bytes que solo poner espacios.

EDITAR: Olvidé que el pez está escrito como "> <>"

Blake Doeren
fuente
1

PowerShell, 144 bytes

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

El código anterior funcionará correctamente en entornos que imprimen líneas nuevas de estilo Unix ( \n). Produce la salida correcta con, por ejemplo, Pash en Linux.

Matemáticamente, para PowerShell, tener 8 espacios para la $avariable es lo óptimo, ya que menos significa demasiados espacios adicionales entre la variable y la vaca para que $bvalga la pena, y más significa que no podemos duplicar en las dos primeras líneas para la variable cabeza.

AdmBorkBork
fuente
44
Yo diría que el "carácter de nueva línea" depende de la ubicación / plataforma, haciendo que su salida sea tan elegible como cualquier otra.
sleblanc
1. No existe el "personaje de nueva línea". \res un retorno de carro, \nes un salto de línea. Juntos, \r\nforman una nueva línea en Windows. 2. PowerShell no es solo para Windows. He probado su código con Pash (una implementación de código abierto de Windows PowerShell para Mono) y el resultado tiene el hash MD5 adecuado. 3. Debido a lo anterior, me tomé la libertad de deshacer tu publicación. Si no está de acuerdo con esto, vuelva a wiki.
Dennis
Muy interesante, @Dennis ... Soy consciente de las diferencias entre \r\ny \n, pero como dije, no pude obtener el MD5 correcto en Windows sin algo atroz. Gracias por esa edición, sin embargo. Primero, también he oído hablar de Pash, así que gracias por eso también. Me pregunto lo complicado que sería construir bajo Cygwin ... ;-)
AdmBorkBork
0

Molécula , 145 bytes

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

Mi primera vez tratando de comprimir el arte ASCII: P


fuente