삶과 우주, 그리고 ASCII 예술에 대한 답


25

간단한 도전 : 가능한 한 적은 바이트로 다음 텍스트를 출력하십시오.

       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

원본 도면에는 332자가 포함됩니다.

규칙

  • 입력이 없거나 사용하지 않은 입력입니다.
  • 출력은 임의의 합리적인 형식 (문자열, 문자열 목록, 문자 행렬 등) 일 수 있습니다.
  • 원하는 경우 도면에 소문자 대신 대문자를 사용할 수 있습니다.
  • 후행 공백과 개행이 허용됩니다.
  • 이것은 이므로 각 언어마다 가장 짧은 프로그램 / 기능이 이길 수 있습니다!

노트


이것은 샌드 박스 에서 온 입니다.
Charlie

1
개인적으로 이것은 주제가 아니며 속임수가 아니라고 생각합니다. 그래도 스포일러 견적이 필요하다고 생각하지 않습니다.
programmer5000

1
@ 피닉스 나는 이것이 속임수라고 생각하지 않는다 . sogl풍선 껌 을 능가했다 . 따라서 압축은이 작업을 수행하는 최적의 방법이 아닙니다.
programmer5000

1
솔직히 말해서, 나는 재개 표가 구속력이 있다는 것을 몰랐다. 이미 @ programmer5000에 의해 언급 한 이유로, 난 정말의이 속는 생각하지 않습니다 ... 우리는 낯선있어 없습니다 . 도전 과제는 아니지만 다른 도전 과제의 속임수 일 수는 있지만이 과제는 아닙니다.
Arnauld

1
@ Nacht의 가장 중요한 부분은 처음 42*문자 로 문자를 그린 다음 문자를 완벽하게 맞는 텍스트로 바꿨다는 것입니다. 문장을 맞추기 위해 원본 그림을 수정할 필요가 없었습니다. 일치?
Charlie

답변:


21

파이썬 (3) , 224 (220) 219 215 211 194 바이트

  • 1 5 바이트에 대한 @TFeld 덕분에 간단한 인쇄 설명 if(j%27<1)*j대신 if j*(j%27<1).
  • 4 바이트에 대한 @Leaky Nun 덕분에 : 0과 1을 반전 시키면 0으로 패딩이 필요하지 않았습니다. 7*'0'
  • @Leaky nun은 멋진 골프 기술로 17 바이트를 절약했습니다.
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

온라인으로 사용해보십시오!

설명:

이진 숫자를 압축하기 위해 base-36 압축을 사용합니다 (새 줄 제외)

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

기본적으로 두 개의 카운터 ij있습니다. 만남에 1우리는 공간을 인쇄; 그렇지 않으면 0우리는 문자열에서 다음 문자를 인쇄하고 증가시킵니다 i. j각각 증가합니다 0 or 1. 또한 필요할 때마다, 즉 j%27<1사실이되면 줄 바꿈을 인쇄 합니다.


1
당신은 변경하여 1 바이트를 저장할 수 if j*(j%27<1):if(j%27<1)*j:
TFeld


2
정수 산술 201 바이트
Leaky Nun

2
모듈 식 인덱싱을 사용한 200 바이트
Leaky Nun


8

파이썬 (2) , 235 (218) 213 바이트

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

온라인으로 사용해보십시오!

질문에 암시 된 문자 위치의 기본 36 인코딩 된 정수로 전환되었습니다.

한 번에 하나씩 각 문자를 바꿉니다.

       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

편집 : officialaimm이 36보다 먼저 사용되었습니다.


7

풍선 껌 , 125 바이트

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

온라인으로 사용해보십시오!


이것을 어떻게 생성 했습니까? 내가 얻을 수있는 가장 가까운 것은 127입니다
musicman523

1
zopfli 와 함께 .
Dennis

내가 사용 zopfli을했다,하지만 난 127에서 가져올 수 없습니다 .... 내가 여분의 공백과 후행 줄 바꿈없이 시도 맹세
musicman523

6

05AB1E , 83 79 74 바이트

Outgolfer Erik 덕분에 -4 바이트

바이트를 저장할 문자열 목록을 출력합니다.

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

온라인으로 사용해보십시오!

설명

2ÖH₆Ôn₅Ò\ÊÑĆ¸Ý¾*£„ÔûC∞qΘœ™‚¹µ—₃₄fm 10 진수의 기본 255 표현입니다.

73869469755353565353431353533323902433339443437469034389033390735363735903735903

1s와 0s의 런을 각각 인코딩하며 , 인덱스는 1s이고 고르지 않은 것은 0s입니다. 이것은 이진수로 평가됩니다.

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

암호

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

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

@EriktheOutgolfer 감사합니다, 내 대답을 업데이트하고 이제는 이것이 무엇인지 알 수 있습니다 :)
kalsowerus

좋은 답변 :). 언어를 계속 배우기를 바랍니다. 질문이 있으시면 언제든지 저에게 채팅하십시오.
매직 문어 Urn

@MagicOctopusUrn 감사합니다! :)
kalsowerus

6

파이썬 (2) , 220 (213) 212 바이트

()*4%39 @officialaimm 에서 전환 하여 -1 바이트

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

온라인으로 사용해보십시오!

이것은 다른 Python 답변과 다른 접근 방식입니다. 이미지 의 PNG 스타일 RLE 스타일 인코딩 (연속 반복 픽셀 수를 나타내는 자릿수 ) 의 16 진 base-36 (저장된 7 바이트) 인코딩을 사용합니다 .

자릿수는 다음과 같습니다.

73869469755353565353431353533323902433339443437469034389033390735363735903735903

그런 다음 해당 숫자를 반복하고 팔레트에서 해당 수의 '또는 문자를 번갈아 인쇄합니다 ('답변 ... '). 9 개 이상의 문자가 반복되면 간단히 0을 추가 한 다음 나머지를 추가합니다.


다른 접근 방식에 +1 "theanswertolifetheuniverseandeverything"[w%39] TIO
officialaimm

감사합니다. 나는 지금 여기에있는 괄호 부울 설정에 대한 '또는'대체와 함께 작업하려고 노력했지만 내 개행을 엉망으로 만들고 있습니다 ...
Coty Johnathan Saxman

PNG가이 압축 알고리즘을 사용하는지 몰랐습니다. GIF라고 생각했습니다.
wizzwizz4

잘 잡았다. PNG (또는 GIF)는 아니지만 실제로는 RLE입니다. 답변에 대한 링크를 추가하겠습니다.
Coty Johnathan Saxman

5

SOGL V0.12 , 74 바이트

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

여기 사용해보십시오!

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

내 질문에 대답 할 수있게 해줘 ...

, 140 (126) 112 바이트

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

온라인으로 사용해보십시오!

가장 가까운 상세 버전에 대한 링크 가 있습니다 .

설명 (자세한 내용은 자세한 버전 참조) :

  • )%*(+&(+)''%'%'('%'%&%#%'%'%%%$%-&%%%%+&&%&%)&(.&%*.%%2%'%(%)%'.)%'.문자열 (68 바이트, 압축 된 48 바이트)는 도면의 RLE 부호화의 표현이다. 모든 문자 코드에서 34를 뺀 값은 연속으로 인쇄 할 공백 수 (짝수 위치) 또는 텍스트 문자 수 (홀수 위치)입니다.
  • 이 알고리즘은 RLE로 인코딩 된 문자열을 압축 해제하고 gtheanswertolifetheuniverseandeverythin공백이 아닌 문자를 쓸 때마다 문자열 의 다음 문자 (39 바이트, 27 바이트 압축)를 씁니다 . 다음 문자를 얻기 위해 목록의 길이를 확인하고 해당 목록이 한 요소로 시작하면 문자열의 마지막 문자가 첫 번째 위치에 기록됩니다.
  • 작성된 27 자마다 줄 바꿈을 삽입합니다.

감사의 말

  • 28 바이트를 절약하고 마침내 Bubblegum을 이길 수있게 해주는 Neil과 그의 놀라운 팁 덕분입니다. :-)

1
당신이 사용하는 경우 Assign(Minus(1, c), c); 수 있습니다 if (c) { ... } else Print(" ");.
Neil

사실 당신이 사용하는 경우 for (68)그리고 AtIndex("...", i)당신은 사용할 수 있습니다Modulo(i, 2) 대신에 당신은 필요하지 않습니다 c전혀.
Neil

그리고 당신이 사용하는 경우 if (Not(Modulo(Length(PushOperator(u, w)), 27))) 하면 a둘 중 하나 가 필요하지 않습니다 .
Neil

아, 그리고 AtIndex자동으로 Modulo그렇게 Modulo(b, 39)할 수 있습니다 b.
Neil

1
u 빈 배열 인 미리 정의 된 변수입니다. A⟦⟧υ ). 무언가를 밀어 넣을 때마다 길이가 1 씩 증가합니다. 이것은 명시 적으로 지정하는 것보다 짧아 증가합니다.
Neil

5

자바 스크립트 (ES6) 207 205 203 바이트

후행 공백이있는 문자열 배열을 반환합니다.

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

망막 , 183 바이트


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

온라인으로 사용해보십시오! 설명 : 첫 번째 단계는 셀 비트 맵 및 텍스트의 RLE 인코딩을 추가하고, 두 번째 단계는 올바른 길이로 복제하는 반면, 세 번째 단계는 RLE 인코딩을 디코딩합니다. 그런 다음 네 번째 단계에서는 텍스트를 셀로 이동합니다.


4

젤리 , 83 바이트

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

온라인으로 사용해보십시오!

작동 원리

“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

추가 ++ , 1398 바이트

+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

온라인으로 사용해보십시오!

하드 코딩처럼 보이는 것이 가장 짧은 방법입니다 (적어도 Add ++에서는)


3

Vim, 239 번의 키 스트로크

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

"가독성"을 위해 추가 된 줄 바꿈

설명

첫 번째 줄 life, the universe and everything은 도움말 페이지에서 시작되어 단순히 입력하는 것보다 1 바이트 짧습니다. 그런 다음 이것을 다음과 같이 바꿉니다.

theanswertolifetheuniverseandeverythingtheanswertolifetheuniverseandeverythingtheanswertolifetheuniverseandeverythingtheanswertolifetheuniverseandeverything

두 번째 줄은 문자열을 다음과 같이 나눕니다.

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

그리고 마지막 줄은 그것을 만들기 위해 들여 쓰기입니다.

       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



2

자바 스크립트, 215 바이트

guest44851 기반 솔루션

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

2

루비 , 216 바이트

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

온라인으로 사용해보십시오!

설명 Python 솔루션과 비슷하지만 기본 36으로 변환하기 전에 Run Length Encoding을 사용했습니다. 따라서 데이터 문자열은 68이 아닌 54 자입니다.

그러나 그것은 여전히 ​​전체적으로 더 길어졌으며, 더 골프를 치기를 바랍니다.



2

C (GCC) , 220 (219) 217 213 210 바이트

ceilingcat 덕분에 -1 바이트

Jerry Jeremiah 덕분에 -3 바이트

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

온라인으로 사용해보십시오!


함수는 프로그램의 절반에 불과합니다. 214 바이트에
Jerry Jeremiah

@JerryJeremiah 매우 사실; 좋은 캐치! 그것으로부터 하나 더 바이트를 면도 할 수 있습니다.
gastropner

1

자바 스크립트, 265 237 219 바이트

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

@tsh 덕분에 바이트가 거의 없습니다.

JSFiddle


.substr-> .slice (1) 약간의 바이트를 절약
tsh

"출력은 문자열 목록에있을 수 있습니다"join
tsh

@tsh. 감사. . .

1

Pyth , 121 바이트

여기에 TIO에 표시 할 수없는 너무 많은 바이트가 포함되어 있으므로 다음은 16 진 덤프입니다.

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

온라인으로 사용해보십시오!

당신은에 전화를 추가 할 수 있습니다 wc또는 xxd바이트 길이 아니면 내가 위에 생성 된 16 진 덤프를 볼 수 bash는 스크립트.

흥미롭게도이 프로그램은 Pyth의 사소한 버그 (?)를 보여줍니다. 문자열 리터럴에서 캐리지 리턴 바이트 (0x0d)는 개행 바이트 (0x0a)로 읽습니다. 이로 인해 X ... ]T]13잘못된 바이트 를 13으로 바꾸려면 6 바이트를 추가해야합니다 .

그렇지 않으면이 코드의 기본 개념은 매우 간단합니다. 공백이 발생하는 각 위치를 기록하십시오. 그런 다음 해당 인덱스 각각을 해당 실행의 공백 수와 쌍을 이루십시오. 그런 다음 문구를 네 번 반복 한 다음 올바른 위치에 삽입하여 원래 문자열을 재구성하십시오. 기록 된 공백 수가 0이면 대신 줄 바꿈이 삽입됩니다.


1

자바 (오픈 JDK 8) , 258 (252) 251 바이트

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

온라인으로 사용해보십시오!

다소 순진한 구현입니다. 먼저 인쇄 된 문자에 대한 마스크를 만든 다음 완료 될 때까지 텍스트를 롤오버하십시오.

  • Carlos Alejo 덕분에 6 바이트가 절약되었습니다!

으로 일부 바이트를 저장할 수 있습니다 int[]{16515968,33489856,x=58950624,x+16,x-40,31458204,7865230,1966983,462847,233471,117670784,x=134185856,x}.
Charlie

0

자바 스크립트, 대략적인 그림. 319 바이트

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

^ 그만한 가치는 있지만 실제로는 아니지만 실패한 코드를 삭제하기 전에.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.