La risposta alla vita, all'universo e all'arte ASCII


25

Sfida semplice: prova a produrre il seguente testo nel minor numero di byte possibile:

       the        answer
      toli      fetheuniv
     ersea     nde     ver
    ything     the     ans
   wer tol     ife     the
  uni  ver           sean
 dev   ery         thin
gth    ean       swer
tolifetheuni    ver
seandeveryth   ing
       the     ans      wer
       tol     ifetheuniver
       sea     ndeverything

Il disegno originale contiene 332 caratteri.

Regole

  • Nessun input o input non utilizzato.
  • L'output può essere in qualsiasi formato ragionevole (stringa, elenco di stringhe, matrice di caratteri e così via).
  • È possibile utilizzare lettere maiuscole anziché minuscole per il disegno, se lo si preferisce.
  • Trailing spazi bianchi e newline consentiti.
  • Questo è , quindi può vincere il programma / funzione più breve per ogni lingua!

Gli appunti

  • Questo è stato identificato come un possibile duplicato di Non siamo estranei al codice golf, conosci le regole e anche io . Quella domanda riguardava la ricerca e la sostituzione del testo. Qui devi disegnare una forma usando un dato testo, e almeno due delle risposte attuali dimostrano che i linguaggi del golf possono battere semplici algoritmi di compressione in questo caso.

Questo viene dalla sandbox .
Charlie

1
Personalmente, penso che questo sia in tema e non un inganno. Non penso che tu abbia bisogno di un preventivo per spoiler, comunque.
programmatore

1
@Phoenix Non credo che questo sia una vittima, sogl ha outgolfed bubblegum . Pertanto, la compressione non è un modo ottimale per farlo.
programmatore

1
Ad essere sincero, non mi rendevo conto che il mio voto di riapertura fosse vincolante. Per i motivi già menzionati da @ programmer5000, io davvero non credo che sia una vittima di Siamo estranei ... . Potrebbe essere un inganno di un'altra sfida, ancora da identificare, ma non questa.
Arnauld,

1
@Nacht la parte migliore è che in un primo momento mi ha attirato l' 42con *i personaggi, e poi sostituito con il testo, che si adattano perfettamente. Non ho dovuto modificare il disegno originale per adattare la frase. Coincidenza?
Charlie

Risposte:


21

Python 3 , 224 220 219 215 211 194 byte

  • Grazie a @TFeld per 1 5 byte: if(j%27<1)*janziché if j*(j%27<1)e dichiarazione di stampa semplificata.
  • Grazie a @Leaky Nun per 4 byte: invertendo 0 e 1, non è stato richiesto il riempimento per zeri 7*'0'
  • @Leaky nun ha salvato 17 byte con le sue incredibili abilità nel golf (Grazie mille !!!!): fantastico uso dell'indicizzazione modulare
i=j=0
k=int("OHZE5WCKDTW6JYMO1JNROAAJQVAN6F8KEO0SMKJM86XIBMCEH5FXXONZGBAVCN3689DS",36)
while k:j+=1;print(k%2*'theanswertolifetheuniverseandeverything'[i%39]or' ',end='\n'*(j%27<1));i+=k%2;k//=2

Provalo online!

Spiegazione:

Utilizza la compressione base-36 per comprimere questo numero binario (esclusa la nuova riga)

111111100011111111000000111
111111000011111100000000011
111110000011111000111110001
111100000011111000111110001
111000100011111000111110001
110001100011111111111000011
100011100011111111100001111
000111100011111110000111111
000000000000111100011111111
000000000000111000111111111
111111100011111000111111000
111111100011111000000000000
111111100011111000000000000

Fondamentalmente abbiamo due contatori ie j. Incontrando un 1stampiamo uno spazio; In caso 0contrario, stampiamo la lettera successiva dalla stringa e aumentiamo i. jaumenta per ciascuno 0 or 1. Stampiamo anche nuove righe ogni volta che è necessario, cioè quando j%27<1diventa realtà.


1
È possibile salvare 1 byte cambiando if j*(j%27<1):inif(j%27<1)*j:
TFeld


2
201 byte con aritmetica intera
Leaky Nun,

2
200 byte con indicizzazione modulare
Leaky Nun,


8

Python 2 , 235 218 213 byte

x=bin(int('OC5POO6MZYQNBWY0RP6BKBZCOZL13MIAB6I8YZ5N7LXSZBVKX7GC57AW5631YCJ6XCLC',36))[2:].replace('1',' ')
for c in'theanswertolifetheuniverseandeverything'*4:x=x.replace('0',c,1)
while x:y,x=x[:27],x[27:];print y

Provalo online!

Passato a una base 36 codificata int delle posizioni delle lettere come suggerito nella domanda w.

Sostituisce ogni personaggio uno alla volta.

       111        111111                              the        answer
      1111      111111111                            toli      fetheuniv
     11111     111     111                          ersea     nde     ver
    111111     111     111                         ything     the     ans
   111 111     111     111                        wer tol     ife     the
  111  111           1111                        uni  ver           sean
 111   111         1111             --->        dev   ery         thin
111    111       1111                          gth    ean       swer
111111111111    111                            tolifetheuni    ver
111111111111   111                             seandeveryth   ing
       111     111      111                           the     ans      wer
       111     111111111111                           tol     ifetheuniver
       111     111111111111                           sea     ndeverything

Modifica: Sembra che officialaimm abbia usato la base 36 prima di me.


7

Bubblegum , 125 byte

0000000: 45 8f c5 01 03 31 0c 04 ff ae 62 4b 0b 99 02 c7  E....1....bK....
0000010: d8 7d 84 e7 f9 59 30 5e 41 59 4a 84 71 ef e6 3d  .}...Y0^AYJ.q..=
0000020: 4e c1 ea fd b7 42 48 91 66 d6 ae 6e da 89 d3 1c  N....BH.f..n....
0000030: ef 60 ba 97 ae 6e b6 74 2e a5 76 d9 ad ae e4 16  .`...n.t..v.....
0000040: 69 59 08 a6 a6 e8 23 d4 22 af 08 d0 20 7d 17 f0  iY....#."... }..
0000050: 8a 9b 7c 76 c2 61 7b c8 4b 01 41 23 50 24 32 87  ..|v.a{.K.A#P$2.
0000060: f5 98 9e 88 35 24 21 83 ac 50 b2 e0 a2 16 0e 42  ....5$!..P.....B
0000070: bb ba a5 bc ae 6e bd 76 b7 69 d9 f9 07           .....n.v.i...

Provalo online!


Come hai generato questo? Il più vicino che potevo ottenere era 127
musicman523

1
Con zopfli .
Dennis,

Ho usato zopfli, ma giuro che ci ho provato con e senza trascinare newline, con spazi extra ... non potevo andare sotto i 127
musicman523

6

05AB1E , 83 79 74 byte

-4 byte grazie a Erik the Outgolfer

Emette un elenco di stringhe per salvare un byte.

•2ÖH₆Ôn₅Ò\ÊÑĆ¸Ý¾*£„ÔûC∞qΘœ™‚¹µ—₃₄fm•vNÈy×vyiðë¾¼’€€Ž»to‚쀀ªÜ€ƒ‰Ö’è}}}J27ô

Provalo online!

Spiegazione

2ÖH₆Ôn₅Ò\ÊÑĆ¸Ý¾*£„ÔûC∞qΘœ™‚¹µ—₃₄fm è la rappresentazione di base 255 del numero decimale:

73869469755353565353431353533323902433339443437469034389033390735363735903735903

Che codifica rispettivamente per le serie 1s e 0s, anche se gli indici sono la 1s e irregolare indebolisce la 0s. Questo valuta il numero binario:

111111100011111111000000111
111111000011111100000000011
111110000011111000111110001
111100000011111000111110001
111000100011111000111110001
110001100011111111111000011
100011100011111111100001111
000111100011111110000111111
000000000000111100011111111
000000000000111000111111111
111111100011111000111111000
111111100011111000000000000
111111100011111000000000000

Codice

•...•                                         Convert from base 255 to decimal
     v                                }       For each digit, do:
      NÈy×                                       is_even(index) repeated that many times
          v                          }           For each digit, do:
           yi                       }               If digit is truthy, then:
             ð                                         Push space
              ë                                     Else:
               ¾¼                                      Get and increment counter, starts at 0
                 ’€€Ž»to‚쀀ªÜ€ƒ‰Ö’                    Push "theanswertolifetheuniverseandeverything"
                                   è                   Get the character at that index
                                       J      Join whole stack
                                        27ô   Split into parts of 27

Sostituire "ÔAo îιË3š1ĆRÕ₃FWš{ÓÛÏ.!XµM§&¶ñD°3PŸ{óNι2Ðbмh"253öcon •—."Ôq‚Ā0Ál0j¿«ªžé¨0õ₄7“Ÿ!½ÏiæÆø-δq–Å05q½Yñá+•per -4.
Erik the Outgolfer,

@EriktheOutgolfer grazie, ho aggiornato la mia risposta e ora finalmente so a cosa servono :)
kalsowerus,

Bella risposta :). Spero che tu continui a imparare la lingua. Se hai domande, sentiti libero di chattare con me.
Magic Octopus Urn il

@MagicOctopusUrn Grazie mille! :)
kalsowerus,

6

Python 2 , 220 213 212 byte

-1 byte passando ()*4per %39da @officialaimm

s=""
w=l=i=0
for g in`int("352G7FS4XC8J2Q2M2HNK7IZI65Z9TVUMHOZ6MR3HY46RQBLWY4PR",36)`[:-1]:
	for j in g*int(g):l+=1;s+=[' ',"theanswertolifetheuniverseandeverything"[w%39]][i%2]+"\n"*(l%27<1);w+=i%2
	i+=1
print s

Provalo online!

Questo è un approccio diverso dalle altre risposte di Python. Uso una codifica hex base-36 (salvata 7 byte) di una codifica in stile RLE in stile PNG dell'immagine (una stringa di cifre che indica il numero di pixel ripetuti consecutivi).

La stringa di cifre è :

73869469755353565353431353533323902433339443437469034389033390735363735903735903

Quindi eseguo l'iterazione attraverso quelle cifre e in alternativa stampo quel numero di "" o caratteri dalla tavolozza ("la risposta ..."). Quando si ripetono più di 9 personaggi, aggiungerei semplicemente uno 0 e poi il resto.


+1 per approccio diverso. È possibile salvare un byte utilizzando "theanswertolifetheuniverseandeverything"[w%39] TIO
officialaimm il

Grazie e notato. Stavo provando a lavorarci insieme a un 'o' sostituto per la configurazione booleana della parentesi che ho qui ora, ma sta rovinando le mie nuove righe ...
Coty Johnathan Saxman

Non sapevo che PNG usasse questo algoritmo di compressione - pensavo fosse GIF.
wizzwizz4,

Bella presa. Non era PNG (né GIF), ma in realtà RLE. Aggiungerò un link alla risposta.
Coty Johnathan Saxman,

5

SOGL V0.12 , 74 byte

"ō⅓׀?@C⁶¬IΧΖO‘@øŗč"βΘ⅔Μv∙KΩqψ3╥W≡A;2ļm½±iq╗∆Δ⁶Πqīσ‽ε⁰5τΩ⅜δσΞoΤi┘‽N¹\Λ:‘'    n

Provalo qui!

"...‘              push "the answer to life the universe and everything". because of a bug-not-really-bug, the starting quote is required
     @øŗ           remove spaces
        č          chop it into characters
         "...‘     push a string of spaces and ŗ where ŗ gets replaced with each next characters of the character array
              ' n  split into an array of line length 27

5

Mi permetta di rispondere alla mia domanda ...

Carbone di legna , 140 126 112 byte

A⟦⟧βF⁶⁸F⁻℅§”c#*U[“⎆Vl¶·δ‴ü"Ip8ξZ{e/⪫¦σMM⪫¢Q⁸ULê←⪫W?—υ⁻$⌀)”ι³⁴«¿﹪ι²§”m⌊0Y℅¿№”XJ-⁵η}Z¿8_*<o%!±Ÿ”L⊞Oβω ¿¬﹪L⊞Oυω²⁷⸿

Provalo online!

Hai qui un link alla versione dettagliata più vicina.

Spiegazione (vedere la versione dettagliata per i dettagli):

  • La )%*(+&(+)''%'%'('%'%&%#%'%'%%%$%-&%%%%+&&%&%)&(.&%*.%%2%'%(%)%'.)%'.stringa (68 byte, 48 byte compressi) è una rappresentazione della codifica RLE del disegno. Ogni codice carattere meno 34 è il numero di spazi (posizioni pari) o il numero di caratteri di testo (posizioni dispari) da stampare in sequenza.
  • L'algoritmo decomprime semplicemente la stringa con codifica RLE e scrive il carattere successivo della gtheanswertolifetheuniverseandeverythinstringa (39 byte, 27 byte compressi) ogni volta che è necessario scrivere un carattere non bianco. Mentre controllo la lunghezza di un elenco per ottenere il carattere successivo e tale elenco inizia con un elemento, l'ultimo carattere della stringa viene scritto nella prima posizione.
  • Ogni 27 caratteri scritti inserisco una nuova riga.

Ringraziamenti

  • Mille grazie a Neil e ai suoi incredibili consigli per avermi permesso di salvare 28 byte e di essere finalmente in grado di battere Bubblegum. :-)

1
Se usi Assign(Minus(1, c), c);allora puoi semplicemente usare if (c) { ... } else Print(" ");.
Neil,

In realtà se si utilizza for (68)e AtIndex("...", i)quindi è possibile utilizzare Modulo(i, 2)invece e non è necessario caffatto.
Neil,

E se lo usi if (Not(Modulo(Length(PushOperator(u, w)), 27))), non hai nemmeno bisogno a.
Neil,

Oh, e AtIndexfa un automatico Modulocosì Modulo(b, 39)può essere giusto b.
Neil,

1
uè una variabile predefinita che è solo un array vuoto (salva usando A⟦⟧υ). Ogni volta che spingi qualcosa, la sua lunghezza aumenta di 1. Questo è più breve di un compito esplicito da incrementare.
Neil,

5

JavaScript (ES6), 207 205 203 byte

Restituisce una matrice di stringhe con alcuni spazi finali.

let f =

_=>[16515968,33489856,k=58950624,k+16,k-40,31458204,7865230,1966983,462847,233471,117670784,k=134185856,k].map(n=>'heanswertolifetheuniverseandeverythingt '.replace(/./g,(_,i,s)=>s[n>>i&i<27?k++%39:39]))

console.log(f().join('\n'));


4

Retina , 183 byte


7386¶6469¶555353¶465353¶33135353¶23239024¶133394¶034374¶090343¶090333¶735363¶735903¶735903¶theanswertolifetheuniverseandeverything
.*$
$&$&$&$&
(\d)(.)
$1$* $2$*
+s`1([ 1¶]+)(.)
$2$1

Provalo online! Spiegazione: Il primo stadio aggiunge la codifica RLE della bitmap della cella e il testo, che il secondo stadio duplica quindi alla lunghezza corretta, mentre il terzo stadio decodifica la codifica RLE. Il quarto stadio sposta quindi il testo nelle celle.


4

Gelatina , 83 byte

“¡eu⁾ṃṣƬİḂṃ½)ṣṾṘƇ@^AṀẆṫ+¢ṗɲ⁾ṭḋZ`⁺×Ṗj½Ṇ-Þḣ2żṿƤc’BCẋ"`“ÆZ⁺ƙ{Æß¥ŀŒ1gỤ3Ḍṭṁ ṃjɓ»ṁȯ€⁶s27Y

Provalo online!

Come funziona

“XX’BCẋ"`“YY»ṁȯ€⁶s27Y
“XX’                   a large number
    B                  binary
     C                 complement
      ẋ"`              1 becomes [1] and 0 becomes []
             ṁ         reshape
         “YY»             "theanswertolifetheuniverseandeverything"
              ȯ€⁶      replace [] with " "
                 s27   split into chunks of length 27
                    Y  join with newline

3

Aggiungi ++ , 1398 byte

+32
&
&
&
&
&
&
&
+84
&
-12
&
-3
&
-69
&
&
&
&
&
&
&
&
+65
&
+13
&
+5
&
+4
&
-18
&
+13
&
-104
&
+22
&
&
&
&
&
&
+84
&
-5
&
-3
&
-3
&
-73
&
&
&
&
&
&
+70
&
-1
&
+15
&
-12
&
-3
&
+16
&
-7
&
-5
&
+13
&
-108
&
+22
&
&
&
&
&
+69
&
+13
&
+1
&
-14
&
-4
&
-65
&
&
&
&
&
+78
&
-10
&
+1
&
-69
&
&
&
&
&
+86
&
-17
&
+13
&
-104
&
+22
&
&
&
&
+89
&
-5
&
-12
&
+1
&
+5
&
-7
&
-71
&
&
&
&
&
+84
&
-12
&
-3
&
-69
&
&
&
&
&
+65
&
+13
&
+5
&
-105
&
+22
&
&
&
+87
&
-18
&
+13
&
-82
&
+84
&
-5
&
-3
&
-76
&
&
&
&
&
+73
&
-3
&
-1
&
-69
&
&
&
&
&
+84
&
-12
&
-3
&
-91
&
+22
&
&
+85
&
-7
&
-5
&
-73
&
&
+86
&
-17
&
+13
&
-82
&
&
&
&
&
&
&
&
&
&
&
+83
&
-14
&
-4
&
+13
&
-100
&
+22
&
+68
&
+1
&
+17
&
-86
&
&
&
+69
&
+13
&
+7
&
-89
&
&
&
&
&
&
&
&
&
+84
&
-12
&
+1
&
+5
&
-100
&
+93
&
+13
&
-12
&
-72
&
&
&
&
+69
&
-4
&
+13
&
-78
&
&
&
&
&
&
&
+83
&
+4
&
-18
&
+13
&
-104
&
+106
&
-5
&
-3
&
-3
&
-3
&
-1
&
+15
&
-12
&
-3
&
+16
&
-7
&
-5
&
-73
&
&
&
&
+86
&
-17
&
+13
&
-104
&
+105
&
-14
&
-4
&
+13
&
-10
&
+1
&
+17
&
-17
&
+13
&
+7
&
-5
&
-12
&
-72
&
&
&
+73
&
+5
&
-7
&
-93
&
+22
&
&
&
&
&
&
&
+84
&
-12
&
-3
&
-69
&
&
&
&
&
+65
&
+13
&
+5
&
-83
&
&
&
&
&
&
+87
&
-18
&
+13
&
-104
&
+22
&
&
&
&
&
&
&
+84
&
-5
&
-3
&
-76
&
&
&
&
&
+73
&
-3
&
-1
&
+15
&
-12
&
-3
&
+16
&
-7
&
-5
&
+13
&
-17
&
+13
&
-104
&
+22
&
&
&
&
&
&
&
+83
&
-14
&
-4
&
-65
&
&
&
&
&
+78
&
-10
&
+1
&
+17
&
-17
&
+13
&
+7
&
-5
&
-12
&
+1
&
+5
&
-7
&
P

Provalo online!

Sembra hardcoding è il modo più breve (almeno in Aggiungi ++)


3

Vim, 239 sequenze di tasti

:h4<CR>3hy5bZZitheanswerto<Esc>p:%s/ \|,//g<CR>ye3P
lqqi<CR><Esc>qqw3li <Esc>lq3@wbhr<CR>16l@q@w3-@w6l@ql@w9l@qll3@whr<CR>3l9@w4l@q 2@w4l@q2@w4l@q9l2@wlr<CR>9l@w4klr<CR>4whr<CR>jj
el<C-v>3k"aD0jji <Esc>qqdiwukPi <Esc>q5@qwy04j$"ap6+<C-v>GPp3kw3i <Esc>2@q4kbXj2@qywh<C-v>4jp2je<C-v>jj4A <Esc>8j5i <Esc>b<C-v>jj2I <Esc>

Interruzioni di riga aggiunte per "leggibilità"

Spiegazione

La prima riga viene strappata life, the universe and everythingda una pagina di aiuto, che è più corta di un byte rispetto alla semplice digitazione. Quindi lo trasforma in questo:

theanswertolifetheuniverseandeverythingtheanswertolifetheuniverseandeverythingtheanswertolifetheuniverseandeverythingtheanswertolifetheuniverseandeverything

La seconda riga suddivide la stringa in:

the answer
toli fetheuniv
ersea nde ver
ything the ans
wer tol ife the
uni ver sean
dev ery thin
gth ean swer
tolifetheuni ver
seandeveryth ing
the ans wer
tol ifetheuniver
sea ndeverything

E poi la riga finale lo indenta per fare:

       the        answer
      toli      fetheuniv
     ersea     nde     ver
    ything     the     ans
   wer tol     ife     the
  uni  ver           sean
 dev   ery         thin
gth    ean       swer
tolifetheuni    ver
seandeveryth   ing
       the     ans      wer
       tol     ifetheuniver
       sea     ndeverything

3

Gelatina , 76 byte

“¡¢ʋỵṆ⁻kỴ⁷ṁḤæ ƊVṛĠ¥¡¢tṢ}ȧƘ=ẒṆ_`-p1ḷṠ’ḃ⁴ĖŒṙḂ¬R“£:(ḥB⁼Ṇ#¥Ṡ1ɗĠðȮ $¿⁹½ɓ»ṁȯ€⁶s27Y

Provalo online!


2

Retina , 185 byte


7!8&sw'6Bi6fe!Av¶5#sea5nde5v'4y%g5!5&s¶3w#1B5ife5!¶2A2v#92se&¶1dev3#y9%¶gth4e&7sw'Bife!A4v'se&dev#yth3ing¶7!5&s6w'7B5ife!Av'7sea5ndev#y%g
'
#¶
&
an
%
thin
#
er
!
the
A
uni
B
tol
\d
$* 

Provalo online!


2

JavaScript, 215 byte

soluzione basata su guest44851

$=>'a21xb0k9qf30155yiv016ewp3018lkhz0ohfdb077or302cl5b0mgzr0b8hz028ghs7028gi67028gi67'.split(p=0).map(x=>parseInt(x,36).toString(2).slice(1).replace(/./g,x=>" theanswertolifetheuniverseandeverything"[+x&&1+p++%39]))

2

Rubino , 216 byte

o=i=1
puts"6iffnqxq0opdbco5e3f1zk5d7eezo2j6zwly9z5yykqsc1hl5svaof".to_i(36).to_s(17).chars.map{|c|
o=!o
c.to_i(17).times.map{o ? (i+=1)&&"ngtheanswertolifetheuniverseandeverythi"[i%39]:" "}.join
}.join.scan /.{1,27}/

Provalo online!

Spiegazione Simile alle soluzioni Python ma ho usato la codifica lunghezza di esecuzione prima della conversione in base 36. Quindi la stringa di dati ha solo 54 caratteri anziché 68.

Ma è finito ancora più a lungo, spero che possa essere ulteriormente giocato a golf.


2

Una porta della mia risposta al carbone :

C # (.NET Core) , 229 byte

_=>{var r="";for(int i=0,j,k=0,n=0;i<68;i++)for(j=0;j++<")%*(+&(+)''%'%'('%'%&%#%'%'%%%$%-&%%%%+&&%&%)&(.&%*.%%2%'%(%)%'.)%'."[i]-34;){r+=i%2<1?' ':"theanswertolifetheuniverseandeverything"[k++%39];if(++n%27<1)r+='\n';}return r;}

Provalo online!


2

C (gcc) , 220 219 217 213 210 byte

-1 byte grazie a ceilingcat

-3 byte grazie a Jerry Jeremiah

q,i,j,t;main(c){for(;c="HDIG@GEGJ@FFFDFD@EGFDFD@DDBDFDFD@CDCDLE@BDDDJE@ADEDHE@AMED@AMDD@HDFDGD@HDFM@HDFM"[t++];)for(c%=64,j=c?q=!q,c:2;--j;)putchar(c?q?32:"theanswertolifetheuniverseandeverything"[i++%39]:10);}

Provalo online!


Una funzione è solo mezzo programma - basta usare un programma completo per 214 byte
Jerry Jeremiah,

@JerryJeremiah Molto vero; bella presa! Potrebbe radere anche un altro byte da esso.
Gastropner

1

JavaScript, 265 237 219 byte

(i=0)=>'jwq80,13ntvk,26p62g,25g7w8,239k3c,zg4xc,7rpbk,1e9dc,b8mw,5mbc,4f9reg,4f9r0g,4f9r0g'.split`,`.map(b=>parseInt(b,36).toString(2).slice(1).replace(/./g,c=>'  theanswertolifetheuniverseandeverything'[+c||2+i++%39]))

Pochi byte grazie a @tsh.

JSFiddle


.substr -> .slice (1) salva alcuni byte
tsh

"L'output può essere nell'elenco delle stringhe" quindi salta iljoin
tsh

@tsh. Grazie. . .

1

Pyth , 121 byte

Questo conteneva troppi byte che non riuscivo a visualizzare in TIO, quindi ecco un hexdump:

00000000: 7558 6848 477c 2a64 6548 622c 5658 434d  uXhHG|*deHb,VXCM
00000010: 2290 8d8d 817e 7e7b 7875 7572 6663 5753  "....~~{xuurfcWS
00000020: 504d 4946 4343 3f3c 3939 3633 302d 2d2a  PMIFCC?<99630--*
00000030: 2721 211e 1b16 160d 0909 0300 225d 545d  '!!........."]T]
00000040: 3133 6a43 2202 1232 a464 b09d 7303 4244  13jC"..2.d..s.BD
00000050: 9386 74d2 e954 b89e e722 3132 2a34 2e22  ..t..T..."12*4."
00000060: 6179 1aa6 55ad c176 932b 6088 d5c5 556c  ay..U..v.+`...Ul
00000070: e4f4 5575 12a0 e7fb 1f                   ..Uu.....

Provalo online!

Puoi aggiungere una chiamata a wco xxdnello script bash per vedere la lunghezza in byte o il hexdump che ho prodotto sopra.

È interessante notare che questo programma mostra un bug minore (?) In Pyth. Tutti i byte di ritorno a capo (0x0d) vengono letti come byte newline (0x0a) quando sono in letterali stringa. Questo mi obbliga ad aggiungere 6 byte:X ... ]T]13 sostituire i dieci errati con tredici.

Altrimenti l'idea alla base di questo codice era abbastanza semplice: registra ogni posizione in cui si verifica una corsa di spazi bianchi. Quindi, accoppia ciascuno di quegli indici con il numero di spazi in quella corsa. Quindi, ricostruisci la stringa originale ripetendo la frase quattro volte, quindi inserendola nelle posizioni corrette. Se il numero di spazi registrati era zero, viene invece inserita una nuova riga.


1

Java (OpenJDK 8) , 258 252 251 byte

z->{int i=0,x,j,N[]={16515968,33489856,x=58950624,x+16,x-40,31458204,7865230,1966983,462847,233471,117670784,x=134185856,x};for(int n:N)for(j=32;j-->0;n/=2)System.out.print(n%2<1?j<1?"\n":" ":"theanswertolifetheuniverseandeverything".charAt(i++%39));}

Provalo online!

È un'implementazione piuttosto ingenua. Prima una maschera, per i caratteri stampati, quindi un rotolo sopra il testo fino al termine.

  • 6 byte salvati grazie a Carlos Alejo!

È possibile salvare alcuni byte con int[]{16515968,33489856,x=58950624,x+16,x-40,31458204,7865230,1966983,462847,233471,117670784,x=134185856,x}.
Charlie

0

Javascript, disegno approssimativo. 319 byte

s=32
t="theanswertolifetheuniverseandeverything"
j=0
o=""
b=document.createElement('canvas'),c=b.getContext('2d')
b.width=b.height=s
c.font="25px Verdana"
c.fillText('42',0,20)
m=c.getImageData(0,0,s,s)
i=0
while(i<m.data.length) {
 d=m.data[i+3]
 o+=d?t[j%t.length]:" "
 if(d)j++
 i+=4
}
o.match(/.{1,32}/g).join("\n")

^ per quello che vale, non molto, ma prima di eliminare il codice fallito.

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.