Odpowiedź na życie, wszechświat i sztukę ASCII


25

Proste wyzwanie: spróbuj wydrukować następujący tekst w jak najmniejszej liczbie bajtów:

       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

Oryginalny rysunek zawiera 332 znaki.

Zasady

  • Brak danych wejściowych lub nieużywane dane wejściowe.
  • Dane wyjściowe mogą mieć dowolny rozsądny format (ciąg, lista ciągów, macierz znaków i tak dalej).
  • Możesz użyć wielkich liter zamiast małych liter do rysowania, jeśli wolisz.
  • Końcowe białe znaki i znaki nowej linii są dozwolone.
  • To jest , więc może wygrać najkrótszy program / funkcja dla każdego języka!

Notatki

  • Zostało to zidentyfikowane jako możliwy duplikat Nie jesteśmy obcy, aby kodować golfa, znasz zasady i ja też . To pytanie dotyczyło wyszukiwania i zastępowania tekstu. Tutaj musisz narysować kształt przy użyciu danego tekstu, a co najmniej dwie z obecnych odpowiedzi pokazują, że języki golfa mogą w tym przypadku pokonać proste algorytmy kompresji.

To pochodzi z piaskownicy .
Charlie,

1
Osobiście uważam, że jest to temat, a nie dupek. Jednak nie sądzę, że potrzebujesz wyceny spoilera.
programista

1
@Phoenix Nie sądzę, że jest to dupe, sogl został outgolfed żucia . Dlatego kompresja nie jest optymalnym sposobem na zrobienie tego.
programista

1
Szczerze mówiąc, nie zdawałem sobie sprawy, że mój głos na ponowne otwarcie jest wiążący. Z powodów wymienionych już przez @ programmer5000, ja naprawdę nie sądzę, że jest to dupe od nie jesteśmy obcy ... . Może to być dupek innego - jeszcze do zidentyfikowania - wyzwania, ale nie tego.
Arnauld,

1
@Nacht najlepsze jest to, że na pierwszy zwróciłem 42ze *znaków, a następnie zastąpić je z tekstu, który pasuje idealnie. Nie musiałem modyfikować oryginalnego rysunku, aby dopasować zdanie. Zbieg okoliczności?
Charlie,

Odpowiedzi:


21

Python 3 , 224 220 219 215 211 194 bajtów

  • Dzięki @TFeld za 1 5 bajtów: if(j%27<1)*jzamiast if j*(j%27<1)uproszczonej instrukcji drukowania.
  • Dzięki @Leaky Nun za 4 bajty: Odwracanie 0 i 1 nie wymagało wypełniania zerami 7*'0'
  • @Leaky nun uratował 17 bajtów dzięki swoim niesamowitym umiejętnościom gry w golfa (wielkie dzięki !!!!): niesamowite wykorzystanie modułowego indeksowania
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

Wypróbuj online!

Wyjaśnienie:

Używa kompresji base-36 do kompresji tej liczby binarnej (z wyłączeniem nowej linii)

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

Zasadniczo mamy dwa liczniki ii j. Po napotkaniu 1drukujemy przestrzeń; W przeciwnym razie 0wypisujemy kolejną literę z łańcucha i zwiększamy i. jpodwyżki dla każdego 0 or 1. Drukujemy również nowe wiersze, gdy jest to konieczne, tj. Kiedy j%27<1staje się prawdą.


1
Możesz zapisać 1 bajt, zmieniając if j*(j%27<1):naif(j%27<1)*j:
TFeld


2
201 bajtów z arytmetyką liczb całkowitych
Leaky Nun

2
200 bajtów z indeksowaniem modułowym
Leaky Nun


8

Python 2 , 235 218 213 bajtów

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

Wypróbuj online!

Przełączono na bazę 36 zakodowaną wewnątrz pozycji liter, jak wskazano w pytaniu „w”.

Zastępuje każdą postać pojedynczo.

       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

Edycja: Wydaje się, że oficjalnie użył bazy 36 przede mną.


7

Bubblegum , 125 bajtów

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

Wypróbuj online!


Jak to wygenerowałeś? Najbliżej mogłem dostać 127
musicman523

1
Z zopfli .
Dennis,

Używałem zopfli, ale przysięgam, że próbowałem zi bez nowych linii, z dodatkowymi spacjami .... nie mogłem dostać mniej niż 127
musicman523

6

05AB1E , 83 79 74 bajty

-4 bajty dzięki Erikowi Outgolferowi

Wyświetla listę ciągów znaków do zapisania bajtu.

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

Wypróbuj online!

Wyjaśnienie

2ÖH₆Ôn₅Ò\ÊÑĆ¸Ý¾*£„ÔûC∞qΘœ™‚¹µ—₃₄fm jest podstawową reprezentacją 255 liczby dziesiętnej:

73869469755353565353431353533323902433339443437469034389033390735363735903735903

Który koduje przebiegi odpowiednio 1s i 0s, nawet indeksy są 1si, a nierówne indeksuje 0s. To ocenia na liczbę binarną:

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

Kod

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

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

@EriktheOutgolfer dzięki, zaktualizowałem moją odpowiedź i teraz w końcu wiem po co to jest :)
kalsowerus

Niezła odpowiedź :). Mam nadzieję, że nadal uczysz się języka. Jeśli masz jakieś pytania, możesz ze mną porozmawiać.
Magic Octopus Urn

@MagicOctopusUrn Wielkie dzięki! :)
kalsowerus

6

Python 2 , 220 213 212 bajtów

-1 bajt przez przejście ()*4przez %39z @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

Wypróbuj online!

Jest to inne podejście niż inne odpowiedzi w języku Python. Używam szesnastkowego kodowania base-36 (zapisanych 7 bajtów) kodowania obrazu w stylu RLE w stylu PNG (ciąg cyfr wskazujący liczbę kolejnych powtarzających się pikseli).

Ciąg cyfr to :

73869469755353565353431353533323902433339443437469034389033390735363735903735903

Następnie iteruję te cyfry i naprzemiennie wypisuję tę liczbę znaków lub znaków z palety („odpowiedź…”). Gdy powtórzy się więcej niż 9 znaków, po prostu dodam 0, a następnie resztę.


+1 za inne podejście. Możesz zapisać bajt za pomocą "theanswertolifetheuniverseandeverything"[w%39] TIO
officialaimm

Dziękuję i odnotowałem. Próbowałem to wykorzystać wraz z „lub” zamiennikiem ustawienia logicznego nawiasu klamrowego, który tu mam, ale to psuje moje nowe linie ...
Coty Johnathan Saxman

Nie wiedziałem, że PNG używa tego algorytmu kompresji - myślałem, że to GIF.
wizzwizz4,

Dobry chwyt. To nie był PNG (ani GIF), ale tak naprawdę RLE. Dodam link do odpowiedzi.
Coty Johnathan Saxman

5

SOGL V0.12 , 74 bajty

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

Wypróbuj tutaj!

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

Pozwól mi odpowiedzieć na własne pytanie ...

Węgiel drzewny , 140 126 112 bajtów

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

Wypróbuj online!

Masz tutaj link do najbliższej pełnej wersji.

Objaśnienie (szczegółowe informacje znajdują się w pełnej wersji):

  • )%*(+&(+)''%'%'('%'%&%#%'%'%%%$%-&%%%%+&&%&%)&(.&%*.%%2%'%(%)%'.)%'.Łańcuch (68 bajtów, 48 bajtów sprężone) jest reprezentacją RLE kodowania rysunku. Każdy kod znaku minus 34 to liczba spacji (pozycji parzystych) lub liczba znaków tekstowych (pozycji nieparzystych) do wydrukowania po kolei.
  • Algorytm po prostu dekompresuje ciąg zakodowany w RLE i zapisuje następny znak gtheanswertolifetheuniverseandeverythinciągu (39 bajtów, skompresowany 27 bajtów) za każdym razem, gdy trzeba zapisać znak spacji. Gdy sprawdzam długość listy, aby uzyskać następny znak, a ta lista zaczyna się od jednego elementu, ostatni znak ciągu jest zapisywany na pierwszej pozycji.
  • Co 27 zapisanych znaków wstawiam nowy wiersz.

Podziękowanie

  • Wielkie podziękowania dla Neila i jego niesamowitych wskazówek, jak pozwolić mi zaoszczędzić 28 bajtów i wreszcie móc pokonać Bubblegum. :-)

1
Jeśli używasz Assign(Minus(1, c), c);, możesz po prostu użyć if (c) { ... } else Print(" ");.
Neil,

Właściwie, jeśli używasz, for (68)a AtIndex("...", i)następnie możesz użyć Modulo(i, 2)zamiast tego i wcale nie potrzebujesz c.
Neil,

A jeśli używasz if (Not(Modulo(Length(PushOperator(u, w)), 27))), to nie potrzebujesz a.
Neil,

Aha, i AtIndexrobi automat, Modulowięc Modulo(b, 39)może być po prostu b.
Neil,

1
ujest predefiniowaną zmienną, która jest tylko pustą tablicą (oszczędza przy użyciu A⟦⟧υ). Za każdym razem, gdy coś do niego naciskasz, jego długość wzrasta o 1. Jest to mniej niż wyraźne przypisanie przyrostu.
Neil,

5

JavaScript (ES6), 207 205 203 bajtów

Zwraca tablicę ciągów znaków z pewnymi końcowymi spacjami.

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

Siatkówka , 183 bajty


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

Wypróbuj online! Objaśnienie: Pierwszy etap dodaje kodowanie RLE mapy bitowej komórki i tekst, który następnie jest powielany na drugim etapie do odpowiedniej długości, podczas gdy trzeci etap dekoduje kodowanie RLE. Czwarty etap przenosi następnie tekst do komórek.


4

Galaretka , 83 bajty

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

Wypróbuj online!

Jak to działa

“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

Dodaj ++ , 1398 bajtów

+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

Wypróbuj online!

Wygląda na to, że kodowanie jest najkrótszą drogą (przynajmniej w Add ++)


3

Vim, 239 naciśnięć klawiszy

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

Dodano podział linii dla „czytelności”

Wyjaśnienie

Pierwszy wiersz odchodzi life, the universe and everythingod strony pomocy, która jest o jeden bajt krótsza niż zwykłe wpisanie. Następnie zamienia to w to:

theanswertolifetheuniverseandeverythingtheanswertolifetheuniverseandeverythingtheanswertolifetheuniverseandeverythingtheanswertolifetheuniverseandeverything

Druga linia dzieli ciąg na:

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

A następnie ostatnia linia wcina go, aby:

       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

Galaretka , 76 bajtów

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

Wypróbuj online!


2

Siatkówka , 185 bajtów


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

Wypróbuj online!


2

JavaScript, 215 bajtów

rozwiązanie oparte na guest44851

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

2

Rubinowy , 216 bajtów

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

Wypróbuj online!

Objaśnienie Podobne do rozwiązań w języku Python, ale przed konwersją na bazę 36 użyłem kodowania długości działania. Ciąg danych ma więc tylko 54 znaki zamiast 68.

Ale ostatecznie skończyło się to dłużej, miejmy nadzieję, że można dalej grać w golfa.



2

C (gcc) , 220 219 217 213 210 bajtów

-1 bajt dzięki pułapkowi cat

-3 bajty dzięki Jerry'emu Jeremiaszowi

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

Wypróbuj online!


Funkcja to tylko połowa programu - wystarczy użyć pełnego programu dla 214 bajtów
Jerry Jeremiah

@JerryJeremiah Bardzo prawda; dobry chwyt! Mógłby też ogolić jeszcze jeden bajt.
gastropner

1

JavaScript, 265 237 219 bajtów

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

Kilka bajtów mniej dzięki @tsh.

JSFiddle


.substr -> .slice (1) zapisz kilka bajtów
tsh

„Dane wyjściowe mogą znajdować się na liście ciągów”, więc po prostu pomińjoin
tsh

@tsh. Dzięki. . .

1

Pyth , 121 bajtów

Zawierał on zbyt wiele bajtów, których nie mogłem wyświetlić w TIO, więc oto zrzut heksowy:

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

Wypróbuj online!

Możesz dodać wywołanie do wclub xxdw skrypcie bash, aby zobaczyć długość bajtu lub zrzut heksowy, który utworzyłem powyżej.

Co ciekawe, program ten pokazuje niewielki błąd (?) W Pyth. Wszelkie bajty powrotu karetki (0x0d) są odczytywane jako bajty nowej linii (0x0a) w literałach łańcuchowych. Zmusza mnie to do dodania 6 bajtów: X ... ]T]13zamiany niepoprawnej dziesiątki na trzynaście.

W przeciwnym razie idea tego kodu była dość prosta: zapisz każdą pozycję, w której występuje ciąg białych znaków. Następnie sparuj każdy z tych wskaźników z liczbą spacji w tym przebiegu. Następnie zrekonstruuj oryginalny ciąg znaków, powtarzając czterokrotnie frazę, a następnie wstawiając w odpowiednich miejscach. Jeśli liczba zarejestrowanych spacji wynosiła zero, zamiast tego wstawiana jest nowa linia.


1

Java (OpenJDK 8) , 258 252 251 bajtów

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

Wypróbuj online!

To raczej naiwna implementacja. Najpierw maska ​​dla drukowanych znaków, a następnie przewiń tekst do końca.

  • 6 bajtów zaoszczędzonych dzięki Carlosowi Alejo!

Możesz zapisać niektóre bajty za pomocą int[]{16515968,33489856,x=58950624,x+16,x-40,31458204,7865230,1966983,462847,233471,117670784,x=134185856,x}.
Charlie,

0

JavaScript, przybliżony rysunek. 319 bajtów

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

^ za to, co jest warte, nie za bardzo, ale zanim usunę uszkodzony kod.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.