La réponse à la vie, à l'univers et à l'art ASCII

25

Défi simple: essayez de sortir le texte suivant en aussi peu d'octets que possible:

       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

Le dessin original contient 332 caractères.

Règles

  • Aucune entrée ou une entrée inutilisée.
  • La sortie peut être dans n'importe quel format raisonnable (chaîne, liste de chaînes, matrice de caractères, etc.).
  • Si vous préférez, vous pouvez utiliser des majuscules au lieu de minuscules pour le dessin.
  • Les espaces vides et les nouvelles lignes sont autorisés.
  • C'est , donc le programme / la fonction la plus courte pour chaque langue peut gagner!

Remarques

Charlie
la source
Cela vient du bac à sable .
Charlie
1
Personnellement, je pense que c'est sur le sujet et non pas dupe. Je ne pense pas que vous ayez besoin d'un devis de spoiler.
programmer5000
1
@Phoenix Je ne pense pas que ce soit un dupe, sogl a dépassé le bubblegum . Par conséquent, la compression n'est pas un moyen optimal de procéder.
programmer5000
1
Pour être honnête, je ne savais pas que ma réouverture était contraignante. Pour les raisons déjà évoquées par @ programmer5000, je ne pense pas qu'il soit dupe Nous ne sommes pas étrangers ... . Il peut s'agir d'une dupe d'un autre défi - encore à identifier -, mais pas celui-ci.
Arnauld
1
@Nacht la meilleure partie est que tout d' abord j'ai dessiné les 42avec les *personnages, puis les remplacer par le texte, ce qui correspond parfaitement. Je n'ai pas eu à modifier le dessin original pour adapter la phrase. Coïncidence?
Charlie

Réponses:

21

Python 3 , 224 220 219 215 211 194 194 octets

  • Merci à @TFeld pour 1 5 octets: if(j%27<1)*jau lieu deif j*(j%27<1) et déclaration d'impression simplifiée.
  • Merci à @Leaky Nun pour 4 octets: Inverser 0 et 1, n'a pas nécessité le remplissage par des zéros 7*'0'
  • @Leaky nun a économisé 17 octets grâce à ses compétences de golf impressionnantes (merci beaucoup !!!!): utilisation géniale de l'indexation modulaire
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

Essayez-le en ligne!

Explication:

Utilise la compression en base 36 pour compresser ce nombre binaire (nouvelle ligne exclue)

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

Nous avons essentiellement deux compteurs iet j. En rencontrant un, 1nous imprimons un espace; Sinon, si 0nous rencontrons, nous imprimons la prochaine lettre de la chaîne et augmentons i. jaugmente pour chacun 0 or 1. Nous imprimons également des nouvelles lignes chaque fois que c'est-à-dire quand cela j%27<1devient vrai.

officialaimm
la source
1
Vous pouvez enregistrer 1 octet en changeant if j*(j%27<1):àif(j%27<1)*j:
TFeld
2
205 octets
Leaky Nun
2
201 octets avec arithmétique entière
Leaky Nun
2
200 octets avec indexation modulaire
Leaky Nun
2
194 octets
Leaky Nun
8

Python 2 , 235 218 213 213 octets

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

Essayez-le en ligne!

Passé à une base 36 codée int des positions des lettres comme indiqué dans la question w.

Remplace chaque personnage un par un.

       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

Edit: il semble officialaimm utilisé la base 36 avant moi.

TFeld
la source
7

Bubblegum , 125 octets

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

Essayez-le en ligne!

Dennis
la source
Comment avez-vous généré cela? Le plus proche que j'ai pu obtenir était 127
musicman523
1
Avec zopfli .
Dennis
J'ai utilisé zopfli, mais je jure que j'ai essayé avec et sans retour à la ligne, avec des espaces supplémentaires .... ne pouvait pas descendre en dessous de 127
musicman523
6

05AB1E , 83 79 74 octets

-4 octets grâce à Erik l'Outgolfer

Produit une liste de chaînes pour enregistrer un octet.

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

Essayez-le en ligne!

Explication

2ÖH₆Ôn₅Ò\ÊÑĆ¸Ý¾*£„ÔûC∞qΘœ™‚¹µ—₃₄fm est la représentation de base 255 du nombre décimal:

73869469755353565353431353533323902433339443437469034389033390735363735903735903

Ce qui code respectivement des séries de 1s et 0s, même les indices étant les 1s et les indices inégaux les 0s. Cela équivaut au nombre binaire:

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

Code

•...•                                         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
kalsowerus
la source
Remplacez "ÔAo îιË3š1ĆRÕ₃FWš{ÓÛÏ.!XµM§&¶ñD°3PŸ{óNι2Ðbмh"253öpar •—."Ôq‚Ā0Ál0j¿«ªžé¨0õ₄7“Ÿ!½ÏiæÆø-δq–Å05q½Yñá+•pour -4.
Erik the Outgolfer
@EriktheOutgolfer merci, mis à jour ma réponse et maintenant je sais enfin à quoi
ça sert
Bonne réponse :). J'espère que vous continuerez à apprendre la langue. Si vous avez des questions, n'hésitez pas à me parler.
Magic Octopus Urn
@MagicOctopusUrn Merci beaucoup! :)
kalsowerus
6

Python 2 , 220 213 212 octets

-1 octets de commutation ()*4pour %39de @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

Essayez-le en ligne!

Il s'agit d'une approche différente des autres réponses Python. J'utilise un codage hexadécimal en base 36 (économisé 7 octets) d'un codage de style PNG de style RLE de l'image (une chaîne de chiffres indiquant le nombre de pixels répétés consécutifs).

La chaîne de chiffres est :

73869469755353565353431353533323902433339443437469034389033390735363735903735903

Ensuite, je parcours ces chiffres et j'imprime alternativement ce nombre de '' ou de caractères de la palette ('la réponse ...'). Lorsque plus de 9 caractères sont répétés, j'ajouterais simplement un 0 puis le reste.

Coty Johnathan Saxman
la source
+1 pour une approche différente. Vous pouvez enregistrer un octet en utilisant "theanswertolifetheuniverseandeverything"[w%39] TIO
officialaimm
Merci et noté. J'essayais de travailler avec un remplacement 'ou' pour la configuration booléenne de support que j'ai ici maintenant, mais ça gâche mes nouvelles lignes ...
Coty Johnathan Saxman
Je ne savais pas que PNG utilisait cet algorithme de compression - je pensais que c'était GIF.
wizzwizz4
Belle prise. Ce n'était pas PNG (ni GIF), mais en fait RLE. J'ajouterai un lien vers la réponse.
Coty Johnathan Saxman
5

SOGL V0.12 , 74 octets

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

Essayez-le ici!

"...‘              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
dzaima
la source
5

Permettez-moi de répondre à ma propre question ...

Charbon de bois , 140 126 112 octets

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

Essayez-le en ligne!

Vous avez ici un lien vers la version verbeuse la plus proche.

Explication (voir la version détaillée pour plus de détails):

  • le )%*(+&(+)''%'%'('%'%&%#%'%'%%%$%-&%%%%+&&%&%)&(.&%*.%%2%'%(%)%'.)%'. chaîne (68 octets, 48 ​​octets compressés) est une représentation de l'encodage RLE du dessin. Chaque code de caractère moins 34 est le nombre d'espaces (positions paires) ou le nombre de caractères de texte (positions impaires) à imprimer consécutivement.
  • L'algorithme décompresse simplement la chaîne codée RLE et écrit le caractère suivant de la gtheanswertolifetheuniverseandeverythinchaîne (39 octets, 27 octets compressés) chaque fois qu'un caractère non blanc doit être écrit. Lorsque je vérifie la longueur d'une liste pour obtenir le caractère suivant et que cette liste commence par un élément, le dernier caractère de la chaîne est écrit en première position.
  • Tous les 27 caractères écrits j'insère une nouvelle ligne.

Remerciements

  • Un grand merci à Neil et ses conseils incroyables pour m'avoir permis d'économiser 28 octets et enfin de pouvoir battre Bubblegum. :-)
Charlie
la source
1
Si vous utilisez, Assign(Minus(1, c), c);vous pouvez simplement utiliser if (c) { ... } else Print(" ");.
Neil
En fait , si vous utilisez for (68)et AtIndex("...", i)vous pouvez utiliser à la Modulo(i, 2)place et vous n'avez pas besoin cdu tout.
Neil
Et si vous utilisez, if (Not(Modulo(Length(PushOperator(u, w)), 27)))vous n'avez pas besoin non aplus.
Neil
Oh, et AtIndexfait un automatique Modulodonc Modulo(b, 39)peut être juste b.
Neil
1
uest une variable prédéfinie qui n'est qu'un tableau vide (sauvegarde à l'aide A⟦⟧υ). Chaque fois que vous y poussez quelque chose, sa longueur augmente de 1. C'est plus court qu'une affectation explicite à incrémenter.
Neil
5

JavaScript (ES6), 207 205 203 octets

Renvoie un tableau de chaînes avec des espaces de fin.

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'));

Arnauld
la source
4

Rétine , 183 octets


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

Essayez-le en ligne! Explication: La première étape ajoute l'encodage RLE du bitmap de cellule et du texte, que la deuxième étape duplique ensuite à la longueur correcte, tandis que la troisième étape décode l'encodage RLE. La quatrième étape déplace ensuite le texte dans les cellules.

Neil
la source
4

Gelée , 83 octets

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

Essayez-le en ligne!

Comment ça marche

“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
Leaky Nun
la source
3

Ajouter ++ , 1398 octets

+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

Essayez-le en ligne!

Il semble que le codage en dur soit le moyen le plus court (au moins dans Add ++)

caird coinheringaahing
la source
3

Vim, 239 frappes

: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>

Ajout de sauts de ligne pour la "lisibilité"

Explication

La première ligne tire life, the universe and everythingd'une page d'aide, qui est un octet plus court que la simple saisie. Cela transforme ensuite cela en ceci:

theanswertolifetheuniverseandeverythingtheanswertolifetheuniverseandeverythingtheanswertolifetheuniverseandeverythingtheanswertolifetheuniverseandeverything

La deuxième ligne décompose la chaîne en:

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

Et puis la dernière ligne le met en retrait pour faire:

       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
BlackCap
la source
3

Gelée , 76 octets

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

Essayez-le en ligne!

Dennis
la source
2

Rétine , 185 octets


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

Essayez-le en ligne!

ovs
la source
2

JavaScript, 215 octets

solution basée sur guest44851

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

Rubis , 216 octets

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

Essayez-le en ligne!

Explication Similaire aux solutions Python, mais j'ai utilisé le codage de longueur d'exécution avant de le convertir en base 36. La chaîne de données ne contient donc que 54 caractères au lieu de 68.

Mais cela a fini par durer plus longtemps, espérons qu'il pourra être joué plus loin.

Simon George
la source
2

Un port de ma réponse au charbon :

C # (.NET Core) , 229 octets

_=>{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;}

Essayez-le en ligne!

Charlie
la source
2

C (gcc) , 220 219 217 213 210 octets

-1 octet grâce au plafond

-3 octets grâce à 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);}

Essayez-le en ligne!

gastropner
la source
Une fonction n'est qu'un demi-programme - il suffit d'utiliser un programme complet de 214 octets
Jerry Jeremiah
@JerryJeremiah Très vrai; Belle prise! Pourrait également en raser un octet de plus.
gastropner
1

JavaScript, 265 237 219 octets

(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]))

Quelques octets de moins grâce à @tsh.

JSFiddle


la source
.substr -> .slice (1) économise quelques octets
tsh
"La sortie peut être dans une liste de chaînes" alors sautez juste lejoin
tsh
@tsh. Merci. . .
1

Pyth , 121 octets

Cela contenait trop d'octets que je n'arrivais pas à afficher dans TIO, voici donc 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.....

Essayez-le en ligne!

Vous pouvez ajouter un appel à wcou xxddans le script bash pour voir la longueur en octets ou le vidage hexadécimal que j'ai produit ci-dessus.

Fait intéressant, ce programme présente un bogue mineur (?) En Pyth. Tous les octets de retour chariot (0x0d) sont lus comme des octets de nouvelle ligne (0x0a) lorsqu'ils sont dans des littéraux de chaîne. Cela m'oblige à ajouter 6 octets: X ... ]T]13pour remplacer le dix incorrect par un treize.

Sinon, l'idée derrière ce code était assez simple: enregistrez chaque position où une série d'espaces blancs se produit. Ensuite, associez chacun de ces indices au nombre d'espaces de cette exécution. Ensuite, reconstruisez la chaîne d'origine en répétant la phrase quatre fois, puis en l'insérant aux emplacements appropriés. Si le nombre d'espaces enregistrés était nul, une nouvelle ligne est insérée à la place.

FryAmTheEggman
la source
1

Java (OpenJDK 8) , 258 252 251 octets

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));}

Essayez-le en ligne!

C'est une implémentation plutôt naïve. D'abord un masque, pour les caractères imprimés, puis un survol du texte jusqu'à la fin.

  • 6 octets économisés grâce à Carlos Alejo!
Olivier Grégoire
la source
Vous pouvez enregistrer quelques octets avec int[]{16515968,33489856,x=58950624,x+16,x-40,31458204,7865230,1966983,462847,233471,117670784,x=134185856,x}.
Charlie
0

Javascript, dessin approximatif. 319 octets

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")

^ pour ce que ça vaut, pas vraiment, mais avant de supprimer le code qui a échoué.

sq2
la source