Você já se queixou hoje?

9

A distribuição Debian Linux (e distribuições baseadas no Debian, como Ubuntu, Kali e outros) usa um gerenciador de pacotes chamado APT. Para instalar o programa foo, digite um terminal

sudo apt-get install foo

Um pequeno Ovo de Páscoa da APT é o seguinte

apt-get moo

Que após a digitação produzirá a seguinte saída

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

Você deve escrever um programa que produz essa saída EXATA no menor número de bytes possível. (incluindo espaços à direita e uma nova linha)

Aqui está a mesma saída com \nadded para representar caracteres de nova linha e a *para representar espaços à direita

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

Conforme solicitado nos comentários, aqui está o md5sum do mooing.

35aa920972944a9cc26899ba50024115  -
James
fonte
11
Eu acho que é APT, não aptidão; aptitude não tem Super Cow Powers
aditsu saiu porque o SE é MAU 02/09
@aditsu oh, acho que não entendi o que é aptidão. Eu pensei que aptitude é o nome de apt-get.
James
Para referência, você poderia postar a saída de apt-get moo|md5sum?
aditsu saiu porque SE é MAU 02/09
25
Bash, 11 bytes:: apt-get mooP
Dennis
5
@Dennis Não funciona no Arch Linux ... não pode reproduzir o resultado: P
Otomo

Respostas:

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.

O acima é um hexdump reversível. Para criar o arquivo, execute

xxd -r -c 17 > 55918.sh

cole o hexdump e pressione Enter, depois Ctrl+ D.

Para executar o arquivo criado, execute

bash 55918.sh 2>&-

Qualquer outro nome de arquivo serve.

Eu escolhi o zopfli como o compressor, pois é compatível com o programa Coreutils zcat e obtém uma melhor compactação que o gzip, bzip2 e xz.

zcat<<''irá ler as seguintes linhas (até EOF) e alimentá-las como entrada para zcat.

Observe que o zcat imprimirá um aviso (desde que retirei a soma de verificação do arquivo compactado), assim como o bash (já que o HEREDOC não é finalizado por uma linha vazia). Esses avisos são impressos em STDERR (suprimido por 2>&-), o que é permitido por padrão por consenso no Meta .

Dennis
fonte
10

CJam, 96

Isso usa muitos bytes desagradáveis, então aqui está um dump 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-|~."=*?}/|

Você pode executar o arquivo com o interpretador java; pode ser necessário usar a codificação ISO-8859-1, como:
java -Dfile.encoding=ISO-8859-1 …

Experimente online

Versão ASCII equivalente (e muito mais longa):

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

Experimente online

Explicação:

Há 7 caracteres que possuem repetições: _o-|~.. Cada um deles pode ser codificado como um número n de 0 a 6. Para cada sequência repetida, estou codificando o índice do caractere (n) e o número de repetições (k) em um único byte:, 2 * (k * 7 + n)escrito como um caractere com esse código. E eu estou codificando qualquer caractere único como 2 * c + 1, onde c é o código ASCII. Tudo vai na string inicial, e o resto do programa está decodificando:

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

Versão antiga (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

Experimente online

aditsu sair porque SE é MAU
fonte
6

Pyth, 100

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

Experimente online: Demonstração

r"string"9 run-length-decodifica a string.

editar:

Aqui está uma solução de 97 caracteres: Demonstração . Muito provavelmente isso também é de 97 bytes (no iso-8859-1). Mas cansado demais para escrever os bytes e fazer uma explicação. Amanhã à noite, eu acho.

Jakube
fonte
4

GolfScript (107 bytes)

Essa é uma codificação muito simples: as novas linhas são substituídas por ^e os espaços são codificados no comprimento da execução. O resultado contém alguns caracteres não imprimíveis, então apresento aqui como xxdsaída:

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

Demonstração online

Observe que esse é um caractere menor que o código CJam correspondente. O tradeoff está usando 'como delimitador para a cadeia principal (salvando dois \s para escapar do "), salvando um ipara converter valores de caracteres em números inteiros no loop de decodificação e obtendo uma nova linha à direita; vs ter literais de caracteres para substituir os literais de cadeia de caracteres únicos.


Como esta pergunta foi brevemente identificada como , também fiz uma versão com apenas (108) caracteres imprimíveis:

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

Em vez de codificar as run-comprimentos dos espaços de caracteres ^Apara ^R(e que codifica ^Jcomo ^a colisões evitar), deixa novas linhas intocada e codifica os run-comprimentos como Ipara Y.

Aliás, meu programa GolfScript Kolmogorov de uso geral produz um programa de 120 bytes.

Peter Taylor
fonte
1

Lua, 186 178 bytes

8 bytes salvos graças a uma sugestão 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?\"..."

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
fonte
Você pode salvar 5 bytes substituindo a linha 2 pora=repeat(" ",17)
James
Ah obrigado :) eu estava tentando descobrir se eu poderia fazer algo assim ...
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<

Infelizmente, essa é uma resposta bastante chata. Começa lendo uma string que desenha toda a vaca, com novas linhas criadas adicionando um valor de 10 à pilha (a). Em seguida, entra em um loop que apenas desenha a vaca.

Originalmente, fiz um loop para adicionar um conjunto de espaços, mas na verdade era mais caro em bytes do que apenas colocar espaços.

EDIT: Esqueceu que o peixe é escrito como "> <>"

Blake Doeren
fonte
1

PowerShell, 144 bytes

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

O código acima funcionará corretamente em ambientes que imprimem novas linhas no estilo Unix ( \n). Produz a saída correta com, por exemplo, Pash no Linux.

Matematicamente, para o PowerShell, ter 8 espaços para a $avariável é o ideal, pois menos significa muitos espaços adicionais entre a variável e a vaca para $bvaler a pena, e mais significa que não podemos dobrar as duas primeiras linhas para o valor cabeça.

AdmBorkBork
fonte
4
Eu argumentaria que o "caractere de nova linha" depende da localidade / plataforma, tornando sua saída tão qualificada quanto qualquer outra.
sleblanc
1. Não existe um "caractere de nova linha". \ré um retorno de carro, \né um avanço de linha. Juntos, \r\nformam uma nova linha no Windows. 2. O PowerShell não é apenas o Windows. Testei seu código com o Pash (uma implementação de código aberto do Windows PowerShell for Mono) e a saída possui o hash MD5 adequado. 3. Por causa do exposto, tomei a liberdade de desmarcar sua publicação. Se você não concorda com isso, por favor, volte a wiki.
Dennis
Muito interessante, @Dennis ... Estou ciente das diferenças entre \r\ne \n, mas como eu disse, não consegui corrigir o MD5 no Windows sem algo flagrante. Obrigado por essa edição, no entanto. Primeiro, eu também ouvi falar de Pash, então obrigado por isso também. Eu me pergunto como complicado que seria a construção sob Cygwin ... ;-)
AdmBorkBork
0

Molécula , 145 bytes

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

Minha primeira vez tentando comprimir arte ASCII: P


fonte