Hai muggito oggi?


9

La distribuzione Debian Linux (e le distribuzioni basate su Debian, come Ubuntu, Kali e altri) usa un gestore di pacchetti chiamato APT. Per installare il programma foo, digitare in un terminale

sudo apt-get install foo

Un piccolo uovo di Pasqua di APT è il seguente

apt-get moo

Che dopo aver digitato produrrà il seguente output

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

È necessario scrivere un programma che produce questo output EXACT nel minor numero di byte possibile. (compresi gli spazi finali e una nuova linea)

Ecco lo stesso output \naggiunto per rappresentare i caratteri di nuova riga e a *per rappresentare gli spazi finali

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

Come richiesto nei commenti, ecco il md5sum del muggito.

35aa920972944a9cc26899ba50024115  -

1
Penso che sia APT, non attitudine; aptitude non ha Super Cow Powers
aditsu ha smesso perché SE è MALE

@aditsu oh, immagino di aver frainteso cos'è l'attitudine. Pensavo che aptitude fosse il nome di apt-get.
James,

Per riferimento, potresti pubblicare l'output di apt-get moo|md5sum?
aditsu smesso perché SE è MALE

25
Bash, 11 byte:: apt-get mooP
Dennis

5
@Dennis Non funziona su Arch Linux ... impossibile riprodurre il risultato: P
Otomo,

Risposte:


6

Bash, 95 byte

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.

Quanto sopra è un hexdump reversibile. Per creare il file, eseguire

xxd -r -c 17 > 55918.sh

incollare il dump esadecimale e premere Enter, quindi Ctrl+ D.

Per eseguire il file creato, eseguire

bash 55918.sh 2>&-

Qualsiasi altro nome di file farà.

Ho scelto zopfli come compressore poiché è compatibile con il programma zut Coreutils e raggiunge una compressione migliore di gzip, bzip2 e xz.

zcat<<''leggerà le seguenti righe (fino a EOF) e le inserirà come input per zcat.

Nota che zcat stamperà un avviso (poiché ho rimosso il checksum del file compresso), così come bash (poiché HEREDOC non è terminato da una riga vuota). Questi avvisi vengono stampati su STDERR (soppresso da 2>&-), che è consentito per impostazione predefinita per consenso su Meta .


10

CJam, 96

Questo utilizza molti byte cattivi, quindi ecco un dump esadecimale:

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

È possibile eseguire il file con l'interprete java; potrebbe essere necessario utilizzare la codifica ISO-8859-1, ad esempio:
java -Dfile.encoding=ISO-8859-1 …

Provalo online

Versione ASCII equivalente (e molto più lunga):

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

Provalo online

Spiegazione:

Ci sono 7 caratteri che hanno ripetizioni: _o-|~.. Ognuno di essi può essere codificato come un numero n da 0 a 6. Per ogni sequenza ripetuta, sto codificando sia l'indice del carattere (n) sia il numero di ripetizioni (k) in un singolo byte:, 2 * (k * 7 + n)scritto come un carattere con quello codice. E sto codificando qualsiasi singolo carattere come 2 * c + 1, dove c è il codice ASCII. Tutto va nella stringa iniziale e il resto del programma lo sta 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

Vecchia versione (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

Provalo online


6

Pyth, 100

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

Provalo online: dimostrazione

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

modificare:

Ecco una soluzione 97 caratteri: dimostrazione . Molto probabilmente anche 97 byte (in iso-8859-1). Ma troppo stanco per scrivere i byte e fare una spiegazione. Domani sera, immagino.


4

GolfScript (107 byte)

Questa è una codifica molto semplice: le nuove righe vengono sostituite ^e gli spazi sono codificati per la lunghezza della corsa. Il risultato contiene alcuni caratteri non stampabili, quindi lo presento qui come xxdoutput:

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

Demo online

Si noti che questo è un carattere più corto del corrispondente codice CJam. Il compromesso sta usando 'come delimitatore per la stringa principale (salvando due \s per sfuggire a "), salvando un iper convertire i valori dei caratteri in numeri interi nel ciclo di decodifica e ottenendo una nuova riga finale libera; vs avere letterali di caratteri per sostituire i letterali di stringa di caratteri singoli.


Poiché questa domanda è stata brevemente taggata , ho anche creato una versione con solo (108) caratteri stampabili:

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

Invece di codifica run-lunghezze degli spazi come caratteri ^Aa ^R(e codifica ^Jcome ^a collisioni Evitare), lascia a capo intatta e codifica run-lunghezze Ia Y.

Per inciso, il mio programma Kolmogorov per uso generico GolfScript produce un programma a 120 byte.


1

Lua, 186 178 byte

8 byte salvati grazie a un suggerimento di @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?\"..."

È possibile salvare 5 byte sostituendo la riga 2 cona=repeat(" ",17)
James

Ah grazie :) stavo cercando di capire se potevo fare qualcosa del genere ...
Nikolai97

1

> <> , 217 byte

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

Purtroppo questa è una risposta piuttosto noiosa. Inizia leggendo una stringa che disegna l'intera mucca, con nuove linee create aggiungendo un valore di 10 alla pila (a). Quindi entra in un anello che attira semplicemente la mucca.

Inizialmente ho creato un ciclo per aggiungere un set di spazi, ma in realtà era più costoso in termini di byte rispetto al semplice inserimento di spazi.

EDIT: dimenticato che il pesce è scritto come "> <>"


1

PowerShell, 144 byte

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

Il codice sopra funzionerà correttamente in ambienti che stampano newline in stile Unix ( \n). Produce l'output corretto con, ad esempio, Pash su Linux.

Matematicamente, per PowerShell, avere 8 spazi per la $avariabile è l'ottimale, poiché meno significa troppi spazi aggiuntivi tra la variabile e la mucca per rendere $butile, e più significa che non possiamo raddoppiare sulle prime due righe per testa.


4
Direi che il "carattere newline" dipende dalle impostazioni locali / della piattaforma, rendendo il tuo output idoneo come qualsiasi altro.
slitta

1. Non esiste un "personaggio newline". \rè un ritorno \na capo , è un avanzamento riga. Insieme, \r\nforma una nuova riga su Windows. 2. PowerShell non è solo Windows. Ho testato il tuo codice con Pash (un'implementazione open source di Windows PowerShell per Mono) e l'output ha l'hash MD5 corretto. 3. A causa di quanto sopra, mi sono preso la libertà di sbloccare il tuo post. Se non sei d'accordo, ti preghiamo di ripetere il wiki.
Dennis,

Molto interessante, @Dennis ... Sono consapevole delle differenze tra \r\ne \n, ma come ho detto, non ho potuto ottenere l'MD5 corretto su Windows senza qualcosa di egregio. Grazie per quella modifica, però. Prima ho sentito parlare anche di Pash, quindi grazie anche per quello. Mi chiedo quanto sarebbe complicato costruire sotto Cygwin ... ;-)
AdmBorkBork

0

Molecola , 145 byte

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

La prima volta che provo a comprimere l'arte ASCII: P

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.