คำตอบของชีวิตจักรวาลและศิลปะ 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
@Phoenix ผมไม่คิดว่านี่เป็นล่อ, soglมี outgolfed ทาสี ดังนั้นการบีบอัดจึงไม่ใช่วิธีที่ดีที่สุดในการทำเช่นนี้
programmer5000

1
พูดตามตรงฉันไม่ได้ตระหนักว่าการเปิดโหวตอีกครั้งของฉันมีผลผูกพัน ด้วยเหตุผลที่กล่าวมาแล้วโดย @ programmer5000 ผมไม่คิดว่ามันเป็นล่อของเราไม่มีคนแปลกหน้า ... มันอาจจะเป็นสิ่งล่อแหลมของอีกคนหนึ่ง - ยังระบุ - ท้าทาย แต่ไม่ใช่สิ่งนี้
Arnauld

1
@Nacht ส่วนที่ดีที่สุดคือตอนแรกฉันวาด42ด้วย*ตัวอักษรแล้วแทนที่ด้วยข้อความที่ลงตัวพอดี ฉันไม่จำเป็นต้องปรับเปลี่ยนรูปวาดต้นฉบับเพื่อให้เหมาะกับประโยค บังเอิญ?
Charlie

คำตอบ:


21

Python 3 , 224 220 219 215 211 194 ไบต์

  • ขอขอบคุณ @TFeld เป็นเวลา1 5 ไบต์: if(j%27<1)*jแทนif j*(j%27<1)คำสั่งพิมพ์ที่ง่ายขึ้น
  • ขอบคุณ @Leaky Nun สำหรับ 4 ไบต์: การใส่ 0 และ 1 ไม่จำเป็นต้องมีการเติมเต็มด้วยศูนย์ 7*'0'
  • @Leaky แม่ชีบันทึก 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

ลองออนไลน์!

คำอธิบาย:

ใช้การบีบอัดฐาน -36 เพื่อบีบอัดหมายเลขไบนารีนี้ (ยกเว้นบรรทัดใหม่)

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

โดยทั่วไปเรามีสองเคาน์เตอร์และi jในการพบกับ1เราพิมพ์พื้นที่; อื่นถ้าจะพบเราพิมพ์ตัวอักษรถัดจากสตริงและการเพิ่มขึ้น0 เพิ่มขึ้นสำหรับแต่ละ เรายังพิมพ์บรรทัดใหม่เมื่อใดก็ตามที่จำเป็นเช่นเมื่อกลายเป็นจริงij0 or 1j%27<1


1
คุณสามารถบันทึก 1 ไบต์โดยเปลี่ยนif j*(j%27<1):เป็นif(j%27<1)*j:
TFeld


2
201 ไบต์พร้อมเลขคณิตจำนวนเต็ม
Leun Nun

2
200 ไบต์พร้อมการทำดัชนีแบบแยกส่วน
Leun Nun


8

Python 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

แก้ไข: ดูเหมือนว่าทางการใช้ฐาน 36 ก่อนหน้าฉัน


7

Bubblegum , 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 ไบต์

-4 ไบต์ขอบคุณ Erik the Outgolfer

เอาต์พุตรายการสตริงเพื่อบันทึกไบต์

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

ลองออนไลน์!

คำอธิบาย

2ÖH₆Ôn₅Ò\ÊÑĆ¸Ý¾*£„ÔûC∞qΘœ™‚¹µ—₃₄fm คือฐาน 255 แสดงจำนวนทศนิยม:

73869469755353565353431353533323902433339443437469034389033390735363735903735903

ซึ่ง encodes วิ่ง1และ0s ตามลำดับดัชนีแม้เป็น1และ indeices ไม่สม่ำเสมอ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
Erik the Outgolfer

@EriktheOutgolfer ขอบคุณปรับปรุงคำตอบของฉันและตอนนี้ในที่สุดผมก็รู้ว่าสิ่งเหล่านี้มีการ :)
kalsowerus

คำตอบที่ดี :) หวังว่าคุณจะเรียนภาษาต่อไป หากคุณมีคำถามใด ๆ อย่าลังเลที่จะแชทฉัน
Magic Octopus Urn

@ MagicOctopusUrn ขอบคุณมาก! :)
kalsowerus

6

Python 2 , 220 213 212 ไบต์

-1 ไบต์โดยการเปลี่ยน()*4สำหรับ%39จาก @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

ลองออนไลน์!

นี่เป็นวิธีการที่แตกต่างจากคำตอบของ Python ผมใช้ฐานสิบหก ฐาน-36 (บันทึก 7 bytes) การเข้ารหัสของPNG สไตล์ การเข้ารหัส RLE สไตล์ของภาพ (สตริงของตัวเลขที่ระบุจำนวนพิกเซลซ้ำติดต่อกันได้)

สตริงของตัวเลขคือ :

73869469755353565353431353533323902433339443437469034389033390735363735903735903

จากนั้นฉันก็วนซ้ำตัวเลขเหล่านั้นและพิมพ์จำนวนของอักขระหรือตัวอักษรจากจานสี ('theanswer ... ') เมื่อมีการทำซ้ำอักขระมากกว่า 9 ตัวฉันจะเพิ่ม 0 และส่วนที่เหลือ


+1 สำหรับแนวทางที่แตกต่าง คุณสามารถบันทึกไบต์โดยใช้"theanswertolifetheuniverseandeverything"[w%39] TIO
Officialaimm

ขอบคุณและสังเกต ฉันพยายามที่จะทำงานร่วมกับการแทนที่ 'หรือ' สำหรับการตั้งค่าบูลีนของฉากยึดที่ฉันมีอยู่ตอนนี้ แต่มันทำให้หน้าใหม่ของฉันยุ่ง ...
Coty Johnathan Saxman 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υω²⁷⸿

ลองออนไลน์!

คุณมีที่นี่เชื่อมโยงไปยังรุ่น verbose ใกล้เคียงที่สุด

คำอธิบาย (ดูรุ่น verbose สำหรับรายละเอียด):

  • )%*(+&(+)''%'%'('%'%&%#%'%'%%%$%-&%%%%+&&%&%)&(.&%*.%%2%'%(%)%'.)%'.สตริง (68 ไบต์ 48 ไบต์บีบอัด) เป็นตัวแทนของ RLE เข้ารหัสของการวาดภาพ รหัสถ่านทุก ๆ ลบด้วย 34 คือจำนวนช่องว่าง (ตำแหน่งคู่) หรือจำนวนตัวอักษรข้อความ (ตำแหน่งคี่) เพื่อพิมพ์อย่างต่อเนื่อง
  • อัลกอริธึมเพียงคลายการเข้ารหัสสตริง RLE และเขียนอักขระตัวถัดไปของgtheanswertolifetheuniverseandeverythinสตริง (39 ไบต์, 27 ไบต์บีบอัด) ทุกครั้งที่ต้องเขียนอักขระที่ไม่ใช่ช่องว่าง ขณะที่ฉันตรวจสอบความยาวของรายการเพื่อให้ได้อักขระถัดไปและรายการนั้นเริ่มต้นด้วยองค์ประกอบหนึ่งอักขระตัวสุดท้ายของสตริงจะถูกเขียนในตำแหน่งแรก
  • ฉันเขียนบรรทัดใหม่ 27 ตัวอักษรทุกเส้น

กิตติกรรมประกาศ

  • ขอบคุณมากสำหรับนีลและเคล็ดลับที่น่าทึ่งของเขาที่ช่วยให้ฉันประหยัด 28 ไบต์และในที่สุดก็สามารถเอาชนะ Bubblegum ได้ :-)

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

JavaScript (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

ลองออนไลน์!

ดูเหมือนว่า hardcoding เป็นวิธีที่สั้นที่สุด (อย่างน้อยใน Add ++)


3

การกดแป้น 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>

เพิ่ม Linebreaks สำหรับ "readability"

คำอธิบาย

บรรทัดแรกดึงlife, the universe and everythingออกจากหน้าวิธีใช้ซึ่งสั้นกว่าหนึ่งไบต์โดยพิมพ์ออกมา จากนั้นเปลี่ยนเป็นสิ่งนี้:

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 ดังนั้นสตริงข้อมูลจึงมีเพียง 54 ตัวอักษรแทนที่จะเป็น 68

แต่มันก็ยังคงจบลงนานกว่าเดิมหวังว่ามันจะสามารถตีกอล์ฟต่อไปได้



2

C (gcc) , 220 219 217 213 210 ไบต์

-1 ไบต์ขอบคุณ แมวป่า

-3 ไบต์ขอบคุณ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);}

ลองออนไลน์!


ฟังก์ชั่นเป็นเพียงครึ่งโปรแกรม - เพียงใช้โปรแกรมเต็มรูปแบบสำหรับ214 ไบต์
Jerry Jeremiah

@JerryJeremiah จริงมาก; รับได้สวย! สามารถโกนเพิ่มอีกหนึ่งไบต์ได้เช่นกัน
Gastropner

1

JavaScript, 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 ได้ดังนั้นนี่คือ 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.....

ลองออนไลน์!

คุณสามารถเพิ่มการเรียกไปยังwcหรือxxdในสคริปต์ทุบตีเพื่อดูความยาวไบต์หรือเลขฐานสิบหกที่ฉันผลิตด้านบน

ที่น่าสนใจโปรแกรมนี้แสดงข้อผิดพลาดเล็กน้อย (?) ใน Pyth ไบต์การคืนค่าขนส่งใด ๆ (0x0d) จะถูกอ่านเป็นไบต์ขึ้นบรรทัดใหม่ (0x0a) เมื่ออยู่ในตัวอักษรของสตริง บังคับให้ฉันเพิ่ม 6 ไบต์: X ... ]T]13เพื่อแทนที่สิบที่ไม่ถูกต้องด้วยสิบสาม

มิฉะนั้นแนวคิดที่อยู่เบื้องหลังรหัสนี้ค่อนข้างง่าย: บันทึกแต่ละตำแหน่งที่มีช่องว่างเกิดขึ้น จากนั้นจับคู่แต่ละดัชนีกับจำนวนช่องว่างในการเรียกใช้นั้น จากนั้นสร้างสตริงเดิมโดยทำซ้ำวลีสี่ครั้งแล้วใส่ในตำแหน่งที่ถูกต้อง หากจำนวนช่องว่างที่บันทึกเป็นศูนย์จะมีการแทรกบรรทัดใหม่แทน


1

Java (OpenJDK 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));}

ลองออนไลน์!

เป็นการดำเนินการที่ค่อนข้างไร้เดียงสา ก่อนอื่นมาส์กสำหรับตัวอักษรที่พิมพ์ออกมาจากนั้นหมุนข้อความจนเสร็จ

  • บันทึกได้ 6 ไบต์ด้วย Carlos Alejo!

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.