เพื่อเป็นเกียรติแก่อดัมเวสต์


90

อดัมเวสต์จากไปและฉันต้องการที่จะให้เกียรติความทรงจำของเขาที่นี่ใน PPCG แม้ว่าฉันจะสงสัยว่าเขารู้จักการดำรงอยู่ของเรา ในขณะที่มีหลายสิ่งที่แตกต่างมากมายที่ผู้ชายคนนี้เป็นที่รู้จักกันไม่มีใครโดดเด่นกว่าบทบาทของเขาในฐานะแบทแมนเดิม ฉันจำได้ว่าพ่อเลี้ยงของฉันยังคงเฝ้าดูแบทแมนและโรบินมาจนถึงทุกวันนี้ ความท้าทายนี้เป็นเรื่องง่ายในธรรมชาติไม่ใช่ทุกคนที่มีความซับซ้อนเช่นอดัมเวสต์ อย่างไรก็ตามมันเป็นสิ่งที่ดีที่สุดที่ฉันสามารถทำได้เพราะนี่คือภาพลักษณ์ที่โดดเด่นที่สุดในอาชีพของชายคนนี้


ฉันต้องการโพสต์ก่อนหน้านี้ แต่ฉันกำลังรอให้บางคนมาพร้อมกับสิ่งที่ดีกว่า


เอาท์พุทต่อไปนี้ (มีหรือไม่มีช่องว่างต่อท้าย / ขึ้นบรรทัดใหม่):

           *                         *
       ****          *     *          ****
     ****            *******            ****
   ******            *******            ******
  *********         *********         *********
 ***********************************************
*************************************************
*************************************************
*************************************************
 ***********************************************
  *****       *********************       *****
    ****       ***    *****    ***       ****
       **       *      ***      *       **

นี่คือจำนวนไบต์ต่ำสุดจะเป็นผู้ชนะ


7
คุณควรห้ามสายที่เข้ารหัส มันไม่สนุกจริงๆ!
sergiol

7
เขาไม่ใช่แบทแมนดั้งเดิม เกียรติยศนั้นเป็นของ Lewis Wilson
Shaggy

42
เมื่อฉันเห็นชื่อฉันคิดว่าผลลัพธ์จะเป็น "na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na"
D Krueger

3
@DKrueger: ทำให้มันดังนั้นในคำถามอื่น :)
โอลิเวีย Dulac

4
ทำไมไม่เริ่มเมื่อปีที่แล้ว? Carrie Fisher เจ้าชาย David Bowie และ Alan Rickman!
caird coinheringaahing

คำตอบ:


47

เยลลี่ขนาด 44 ไบต์

“¡©İ'¹!ðkW>ṅṙẏṙlœf:ߌÆ@Ƥ’b25o99Jx$ị⁾ *s25ŒBY

ลองออนไลน์!

มันทำงานอย่างไร

“¡©İ'¹!ðkW>ṅṙẏṙlœf:ߌÆ@Ƥ’

นี่คือตัวอักษรตัวเลข อักขระทั้งหมดจะถูกแทนที่ด้วยดัชนี 1 รายการในหน้ารหัสของ Jelly ผลลัพธ์จะถูกตีความว่าเป็นจำนวนเต็ม bijective ฐาน -250

58616171447449697510361193418481584558895594063391402

ถัดไปb25แปลงจำนวนเต็มนั้นเป็นฐาน25และo99แทนที่0ด้วย99เพื่อให้ได้ผลลัพธ์

11 1 20 4 10 1 8 4 12 4 3 6 12 4 2 9 9 5 1 99 1 24 2 5 7 11 4 4 7 3 4 3 7 2 7 1 6 2

Jx$แทนที่เจTHฐาน-25 ตัวเลขnกับnสำเนาของเจยอม

1 1 1 1 1 1 1 1 1 1 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 7 7 7 7 7 7 7 7 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 11 11 11 12 12 12 12 12 12 13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 14 15 15 16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 18 18 18 18 18 19 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 23 23 24 24 24 24 24 25 25 25 25 25 25 25 26 26 26 26 26 26 26 26 26 26 26 27 27 27 27 28 28 28 28 29 29 29 29 29 29 29 30 30 30 31 31 31 31 32 32 32 33 33 33 33 33 33 33 34 34 35 35 35 35 35 35 35 36 37 37 37 37 37 37 38 38

ตอนนี้ị⁾ *ดัชนีเป็นคู่ของตัวละคร การจัดทำดัชนีเป็นแบบ 1 และโมดูลาร์ดังนั้นตัวเลขคี่ถูกแทนที่ด้วยช่องว่างแม้แต่คนที่มีเครื่องหมายดอกจัน อัตราผลตอบแทนนี้

           *                    ****          *        ****            ****   ******            ****  *********         ***** *************************************************************************************************** ************************  *****       ***********    ****       ***    ***       **       *      **

s25สับเป็นชิ้นผลของความยาว25 ถ้าเราเขียนแต่ละอันของตัวเองเราจะได้

           *             
       ****          *   
     ****            ****
   ******            ****
  *********         *****
 ************************
*************************
*************************
*************************
 ************************
  *****       ***********
    ****       ***    ***
       **       *      **

ตีกลับอะตอมŒBpalindromizes แต่ละก้อนโดยการผนวกสำเนาตรงกันข้ามโดยไม่ต้องตัวอักษรตัวแรกของผลผลิต

           *                         *           
       ****          *     *          ****       
     ****            *******            ****     
   ******            *******            ******   
  *********         *********         *********  
 *********************************************** 
*************************************************
*************************************************
*************************************************
 *********************************************** 
  *****       *********************       *****  
    ****       ***    *****    ***       ****    
       **       *      ***      *       **       

สุดท้ายYแนะนำ linefeeds จริง


1
และฉันคิดว่า“QƤḣọḲ£¿ẆịµñẒṢƊ¬ƒỤ2ỴÐ,ịṁ&Ḅ<ḋsḳn.⁷ṛḃṡ⁾6bḋeṁ’ṃ⁾ *s25ŒBYมันสั้นพอที่ 53 ไบต์ ...
Erik the Outgolfer

ฉันลองใช้ 14 สิ่งที่แตกต่างกันจากนั้นในที่สุดก็ถึงสิ่งนี้ด้วยการลองผิดลองถูก ไม่เข้าใจสิ่งที่คุณหมายถึงโดย "แทนที่ 0 กับ 99" จนกว่าฉันจะลองเอง
Magic Octopus Urn

156

Wordfuck , 5761 2686 ไบต์

ฉันเดาว่าใช้ชื่อเขาเป็นซอร์สโค้ดทำให้ Adam West ได้รับเกียรติ

adam west adam west adam_wes t_a dam_we st_a dam_ west adam west adam west adam west_ad am_west_a dam_we st ad am we st ad am we st ad am west_a dam_we st_a dam_ west_ada m_w est ada m_w est ada m_west_ adam west_a dam_west_ adam_we st_ ad am_west ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am_wes t_ adam_w est_ adam west adam west adam west adam west adam we st_adam west_ad am we st ad am we st adam_w es t_ ad am west_ad am we st ad am we st ad am we st_ada m_ west_ad am we st ad am west_a da m_west_ ad am we st ad am we st ad am west_a da m_ we st adam_w es t_adam_ west_ad am we st ad am west_a da m_ we st adam_we st ad am we st ad am we st ad am we st_ada m_ we st ad am we st adam_we st ad am we st ad am we st ad am we st_ada m_ we st ad am_wes t_ adam_we st_adam we st ad am_wes t_ ad am we st ad am_west ad am we st ad am we st ad am we st adam_w es t_ ad am we st ad am_west ad am we st ad am we st ad am we st adam_w es t_ ad am we st adam_w es t_adam_ west_ad am we st_ada m_ we st ad am we st ad am west_ad am we st ad am we st ad am west_a da m_ we st ad am we st ad am_west ad am we st ad am we st ad am_wes t_ ad am we st ad am we st adam_w es t_adam_ west_ad am west_a da m_ we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st_ada m_ west_ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am west_a da m_west_ ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am_wes t_ adam_we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st adam_w es t_adam_ west_ad am west_a da m_ we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st_ada m_ west_ad am_west ad am west_a da m_ we st ad am_west ad am we st ad am we st_ada m_ we st ad am we st ad am we st ad am we st ad am we st ad am west_ad am we st ad am we st adam_w es t_ ad am we st_ada m_ west_ad am_west ad am we st adam_w es t_ ad am west_ad am we st ad am we st adam_w es t_ ad am_west ad am we st adam_w es t_ ad am we st_adam we st ad am west_a da m_ we st_adam we st ad am we st ad am_wes t_ ad am we st_ada m_ west_ad am_west ad am we st ad am we st_ada m_ we st_adam we st ad am we st ad am_wes t_ adam_we st ad am we st ad am_wes t_ ad am west_ad am we st ad am we st_ada m_ west_ad am we st ad am we st adam_w es t!

ลองออนไลน์! (transpiled brainfuck)

Adam West ร้องเพลง (ขอบคุณ @carusocomputing)


69
นี่มันแย่มาก ฉันรักมัน.
TheWanderer

25
อืมมม ใช่. ค่อนข้างดี แต่ฉันคิดว่าคุณลืมขีดล่างของบรรทัดที่ 1
Mateen Ulhaq

2
มีวิธีที่เราสามารถทดสอบสิ่งนี้ได้หรือไม่?
Shaggy

4
@ Wilf ยินดีต้อนรับสู่ PCCG! เราไม่ได้จริงๆแข่งขันในเว็บไซต์นี้ของหลักสูตรนี้ไม่ได้เป็นทางออกที่ชนะ แต่เฮฮาและความท้าทายแกนจึงได้รับ upvoted เพื่อให้คนอื่น ๆ สามารถสนุกกับมัน หวังว่าจะเอาชนะคำตอบของคุณในไม่ช้า!
Uriel


67

Python, 530 529 528 524 ไบต์

import zlib as Holy
B=list("NNAAAnAAnnAnaAannnaaaaNaAAnNanAaAanNNaNNaNaanNNANanNNANaAnAaANANAAnAaANNnAanAaNnAaAANNAaAnNANAaaANNAanAaNaNNNAaNNanAAnNNnaaaNANANANnnaaaNaaAAAANaNaNaNAnNAAAAaaaaANAaNnnAaAaNAAaANNnaaNnNnaannaaAaananannNnAAAAAanAananANAnaAAnANAAaaaAaaanaaAAaanNAnanAAnnnANAnNAnnAnnnanaNNaaaNaNNaAAnNAaaANNNANAnAaaAaNaANnNNNaaAanaaaanaaaaaAaAaNnNnnaAnANaNnnANanNA")
A=dict(N='11',A='01',n='10',a='00')   
T=""
POP=BIFF=POW=OOF=lambda:A[B.pop()]
while B:T+=chr(int(POP()+POW()+BIFF()+OOF(),2))
print Holy.decompress(T)

5
โอ้ท่านข้าไม่ได้หัวเราะหนักขนาดนั้นสักพัก NAanANANaNANaNAANNAnaNANanaNA
Magic Octopus Urn

9
ในสนามกอล์ฟรหัสเราควรที่จะทำให้ไบต์นับขนาดเล็ก แต่รายการของคุณค่อนข้างหนัก ;)
PM 2Ring

34
ในบางครั้งเราต้องเสียสละเพื่อสิ่งที่ดีกว่า
ruuenza

1
ฟังดูเหมือนบางสิ่งที่นายทหารจะพูด ;) ฉันต้องยอมรับว่าฉันพบว่าB.pop(0)น่ารำคาญเล็กน้อย ทำไมไม่ย้อนกลับBเพื่อให้คุณสามารถใช้งานได้อย่างมีประสิทธิภาพมากขึ้น (และสั้นกว่า) B.pop()? pop(0)มีการย้ายทุกองค์ประกอบของรายการที่เหลือลงหนึ่งช่อง แน่นอนว่ามันเกิดขึ้นที่ความเร็ว C แต่ก็ยังมีประสิทธิภาพน้อยกว่าการโผล่จากปลายสาย
PM 2Ring

5
นามแฝงเพื่อPOP, BIFF, POW, OOFทำให้ฉันคายสิ่งที่ผมดื่มบนจอภาพของฉัน ขอบคุณครับ +1
rayryeng

21

JavaScript (ES6), 148 146 bytes

_=>`n2zh2
f8l2b2l8
b8pep8
7cpepc
5ijiji
3yyq
0
0
0
3yyq
5afy8fa
98f69a96f8
f4f2d6d2f4`.replace(/./g,c=>'* '[(n=parseInt(c,36))&1].repeat(n/2||49))

การสาธิต


12

Python, 149 142 ไบต์

บันทึกแล้ว 7 ไบต์ด้วย @ PM2Ring

for l in"b1d 74a13 54c4 36c4 2995 1o 0p 0p 0p 1o 257b 447343 727162".split():x=''.join(s*int(k,36)for s,k in zip(' *'*3,l));print(x+x[-2::-1])

ดี คุณสามารถโกนทิ้งได้ 7 ไบต์:x=''.join(s*int(k,36)for s,k in zip(' *'*3,l))
PM 2Ring

ไม่ต้องห่วง. ฉันจัดการเพื่อเขียน Python เวอร์ชันที่สั้นกว่านี้ได้ ;)
PM 2Ring

1
@ PM2 คุณได้รับ +1 ของฉันแล้ว
Uriel

12

MATL , 61 59 ไบต์

' *'60:'*u9|K9j[~F9R,>ejc4Q,7;F\1l_=7sFR'F11:ZaY"13e)25ZvZ)

ลองออนไลน์!

มันทำงานอย่างไร

สิ่งนี้ใช้เทคนิคมาตรฐานต่อไปนี้:

  • เนื่องจากภาพมีความสมมาตรในแนวนอนจึงมีการเข้ารหัสเฉพาะครึ่งซ้าย (รวมถึงคอลัมน์กลาง)
  • ภาพเป็นเชิงเส้นในการสั่งซื้อคอลัมน์หลัก (ลงแล้วข้าม) และลำดับส่งผลให้มีการทำงานที่มีความยาวเข้ารหัส
  • ความยาวการรันที่เกิดขึ้นใช้ค่าจาก1ถึง11ดังนั้นลำดับของความยาวการรันจะถูกบีบอัดโดยการแปลงฐานจากฐานหนึ่ง11ไปยังฐาน94(ตัวอักษร ASCII ที่พิมพ์ได้ยกเว้นเครื่องหมายคำพูดเดี่ยวซึ่งจะต้องหนีออกมา)

1
มีการรัน 60 ลำดับตามคำสั่งของคอลัมน์ แต่มีเพียง 38 รายการในแถวหลัก จะบันทึกไบต์ใด ๆ
เดนนิส

@Dennis ปัญหาคือในกรณีที่ระยะเวลาในการรัน[1:12 20 24 99]ซึ่งทำให้การบีบอัดยากขึ้น ความพยายามที่ดีที่สุดของฉันคือ 60 ไบต์
Luis Mendo

แทนที่จะสร้างชุดที่แน่นอนคุณลองใช้ฐาน 25 และแทนที่ 0 ด้วย 99 ด้วยเช่นY|หรือไม่? ผมไม่ทราบว่าพอ MATL ตู้เอทีเอ็มเพื่อทดสอบว่าที่จริงสั้น ...
เดนนิส

@Dennis ที่ดูมีแนวโน้ม การใช้ชุด[1:24 99]ผมลบออกหนึ่งไบต์ ถ้าฉันใช้[0:24](ฐาน 25) ฉันไม่รู้วิธีเปลี่ยน0เป็น99สองสามไบต์
Luis Mendo

1
ใช่Y|ไม่ทำงานใน MATL / Octave เหมือนใน Jelly / Python ในระยะหลังให้0 or 99ผลตอบแทน99 ...
เดนนิส

7

05AB1E , 47 ไบต์

„ *19×S•«M;Ó8ζ?èYÑ?½¨/Ž´.δòÈÖ<•25вт<19ǝ×J13ä€û»

ลองออนไลน์!


อัลกอริธึมของเดนนิสรังเพลิงใช่ไหม?
Erik the Outgolfer

@EriktheOutgolfer: ยืมreplace 99 trickจากเขา (บันทึกไว้ 4 ไบต์ผ่านทางตรงไปข้างหน้า) ยังคงมองหาวิธีที่ดีกว่า
Emigna

-1 โดยใช้.∞แทน€û»(มิรเรอร์เข้าร่วมรายการโดยนัยในการขึ้นบรรทัดใหม่ครั้งแรกในเวอร์ชันดั้งเดิมก่อนที่จะใช้มิเรอร์) ฉันยังพยายามที่จะใช้₂вแทน25вแต่โชคร้ายเลขที่บีบอัดแล้ว 1 •2Ø°×á[1∊Œ)’˜Àå<тIÞ‡p5ÉQ•₂вไบต์อีกต่อไปเช่นกันดังนั้นจึงไม่ได้บันทึกอะไร:
Kevin Cruijssen

7

เป็นกลุ่ม, 168 156 ไบต์

:nm N a <C-v><ESC>
:nm A a*<C-v><ESC>
:nm B aY<C-v><ESC>yyp!!rev<C-v><CR>kJh4xo<C-v><ESC>
11NA13NB7N4A10NA3NB5N4A12N4AB3N6A12N4AB2N9A9N5ABN24AB25ABkyyppjN24AB2N5A7N11AB4N4A7N3A4N3AB7N2A7NA6N2ABdd

revนี้จะถือว่าสภาพแวดล้อมระบบปฏิบัติการยูนิกซ์สำหรับ ฉันใช้การเข้ารหัสที่ตรงไปตรงมา (นับ, ตัวละคร) โดยที่ N และ A ต่อท้ายและ*ตามลำดับและ B ทำการคัดลอกและย้อนกลับ

ในไฟล์จริงรายการในวงเล็บจะถูกแทนที่ด้วยไบต์ตามตัวอักษรที่พวกเขาเป็นตัวแทน <C-v>คือ 0x16 <ESC>คือ 0x1b และ<CR>คือ 0x0d

ลองออนไลน์


ฉันคิดว่ามันจะเร็วกว่าที่จะไม่รบกวนการสร้างมาโคร 'b' และ 'c' และทำการแมปใหม่โดยตรง :nm N a <C-v><esc>และ:nm A a*<C-v><esc>
DJMcMayhem

@DJMcMayhem ดังนั้นมันจึงเป็นเช่นนั้น ด้วยเหตุผลบางอย่างผมคิดว่ามันจะเป็นเรื่องยากมากขึ้นในการจัดเก็บในแฟ้มมากกว่าที่เป็นอยู่ดังนั้นผมจึงใช้วิธีวงเวียนดังนั้นฉันสามารถทดสอบกับ<C-v> { cat foo.vim; echo ':wq'; } | vim out.txtฉันไม่แน่ใจว่าทำไมจึงไม่ลอง<C-v><C-v>เมื่อวานนี้
เรย์

ฉันดีใจที่รู้ว่าคุณทำงานได้! อีกวิธีหนึ่งที่คุณสามารถทดสอบคำตอบที่เป็นกลุ่มเพื่อความสะดวกคือลองใช้งานออนไลน์! ซึ่งจริงๆแล้วใช้ esolang ที่ฉันเขียน แต่มันก็เข้ากันได้ การ-vตั้งค่าสถานะอนุญาตให้คุณใช้คำอธิบายคีย์กลุ่ม (เช่น<C-v>และ whatnot)
DJMcMayhem

@DJMcMayhem ดีมาก ขอบคุณ
เรย์

คุณเขียน<NL>แทน<NEWLINE>ไม่ได้ใช่ไหม
L3viathan

7

ถ่าน , 69 54 52 48 ไบต์

E⪪”|↖y{{﹪yc›o”n↗πf>T≔Y¿PN|ωπQβ” ⪫Eιק* μ⌕βλω‖O←

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด แก้ไข: ขอบคุณ @ ASCII เท่านั้นเท่านั้นที่บันทึกไว้ 4 ไบต์โดยเปลี่ยนจากการตั้งค่าสถานะแยกเป็นการวนลูปมากกว่าดัชนี7 ไบต์โดยใช้⸿อักขระ(ไม่มีเอกสาร?)และอีก 4 ไบต์โดยใช้ตัวอักษรสำหรับการเข้ารหัสความยาว บันทึกเพิ่มอีก 2 ไบต์เนื่องจากAtIndexใช้โมดูโล่โดยอัตโนมัติ บันทึกอีก 4 ไบต์เนื่องจากMapสร้างตัวแปรดัชนีโดยอัตโนมัติ คำอธิบาย:

Print(Map(

ด้านนอกMapส่งกลับอาร์เรย์ Printจัดการนี้โดยการพิมพ์แต่ละองค์ประกอบในสายของตัวเองจึงหลีกเลี่ยงไม่ต้องด้วยตนเองพวกเขาด้วยJoin\n

Split("anb adbke eme fjj y z z z y lhf dedhe cgbhc" " "),

สตริงเข้ารหัสครึ่งแถวทั้งหมดของเอาต์พุต ตัวอักษรที่สลับกันหมายถึงจำนวน*s และช่องว่าง ( a=0ใช้เพื่อจัดการกับแถวที่ขึ้นต้นด้วยช่องว่าง) พื้นที่นั้นเป็นตัวเลือกที่สะดวกในการใช้ตัวคั่น แต่ก็กลับกลายเป็นว่าบีบอัดได้ดี (x ยังบีบอัดให้มีขนาดโดยรวม 55 ไบต์) แต่ละแถวจะถูกประมวลผลแยกกัน (หมายเหตุ: deverbosifier ล้มเหลวในการลบตัวคั่นระหว่างสตริงที่บีบอัดและไม่บีบอัดมิฉะนั้นโค้ดจะมีความ,สามารถในการอ่าน)

Join(Map(i, Times(AtIndex("* ", m), Find(b, l))), w)));

วนรอบตัวอักษรทุกตัวขยายเป็นจำนวนที่เหมาะสม*หรือเว้นวรรค ตัวแปรmคือดัชนีลูปภายในสำหรับสิ่งนี้Mapในขณะที่lถือจดหมาย ผลที่ได้คือแล้วJoined wเป็นสายเดียวใช้สตริงว่างที่กำหนดไว้ล่วงหน้า

ReflectOverlap(:Left);

เมื่อพิมพ์แถวทั้งหมดแล้วให้สะท้อนทุกอย่างไปทางซ้ายทับคอลัมน์กลาง

ฉันพยายามจัดการ newlines, ช่องว่างและดวงดาวทั้งหมดในหนึ่งวง แต่จริงๆแล้วมันใช้เวลาสองไบต์มากกว่านี้:

Print(Join(Map("anb adbke eme fjj y z z z y lhf dedhe cgbhc", Ternary(Equals(" ", i), "\n", Times(AtIndex("* ", k), Find(b, i)))), w));
ReflectOverlap(:Left);

1
+1 ฉันต้องเรียนรู้ Charcoal จริงๆ (รวมถึง Hexagony และ Cubix) สามภาษาที่ฉันชอบในการเขียนโปรแกรมที่นี่ แต่ฉันคิดว่าคุณวางแผนไว้แล้ว แต่คุณสามารถเพิ่มคำอธิบายได้ไหม?
Kevin Cruijssen

@KevinCruijssen อืมฉันเดาว่ารหัส verbose ต้องการคำอธิบายบางอย่าง ... มันพอเพียงไหม?
Neil

อ่าฉันไม่ได้สังเกตว่า TIO บรรจุ verbose version tbh แต่อย่างไรก็ตามคำอธิบายในคำตอบนั้นไม่เคยเจ็บปวดดังนั้นขอขอบคุณที่สละเวลาเขียนมัน
Kevin Cruijssen

ฉันต้องการเรียนรู้ถ่าน แต่ต้องการหน้าเหมือน 05AB1E ซึ่งจะอธิบายสิ่งที่อักขระแต่ละหน้าของโค้ดทำได้จริงโดยไม่ต้องดำดิ่งลงในโค้ด
Magic Octopus Urn

2
@carusocomputing มันไม่ได้เลวร้ายเกินไป: นอกเหนือจากสตริงที่บีบอัดแล้วคุณมีสตริงปกติ (ตัวอักษร ASCII และ pilcrow), ตัวเลข (ตัวยกหลัก), ลูกศร (... ลูกศร), คำสั่ง (โดยปกติจะเป็นตัวอักษรเต็มความกว้าง) และผู้ประกอบการ อื่น ๆ ) ดังนั้นคุณสามารถค้นหาได้ในหน้าวิกิที่เหมาะสม
Neil

6

Clojure 833 437 ไบต์

เกือบตามคำนิยาม Clojure จะไม่ชนะรางวัลใด ๆ สำหรับช่วงเวลาสั้น ๆ แต่เมื่อฉันมองไปข้างหน้าทุกสัปดาห์ถึงตอนที่สอง (นับ 'em - TWO ) ของแบทแมน (Bat-time เดียวกัน Bat-channel เดียวกัน!) เห็นได้ชัดว่า ไม่มีเวลาที่จะสูญเสีย!

ด่วน, โรบิน - ไปที่ Bat-REPL !!!

(defn r[c n](clojure.string/join(repeat n c)))(defn pl[col](loop[i 0 c " "](print(r c (nth col i)))(if(< i (dec (count col)))(recur (inc i) (if (= c " ") "*" " "))(println))))(defn p[](loop[lines [[11 1 25 1][7 4 10 1 5 1 10 4][5 4 12 7 12 4][3 6 12 7 12 6][2 9 9 9 9 9][1 47][0 49][0 49][0 49][1 47][2 5 7 21 7 5][4 4 7 3 4 5 4 3 7 4][7 2 7 1 6 3 6 1 7 2]] i 0] (pl (nth lines i))(if (< i (dec (count lines)))(recur lines (inc i))nil)))

เวอร์ชันที่ไม่ตีกอล์ฟ:

(defn repstr [c n]
  (clojure.string/join (repeat n c)))

(defn print-bat-signal-line [col]
  (loop [i  0
         c  " "]
    (print (repstr c (nth col i)))
    (if (< i (dec (count col)))
      (recur (inc i) (if (= c " ") "*" " "))
      (println))))

(defn print-bat-signal []
  (loop [lines [[11 1 25 1]  ; spaces asterisks spaces asterisks
                [7 4 10 1 5 1 10 4]
                [5 4 12 7 12 4]
                [3 6 12 7 12 6]
                [2 9 9 9 9 9]
                [1 47]
                [0 49]
                [0 49]
                [0 49]
                [1 47]
                [2 5 7 21 7 5]
                [4 4 7 3 4 5 4 3 7 4]
                [7 2 7 1 6 3 6 1 7 2]]
        i      0]
    (print-bat-signal-line (nth lines i))
    (if (< i (dec (count lines)))
      (recur lines (inc i))
      nil)))

RIP Adam West ไม่ว่าการแสดงเหล่านั้นไร้สาระจะเป็นอย่างไรพวกเราที่เป็นเด็กแสดงความยินดีกับคุณ


ในขณะที่ไม่ได้เล่นกอล์ฟ
Magic Octopus Urn

เพิ่มเวอร์ชัน Golfed แล้ว ฉันหันไปด้านข้างเพื่อทำให้ดูเหมือนว่ามันกำลังปีนกำแพงถ้าฉันทำได้ :-)
Bob Jarvis


6

โซลูชันต่าง ๆ ทั้งหมดใช้การเข้ารหัสความยาวรันด้วยเทคนิคที่หลากหลายเพื่อเข้ารหัสข้อมูล RLE

Python 3, 125 121 ไบต์

รุ่นนี้ใช้bytesสายอักขระในการจัดเก็บข้อมูล

s=''
for c in b'<)@4/:),0/>/,3>/*981(WYYY(W*14=./4-.-4+4)2+':s+=' *'[c%2]*(c//2-19);s*=len(s)<25or print(s+s[-2::-1])or 0

อนุญาตsเป็นสตริงของดาวหรือช่องว่าง จากนั้นการnเข้ารหัสไบต์sจะถูกกำหนดโดย

n = 38 + 2*len(s) + (s[0]=='*')

Python 2, 133 126 ไบต์

รุ่นนี้ใช้การเข้ารหัสตัวอักษร ค่าตัวอักษรกำหนดความยาวของสายออกกรณีของตัวอักษรกำหนดว่ามันประกอบด้วยช่องว่างหรือดาว

s=''
for c in'kAmgDjAceDlDcFlDbIiEaXYYYaXbEgKdDgCdCgBgAfB':
 s+=' *'[c<'a']*(int(c,36)-9)
 if len(s)>24:print s+s[-2::-1];s='' 

133 byte Python 2 solution ดั้งเดิมของฉัน

รุ่นนี้ใช้สตริงที่มีความยาวเป็นศูนย์เพื่อให้สามารถสลับระหว่างสตริงดาวและสตริงอวกาศได้อย่างง่ายดาย

s=''
for c,n in zip(24*' *','b1d074a13054c436c429951o0p0p0p1o257b447343727162'):
 s+=c*int(n,36)
 if len(s)>24:print s+s[-2::-1];s=''

เพียงเพื่อความสนุกนี่คือหนึ่งซับโดยใช้การเข้ารหัสตัวอักษร

Python 2, 148 ไบต์

print'\n'.join(''.join(s+s[-2::-1])for s in zip(*[iter(''.join(' *'[c<'a']*(int(c,36)-9)for c in'kAmgDjAceDlDcFlDbIiEaXYYYaXbEgKdDgCdCgBgAfB'))]*25))

เพื่อความสนุกสนานมากยิ่งขึ้นนี่เป็นรูปแบบในเกมแห่งชีวิตของคอนเวย์ ที่สร้างโลโก้แบทแมนรุ่นหนึ่งขึ้นมา ฉันต้องเพิ่มสองเท่าของแต่ละบรรทัดเพื่อให้อัตราส่วนกว้างยาวเท่ากับเวอร์ชันของข้อความ รูปแบบนี้ไม่ได้คำนวณโลโก้จริงๆ (แม้ว่ามันจะเป็นไปได้ที่จะทำการคำนวณใน Life - มันเป็นทัวริงที่สมบูรณ์), มันจะรีเพลย์มันจากลูปหน่วยความจำดังนั้นฉันเดาว่าฉันไม่สามารถโพสต์มันเป็นรายการ ฉันไม่ได้สร้างมันขึ้นมาโดยใช้สคริปต์ Python ผมเขียนไม่กี่ปีที่ผ่านมา) ;)

มันได้รับการเข้ารหัสในรูปแบบ RLE ที่ค่อนข้างเป็นมาตรฐานซึ่งเอ็นจิ้นชีวิตส่วนใหญ่สามารถโหลดได้ หากคุณไม่มีโปรแกรม GoL (เช่นGolly ) คุณสามารถดูได้ในแบบออนไลน์ด้วยเอนจิ้น Life ออนไลน์นี้ซึ่งสามารถนำเข้าไฟล์ Life RLE ต่อไปนี้เป็นรูปแบบ PNG ของรูปแบบชีวิตนั้นบางโปรแกรมของ Life (รวมถึง Golly) สามารถโหลดรูปแบบชีวิตจาก PNG และรูปแบบไฟล์รูปภาพอื่น ๆ


6

T-SQL, 283 276 222 ไบต์

SELECT CAST(DECOMPRESS(CAST('H4sIAAAAAAAEAFNQgAMtBVxAi5cLxgICdB3IAkAAVYuqEsLHIgRWjV0KqxBIvZYWujQeEaAGLdIALxeJGuinhXSvQEMCPVSQAbIcJPJQReGSSHxU9WAeSppAqEMoBwCfudAGawIAAA=='as XML).value('.','varbinary(max)'))AS varchar(max))

การใช้การบีบอัด GZIP ของสตริงนายทหารเดิมผ่านทางวิธีการโพสต์ที่นี่ สิ่งนี้ใช้ได้เฉพาะใน SQL 2016 และใหม่กว่า

สำหรับ SQL เวอร์ชันก่อนหน้าใช้เมธอดก่อนหน้าของฉัน ( 276 ไบต์ ):

DECLARE @ CHAR(999)=REPLACE(REPLACE(REPLACE('PRINT SPACE(11#1$25#1&$7#4$10#1$5#1$10#4&$5#4$12#7$12#4&$3#6$12#7$12#6&$2#9$9#9$9#9&$1#47&#49&#49&#49&$1#47&$2#5$7#21$7#5&$4#4$7#3$4#5$4#3$7#5&$7#2$7#1$6#3$6#1$7#2)','#',')+REPLICATE(''*'','),'$',')+SPACE('),'&',')+CHAR(13')EXEC(@)

โดยทั่วไปฉันเข้ารหัสสตริงยักษ์ที่กำหนดว่าจะพิมพ์ถัดไปด้วยตนเองโดยใช้วิธีการต่อไปนี้:

  • #7 ถูกแทนที่ด้วย +REPLICATE('*',7)
  • $4 ถูกแทนที่ด้วย +SPACE(4)
  • & ถูกแทนที่ด้วย +CHAR(13)

หลังการแทนที่สตริงอักขระ 958 ตัวเต็มจะมีลักษณะดังนี้

PRINT 
SPACE(11)+REPLICATE('*',1)+SPACE(25)+REPLICATE('*',1)+CHAR(13)
+SPACE(7)+REPLICATE('*',4)+SPACE(10)+REPLICATE('*',1)+SPACE(5)+REPLICATE('*',1)+SPACE(10)+REPLICATE('*',4)+CHAR(13)
+SPACE(5)+REPLICATE('*',4)+SPACE(12)+REPLICATE('*',7)+SPACE(12)+REPLICATE('*',4)+CHAR(13)
+SPACE(3)+REPLICATE('*',6)+SPACE(12)+REPLICATE('*',7)+SPACE(12)+REPLICATE('*',6)+CHAR(13)
+SPACE(2)+REPLICATE('*',9)+SPACE(9)+REPLICATE('*',9)+SPACE(9)+REPLICATE('*',9)+CHAR(13)
+SPACE(1)+REPLICATE('*',47)+CHAR(13)
+REPLICATE('*',49)+CHAR(13)
+REPLICATE('*',49)+CHAR(13)
+REPLICATE('*',49)+CHAR(13)
+SPACE(1)+REPLICATE('*',47)+CHAR(13)
+SPACE(2)+REPLICATE('*',5)+SPACE(7)+REPLICATE('*',21)+SPACE(7)+REPLICATE('*',5)+CHAR(13)
+SPACE(4)+REPLICATE('*',4)+SPACE(7)+REPLICATE('*',3)+SPACE(4)+REPLICATE('*',5)+SPACE(4)+REPLICATE('*',3)+SPACE(7)+REPLICATE('*',5)+CHAR(13)
+SPACE(7)+REPLICATE('*',2)+SPACE(7)+REPLICATE('*',1)+SPACE(6)+REPLICATE('*',3)+SPACE(6)+REPLICATE('*',1)+SPACE(7)+REPLICATE('*',2)

ซึ่งได้รับการดำเนินการเป็น SQL แบบไดนามิกการผลิตผลลัพธ์ต่อไปนี้:

           *                         *
       ****          *     *          ****
     ****            *******            ****
   ******            *******            ******
  *********         *********         *********
 ***********************************************
*************************************************
*************************************************
*************************************************
 ***********************************************
  *****       *********************       *****
    ****       ***    *****    ***       *****
       **       *      ***      *       **

5

PHP , 137 ไบต์

<?=gzinflate(base64_decode(U1CAAy0FXECLC8YAAnQNyAJAwIVFIYSPRYgLLkWEYrByLS10WTwiXAgmcYCLRPV00kGyN6BhgB4eyABZjgstyqAsuDpU5YjEgJIOEKoQigE));

ลองออนไลน์!

PHP , 177 ไบต์

foreach(["9zojk",a2878,aa4nb,b7u9z,chbf3,eze2n,jz6rj,jz6rj,jz6rj,eze2n,cepdr,ako8z,a1pc1]as$v)echo$t=strtr(substr(base_convert($v,36,2),1),10,"* "),"* "[$k++<2],strrev($t),"\n";

ลองออนไลน์!

PHP , 179 ไบต์

for(;$o=ord(kAlgDjAbeDlCcFlCbIiDaWXXXaWbEgJdDgCdBgBgAfA[$i++]);($x+=$s)%24?:print$r.("* "[$k++<2]).strrev($r)."\n".$r="")$r.=strtr(str_repeat($b=+($o>96),$s=$o-64-$b*32),10," *");

ลองออนไลน์!


ตัวอย่างแรกของคุณต้องการคำพูด
Steven Penny

2
@StevenPenny ไม่มันไม่ได้ ตรวจสอบลิงค์ลองออนไลน์แล้วหรือยัง?
OVS

1
@StevenPenny ในกรณีนี้ PHP ใช้ค่าคงที่ที่ไม่มีอยู่กับสตริง ฉันเพียงแค่โยนข้อผิดพลาดการแจ้งเตือนที่ได้รับอนุญาตใน Codegolf และ "=" ที่หายไปในตอนท้ายของสตริงที่เข้ารหัส base64 จะถูกเพิ่มโดยอัตโนมัติ
JörgHülsermann

4

Java, 296 214 ไบต์

แข็งแรงเล่นกอล์ฟ:

()->{String r="";boolean b=1<0;for(int a:";1I1074:151:4054<7<4036<7<6029999901_10a10a10a01_0257E570447345437407271636172".toCharArray()){for(int i=0;i<a-48;++i)r+=(b?'*':' ');if(a<49)r+='\n';else b=!b;}return r;}

Ungolfed:

public class InHonorOfAdamWest {

  public static void main(String[] args) {
    System.out.println(f(() -> {
      String r = "";
      boolean b = 1 < 0;
      for (int a : ";1I1074:151:4054<7<4036<7<6029999901_10a10a10a01_0257E570447345437407271636172".toCharArray()) {
        for (int i = 0; i < a - 48; ++i) {
          r += (b ? '*' : ' ');
        }
        if (a < 49) {
          r += '\n';
        }
        else {
          b = !b;
        }
      }
      return r;
    }));
  }

  private static String f(java.util.function.Supplier<String> f) {
    return f.get();
  }
}

สามารถใช้";1I1074:151:4054<7<4036<7<6029999901_10a10a10a01_0257E570447345437407271636172"เป็นข้อมูลได้และfor(char a:x){a=(int)a-48; [...]โดยทั่วไปแล้วจะเพิ่ม 48 ให้กับตัวเลขแต่ละตัวและแปลงให้เป็นตัวเลขที่เทียบเท่ากัน ฉันเชื่อว่านี่จะช่วยให้คุณประหยัด 70-80 ไบต์ นอกจากนี้ฉันเชื่อว่าการเข้ารหัสข้อมูลลงใน lamba จะช่วยลดจำนวนไบต์เช่นกัน
Magic Octopus Urn

นอกจากนี้ยังboolean b=false;สามารถboolean b=1<0หรือดีกว่าคุณสามารถใช้intและยังรวมการประกาศสำหรับiในบรรทัดเดียวกัน;)
Magic Octopus Urn

1
@carusocomputing ขอบคุณฉันไม่ได้คิดเกี่ยวกับการบรรจุไว้ในสตริง ของคุณมีค่า Unicode ที่ไม่ดีอยู่ในนั้นฉันต้องสร้างมันใหม่และเอาท์พุทแสดงอย่างถูกต้องในตอนนี้

เนื่องจากคุณไม่ได้ใช้iสำหรับลูปของฉันฉันคิดว่าคุณสามารถใช้for(int i=0;i++<a-48;)เป็นfor-head
Roman Gräf

3

Bubblegum , 75

การถ่ายโอนข้อมูล xxd:

00000000: cd92 b501 8050 1043 fb4c 91fa efbf 1f0e  .....P.C.L......
00000010: 2f87 d371 5814 37d3 7c35 4d2b 1826 64f6  /..qX.7.|5M+.&d.
00000020: d8aa 419c 2a11 3e75 ce25 6d1e ee9d 22e0  ..A.*.>u.%m...".
00000030: bb11 f04f 0d7f 2e38 dfc8 6926 3dad 0871  ...O...8..i&=..q
00000040: f316 1071 6db8 fc07 a408 f7              ...qm......

ลองมันออนไลน์


3

Coffeescript (282 ไบต์)

t=['6bk','59mw','l2j3','2ghsf','4zg2n','9zldr','jz6rj','4u7zz','165qf','47wj']
[0,1,2,3,4,5,6,6,6,5,7,8,9].map((d)->parseInt(t[d], 36).toString(2).padStart 25, '0').forEach (d)->console.log (d+d.split('').reverse().join('').substring(1)).replace(/0/g, ' ').replace(/1/g,'*')

คำอธิบาย (ใช้ที่ราบ -6 ES6)

  • เช่นเดียวกับที่คนอื่นพูดถึงภาพนั้นมีความสมมาตรดังนั้นเราจึงสามารถโยนมันครึ่งหนึ่งในการเข้ารหัส
  • มีการทำซ้ำหลายบรรทัดดังนั้นเราสามารถโยนแต่ละบรรทัดในตารางการค้นหาเพื่อบันทึกสองสามไบต์
  • เราแปลงแต่ละครึ่งบรรทัดเป็นไบนารี (โดยใช้ 0 เป็นช่องว่างและ 1 เป็น *) และเข้ารหัสที่เลขฐานที่สูงที่สุดใน Javascript (36) ทำให้เกิดการเข้ารหัสอาร์เรย์
  • แผนที่แรกใช้เวลาแต่ละบรรทัดแล้วแปลงกลับเป็นเอาต์พุตครึ่งบรรทัดสุดท้ายเติมด้วย 0s
  • แผนที่ที่สองเชื่อมต่อแต่ละบรรทัดด้วยครึ่งที่กลับด้าน (การโยนคอลัมน์กลางในครั้งที่สอง) และแทนที่ 0s และ 1s ด้วยช่องว่างและ * s

var t = [
    '6bk',
    '59mw',
    'l2j3',
    '2ghsf',
    '4zg2n',
    '9zldr',
    'jz6rj',
    '4u7zz',
    '165qf',
    '47wj'
];
[0,1,2,3,4,5,6,6,6,5,7,8,9].map((d) => {
    return parseInt(t[d], 36).toString(2).padStart(25, '0');
})
.forEach((d) => {
    console.log((d + d.split('').reverse().join('').substring(1))
        .replace(/0/g, ' ')
        .replace(/1/g, '*'));
});


คำตอบที่ยอดเยี่ยม! ยินดีต้อนรับสู่เว็บไซต์! :)
DJMcMayhem

2

V , 102 ไบต์

i±³ *±± 
³ *± ´*· 
´*±² ´*µ 
´*±² ¶*³ 
µ*¹ ¹*  
²´* Ä3o²µ*jo±±*· µ*  
³*´ ³*· ´*´ 
**¶ *· **· Îæ$vp

ลองออนไลน์!

hexdump:

00000000: 69b1 b320 2ab1 b120 0ab3 202a b120 b42a  i.. *.. .. *. .*
00000010: b720 0ab4 2ab1 b220 b42a b520 0ab4 2ab1  . ..*.. .*. ..*.
00000020: b220 b62a b320 0ab5 2ab9 20b9 2a20 200a  . .*. ..*. .*  .
00000030: b2b4 2a20 1bc4 336f b2b5 2a1b 6a6f b1b1  ..* ..3o..*.jo..
00000040: 2ab7 20b5 2a20 200a b32a b420 b32a b720  *. .*  ..*. .*. 
00000050: b42a b420 0a2a 2ab6 202a b720 2a2a b720  .*. .**. *. **. 
00000060: 1bce e624 7670                           ...$vp

สิ่งนี้ใช้การเข้ารหัสแบบรันไทม์เพื่อสร้างแบทแมนครึ่งต่อไปนี้:

             *           
   *          ****       
****            ****     
****            ******   
*****         *********  
************************ 
*************************
*************************
*************************
************************ 
***********       *****  
***    ***       ****    
**      *       **      

จากนั้นกลับด้านและทำซ้ำแต่ละบรรทัด


2

Python 2 , 134 ไบต์

for w in'1D 4A13 4C4 6C4 995 O P P P O 57B 47343 27162'.split():r=''.join(c*int(k,36)for c,k in zip(3*'* ',w));print'%25s'%r+r[-2::-1]

ลองออนไลน์!

ความยาวในการเข้ารหัสแต่ละบรรทัดจากครึ่งซ้ายในฐาน 36 ทำสำเนาให้เต็มบรรทัดซึ่งพิมพ์ออกมา ช่องว่างนำไม่ได้เข้ารหัส แต่ครึ่งซ้ายจะเพิ่มความยาวเป็น 25


ฉันหวังว่าฉันจะใช้เคล็ดลับการเติมเต็มได้ในเวอร์ชันของฉัน ...
PM 2Ring

2

Mathematica 151 Bytes

Uncompress@"1:eJxTTMoPCm5iYmBQQAAtBVxAK8bA0AjGBgJ0PcgCQABXjaoWwsciBFWPXRKrEESHlha6AjwiYC1apAGQHhK10FsTOV6Chgp6CCEDZDlYdKKKw6WR+OjxD+KiJBSEQoR6AC49ZiI="

ราคาถูกและไม่สร้างสรรค์ สตริงมาจากCompressคำสั่งในตัวที่ใช้กับเอาต์พุตที่ต้องการ

ปรับปรุง:

ฉันคิดว่าฉันสามารถทำได้ดีกว่าด้วยฟังก์ชั่นImportString\ ExportStringฟังก์ชั่น\ แต่ฉันไม่เห็นการคัดลอกและวางสตริงผลลัพธ์จากExportStringอย่างถูกต้อง เช่น

b = "           *                         *\n       ****          *     *          ****\n     ****            *******            ****\n   ******            *******            ******\n  *********         *********         *********\n ***********************************************\n*************************************************\n*************************************************\n*************************************************\n ***********************************************\n  *****       *********************       *****\n    ****       ***    *****    ***       ****\n       **       *      ***      *       **"
ExportString[b,"GZIP"]
ImportString[%,"GZIP"]

ฉันไม่สามารถคัดลอกเอาท์พุทข้อความจากบรรทัดที่สองเพื่อแทนที่%ในบรรทัดที่สาม


2

ทุบตี ,407 322 ไบต์

w=`yes 1|head -30|tr -d '\n'`
for i in B1C000 74A120 54C003 36C003 299004 1C0506 0D0506 0D0506 0D0506 1C0506 257505 447342 727161
{ read a b c d e f <<<$(echo $i| fold -1| xargs)
x=`printf "%.$[0x${a}]d%.$[0x${b}]s%.$[0x${c}]d%.$[0x${d}]s%.$[0x${e}]d%.$[0x${f}]s" 0 $w 0 $w 0 $w`
echo -n $x$[f<1?0:1]
rev<<<$x
}|tr 01 \ \*

ลองออนไลน์!

น่ากลัวจริงๆต้องใช้เวลามากขึ้นหรือช่วยในการเล่นกอล์ฟ มันสร้างผลลัพธ์ด้วย 0 1 และทับศัพท์ในที่สุด เข้ารหัสเป็นเลขฐานสิบหกจำนวน 0 และ 1 ดูแลให้เป็นเลขหลักสุดท้าย 0 สำหรับสองแถวแรกเป็นแฟล็กไปยังคอลัมน์กลางเอาต์พุต ใช้ pression ของ printf ไม่ว่าจะเป็นดิจิตหรือสตริงเพื่อเอาท์พุท 0 และ 1 คิดว่า%.$[0x${X}]Cสามารถใช้แพทเทิร์นในการตีกอล์ฟได้

w=`yes 1|head -30|tr -d '\n'`  # w=111111111111111111111111111111   
for i in B1C000 74A120 54C003 36C003 299004 1C0506 0D0506 0D0506 0D0506 1C0506 257505 447342 727161
{ read a b c d e f <<<$(echo $i| fold -1| xargs)
printf "%.$[0x${a}]d
%.$[0x${b}]s
%.$[0x${c}]d
%.$[0x${d}]s
%.$[0x${e}]d
%.$[0x${f}]s" 0 $w 0 $w 0 $w
echo -n $[f<1?0:1]
printf "%.$[0x${f}]s
%.$[0x${e}]d
%.$[0x${d}]s
%.$[0x${c}]d
%.$[0x${b}]s
%.$[0x${a}]d\n" $w 0 $w 0 $w 0 
}|tr 01 \ \*

2

Python 3, 232 197 183 164 bytes

อีกคำตอบหนึ่งของงูหลาม ไม่มีรหัสการบีบอัดที่น่าเบื่อ รหัสการบีบอัดที่น่าตื่นเต้น

for s in map(lambda x:x+x[-2::-1],b".$; *',$' ('.* &).* %,+, $R #T #T #T $R %()8 '')&&( *%)$(&".split()):print(*((u-35)*" "+(v-35)*"*"for u,v in zip(*[iter(s)]*2)))

ฉันใช้เวทย์มนตร์หมายเลข 35 เพราะอย่างนั้นไม่มีตัวควบคุมช่องว่างหรือสิ่งของที่ต้องหลบหนีเกิดขึ้น น่าเศร้าที่ฉันต้องแยกส่วนอวกาศและดวงดาวแยกจากกัน

Ungolfed:

for s in map(lambda x:x+x[-2::-1],   # map a list to the list and itself reversed,
                                     # minus the last (center) element
# magic string:
".$; *',$' ('.* &).* %,+, $R #T #T #T $R %()8 '')&&( *%)$(&"
.split()):                           # split on whitespace to divide into lines
 print(*(                            # unpack generator expression
(ord(s[i])-35)*" "                   # convert character to int, -25, times space
+(ord(s[i+1])-35)*"*"                # same thing with "*"
for i in range(0,len(s)-1,2)))       # for every pair in the list

วิธีการเข้ารหัสนั้นดีกว่าฐาน 36 ฉันหวังว่าคุณจะไม่รังเกียจที่ฉันจะปรับใช้กับโซลูชันล่าสุดของฉัน ;) มีบางสิ่งที่คุณสามารถทำได้เพื่อลดจำนวนไบต์ของคุณ 1คุณสามารถบันทึกไบต์โดยการวางสายเส้นเดียวกับprint 2ถ้าคุณใช้สายคุณสามารถกำจัดสายเหล่านั้นได้ 3คุณสามารถแทนที่ด้วยการซิปผ่านตัววนซ้ำคู่หนึ่ง ต่อไปนี้เป็นตัวกำเนิดที่รวมแนวคิดทั้งสองไว้ด้วยกัน: การเปลี่ยนแปลงเหล่านี้จะทำให้การนับของคุณลดลงเป็น 164forbytesordrange((u-35)*" "+(v-35)*"*"for u,v in zip(*[iter(s)]*2))
PM 2Ring

@ PM2Ring ฉันไม่รังเกียจเลย ไปพักร้อนเป็นเวลาสองสามสัปดาห์ดังนั้นอย่าลังเลที่จะแก้ไขในการเปลี่ยนแปลงของคุณ
L3viathan

โอวตกลง. แต่ฉันจะให้คุณทำเวอร์ชั่นที่ยังไม่ตีกอล์ฟใหม่
PM 2Ring

@ PM2 ได้ขึ้นรถบัสแล้วดังนั้นฉันหวังว่าจะมีคนอื่นเห็นด้วย
L3viathan

2

PowerShell, 305 ไบต์, 307 ไบต์ , 316 ไบต์

[IO.StreamReader]::new(([IO.Compression.GZipStream]::new([IO.MemoryStream]::new(([Convert]::FromBase64String('H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbuHBUsBqAgAA')),0,102),[IO.Compression.CompressionMode]::Decompress))).ReadToEnd()

บางทีคนอื่นอาจช่วยให้ฉันย่อให้สั้นลงได้อีกแม้ว่าฉันจะไม่สามารถหาวิธีได้เว้นแต่จะมีวิธีรัดกุมในการกำหนดตัวเร่งความเร็วแบบกำหนดเองมากขึ้น

แก้ไข: รุ่นย่อ (ขอบคุณ @root) สตริงที่เข้ารหัส (การเข้ารหัสพื้นฐาน 64 ก่อน) สามารถตัดได้ด้วยตำแหน่งอาเรย์แปดตำแหน่งและช่วงสามารถลดลงได้ ไม่แน่ใจว่าทำไม StreamWriter จึงแนะนำ Bloat นี้ใน MemoryStream ความเข้าใจในพฤติกรรมพื้นฐานจะได้รับการชื่นชม

[IO.StreamReader]::new(([IO.Compression.GZipStream]::new([IO.MemoryStream]::new(([Convert]::FromBase64String('H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbg')),0,94),[IO.Compression.CompressionMode]::Decompress))).ReadToEnd()

Ungolfed:

#Read decoded stream 
[IO.StreamReader]::new(
    (
        #Reverse GZip encoding
        [IO.Compression.GZipStream]::new(
            #Load GZip encoded string into a memory stream
            [IO.MemoryStream]::new(
                (
                    # Convert Base64 back to GZip encoded string
                    [Convert]::FromBase64String('H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbuHBUsBqAgAA')
                ),
                #Start of range
                0,
                #End of range. Stick the Memory Stream into a variable and use .Length here for non golf code
                102
            ),
            #Specify that we are decompressing
            [IO.Compression.CompressionMode]::Decompress
        )
    )
).ReadToEnd()

รหัสการบีบอัด:

$s = '           *                         *
       ****          *     *          ****
     ****            *******            ****
   ******            *******            ******
  *********         *********         *********
 ***********************************************
*************************************************
*************************************************
*************************************************
 ***********************************************
  *****       *********************       *****
    ****       ***    *****    ***       ****
       **       *      ***      *       **'

#Create Memory Stream
$ms = [IO.MemoryStream]::new()
#Initialize a stream
$sw = [IO.StreamWriter]::new(
    #Create GZip Compression stream
    [IO.Compression.GZipStream]::new(
        #Reference Memory Stream
        $ms,
        #Set mode to compress
        [IO.Compression.CompressionMode]::Compress
    )
)
#Write input into stream
$sw.Write($s)
#Close the stream
$sw.Close()

#Convert Array to Base64 string
[Convert]::ToBase64String(
    #Retrieve Memory Stream as an array
    ($ms.ToArray() | select -SkipLast 8)
)

1
ทำไมต้อง 102 99 ใช้งานได้เหมือนกัน[IO.StreamReader]::new(([IO.Compression.GZipStream]::new([IO.MemoryStream]::new(([Convert]::FromBase64String('H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbuHBUsBqAgAA')),0,102),[IO.Compression.CompressionMode]::Decompress))).ReadToEnd()
root

@ มันเป็นแบบนั้นฉันเดา แต่ฉันไม่แน่ใจว่าทำไมถึงใช้งานได้ คุณสามารถลดได้แปดถึง 94 และปล่อยอักขระแปดตัวสุดท้ายของสตริงอินพุตที่เข้ารหัส ฉันมีปัญหาในการหาสาเหตุที่ทำให้งานนี้และฉันไม่ต้องการที่จะเพิ่มลงในคำตอบของฉันจนกว่าฉันจะทำ ฟังก์ชั่นการบีบอัดของฉันมีการเพิ่มผิดพลาดในช่องว่างภายนอกหรือไม่?
Chirishman

1
จากโค้ดการบีบอัดของคุณค่าสองค่าสุดท้ายจาก$ms.ToArray()นั้นคือ 0 ทั้งสองจำเป็นหรือไม่
root

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

1
คุณขวามันเป็นมากกว่าเพียงแค่ 2 ตัวอักษรหางก็ 8. สุดท้าย 8 ตำแหน่งในอาร์เรย์สามารถถอดออกมาเพื่อสร้าง('225','193','82','192','106','2','0','0') H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbg==ฉันไม่เข้าใจว่ามาจากไหน
root

2

Perl 5, 168 ไบต์

$_="11 *25 
7 4*10 *5 *10 4
5 4*12 7*12 4
3 6*12 7*12 6
2 9*9 9*9 9
 47
49
49
49
 47
  5*7 21*7 5
4 4*7 3*4 5*4 3*7 4
7 **7 *6 3*6 *7 *";s/$/*/gm;say s/\d+(.)/$1x$&/ger

สังเกตช่องว่างท้ายท้ายบรรทัดแรกเท่านั้น ต้องการ-M5.01ซึ่งฟรี

อาจจะสามารถเล่นกอล์ฟได้มากกว่าเดิม


2

LaTeX, 314 ไบต์

\documentclass{book}\begin{document}\def\r#1#2{\ifnum#2>64#1\r#1{\numexpr#2-1}\fi}\catcode`.13\catcode`!13\catcode`-13\def!#1{\r*{`#1}}\def-#1{\r~{`#1}}\let.\par\tt-K!A-Y!A.-G!D-J!A-E!A-J!D.-E!D-L!G-L!D.-C!F-L!G-L!F.-B!I-I!I-I!I.-A!o.!q.!q.!q.-A!o.-B!E-G!U-G!E.-D!D-G!C-D!E-D!C-G!D.-G!B-G!A-F!C-F!A-G!B\enddocument

รุ่นที่ไม่มีคำอธิบายพร้อมคำอธิบาย:

\documentclass{book}
\begin{document}
% Macro for repeating #1 (#2-64) times
\def\r#1#2{\ifnum#2>64#1\r#1{\numexpr#2-1}\fi}
% Prepare '.', '!' and '-' for usage as macro names
\catcode`.13\catcode`!13\catcode`-13
% The ASCII code of #1 (a character) is used as the number of how often '*' will be printed with \r
\def!#1{\r*{`#1}}
% Same as ! but for spaces
\def-#1{\r~{`#1}}
% . becomes a line break
\let.\par
% Set monospace font
\tt
% And finally print the whole thing
-K!A-Y!A.-G!D-J!A-E!A-J!D.-E!D-L!G-L!D.-C!F-L!G-L!F.-B!I-I!I-I!I.-A!o.
!q.!q.!q.-A!o.-B!E-G!U-G!E.-D!D-G!C-D!E-D!C-G!D.-G!B-G!A-F!C-F!A-G!B
\enddocument

2

C # (.NET Core) , 342 333 328 185 175 ไบต์

_=>{var r="";for(int i=0,j,k=0;i<63;i++)for(j=0;j++<"-#;#4&,#'#,&.&.).&*(.).('+++++%Q#µ#Q%')7)'(&)%&'&%)&-$)#(%(#)$)"[i]-34;){r+=i%2<1?' ':'*';if(++k%49<1)r+='\n';}return r;}

ลองออนไลน์!

จำนวนไบต์ที่บันทึกไว้หลังจากเปลี่ยนวิธีการ การวาดภาพเป็นอาร์เรย์ 2D ฉันคำนวณการเข้ารหัส RLE ด้วยไฟล์:

{ 11, 1, 25, 1, 18, 4, 10, 1, 5, 1, 10, 4, 12, 4, 12, 7, 12, 4, 8, 6, 12, 7, 12, 6, 5, 9, 9, 9, 9, 9, 3, 47, 1, 147, 1, 47, 3, 5, 7, 21, 7, 5, 6, 4, 7, 3, 4, 5, 4, 3, 7, 4, 11, 2, 7, 1, 6, 3, 6, 1, 7, 2, 7 }

ดัชนีคี่หมายถึงs และดัชนียังคงยืนสำหรับ*s จากนั้นฉันแทนทุกหมายเลขเพื่อเป็นตัวแทน ASCII ที่พิมพ์ได้ (รับอักขระ '#' เป็น 1) และฉันได้รับ:

-#;#4&,#'#,&.&.).&*(.).('+++++%Q#µ#Q%')7)'(&)%&'&%)&-$)#(%(#)$)

ดังนั้นอัลกอริทึมเพียงแค่การวาดภาพโดยการคลายสายนี้และเพิ่มขึ้นบรรทัดใหม่ในสถานที่ที่เหมาะสม


1
ไม่จำเป็นต้องตั้งค่าlให้กับตัวแปรเพียงแค่ใช้มันในลูปโดยตรง .ToString(i, 2)-> .ToString(i,2)ie ลบช่องว่างออก
TheLethalCoder

คุณสามารถบันทึกไบต์ด้วยการแสดงทศนิยมหรือทางวิทยาศาสตร์1e10สำหรับตัวเลขเหล่านั้นได้หรือไม่? ความท้าทายนี้มีประโยชน์จริง ๆ ที่นี่
TheLethalCoder

@ TheLethalCoder ไม่ ฉันเพิ่งตรวจสอบ (ความท้าทายที่น่าประทับใจโดยวิธีการ) และฉันใช้ตัวแทนที่เล็กที่สุดแล้วดังนั้นจึงไม่มีโชค ฉันยังพยายามค้นหาตัวหารร่วมที่ยิ่งใหญ่ที่สุดระหว่างพวกเขาเพื่อดูว่าฉันสามารถหารตัวเลขด้วยค่าคงที่ได้หรือไม่ แต่มันชัดเจน 1
Charlie

2

PowerShell , 129 128 ไบต์

-join('5+C+<.4+/+4.6.616.206160/33333-Y+s*t+Y-/1?1/0.1-./.-1.5,1+0-0+1,'|% t*y|%{(' ','*')[$i++%2]*($_-42)})-split'(.{49})'-ne''

ลองออนไลน์!

Ungolfed:

-join(
    '5+C+<.4+/+4.6.616.206160/33333-Y+s*t+Y-/1?1/0.1-./.-1.5,1+0-0+1,'|% toCharArray|%{
        (' ','*')[$i++%2]*($_-42)
    }
)-split'(.{49})'-ne''

เอาท์พุท:

           *                         *           
       ****          *     *          ****       
     ****            *******            ****     
   ******            *******            ******   
  *********         *********         *********  
 *********************************************** 
*************************************************
*************************************************
*************************************************
 *********************************************** 
  *****       *********************       *****  
    ****       ***    *****    ***       ****    
       **       *      ***      *       **

แนวคิดหลักนั้นง่ายมาก

การเข้ารหัสสัญลักษณ์:

  1. ต่อบรรทัดสัญลักษณ์ทั้งหมดให้เป็นหนึ่งสตริง
  2. นับจำนวนช่องว่างและเครื่องหมายดอกจัน
  3. เข้ารหัสความยาวของแต่ละเซกเมนต์ + 42 เป็นอักขระ

การถอดรหัส (สคริปต์นี้):

  1. รับรหัสของถ่านลบ 42 สำหรับถ่านแต่ละตัวจาก cripto-string นี่คือความยาวของกลุ่ม
  2. ผนวกส่วนประกอบด้วยช่องว่างหรือดอกจันซ้ำ Lengthครั้ง
  3. แทรกบรรทัดใหม่แต่ละสัญลักษณ์ 49 เพื่อแยกบรรทัด

บางสิ่งที่ชาญฉลาด

  1. อัลกอริทึมการเข้ารหัสแนะนำสัญลักษณ์ที่มีรหัส 189 เพื่อแสดงบรรทัดดอกจันกลาง 3 บรรทัด สัญลักษณ์นี้ไม่ใช่ ASCII มันทำงานได้ปกติกับสภาพแวดล้อมที่ทันสมัย ​​แต่มีความคลุมเครือที่มีความยาวสคริปต์ ดังนั้นฉันแทนที่ non-ascii-symbol ½เป็นs*t(73 เครื่องหมายดอกจัน, 0 ช่องว่าง, 74 ดอกจัน)
  2. ฉันตัดช่องว่างที่ถูกต้องในบรรทัดสุดท้ายเพื่อบันทึก 1 ไบต์ ขอโทษแบทแมน
  3. ทำไมค่า offset ถึง 42 แค่ต้องการ :) และ cripto-string ดูดี

พิเศษ: Scipt สำหรับการเข้ารหัสของสัญลักษณ์

(@"
           *                         *           
       ****          *     *          ****       
     ****            *******            ****     
   ******            *******            ******   
  *********         *********         *********  
 *********************************************** 
*************************************************
*************************************************
*************************************************
 *********************************************** 
  *****       *********************       *****  
    ****       ***    *****    ***       ****    
       **       *      ***      *       **       
"@ -replace"`n"-split'( +|\*+)'-ne''|%{[char]($_.Length+42)})-join''

1

Mathematica ขนาด 271 ไบต์

T=Table;f[x_]:=""<>T["*",x];m={f@49};n={f@47};g[y_]:=""<>T[" ",y];k[a_,b_,c_,d_,e_]:={(s=f@a<>g@b<>f@c<>g@d<>f@e)<>StringDrop[StringReverse@s,1]};Grid@{k[1,13,0,0,0],k[4,10,1,3,0],k[4,12,0,0,4],k[6,12,0,0,4],k[9,9,0,0,5],n,m,m,m,n,k[5,7,0,0,11],k[4,7,3,4,3],k[2,7,1,6,2]}

1

Braingolf , 590 580 579 577 428 423 312 ไบต์

-111 ไบต์เนื่องจาก LeakyNun เป็นเทพแห่งการเล่นกอล์ฟ

14#
46*6394943[92+.6,5][8]#.[# ]#*[# ]#*#
[# ][#*][# ]#*[# ]#*[# ]#*...#
[# ][#*][# ][#*][# ]#*...#
# ..[#*][# ][#*][# ][#*]#
# .[#*][# ][#*][# ][#*]#
# [#*]#
&@#0[#*]#
!&@!&@# &@#.[#*]"
  "&@4645*643646366556[#*][# ][#*][# ][#*]"
    "[#*][# ]#*..# ...[#*]# ...#*..[# ][#*]#
[# ]#*.[# ]#*[# ]#*..[# ]#*[# ]#*.&@

ลองออนไลน์!

Braingolf ไม่เก่งในงานศิลปะ ASCII แต่ฉันคิดว่าน่าลอง

ไม่มีทางที่ฉันจะอธิบายถึงกลุ่มนี้ ** k


1

/// , 171 166 ไบต์

บันทึก 5 ไบต์เพราะฉันใช้\r\nอยู่ในซอร์ส lol

/-/  //,/!!//'/**//&/*"//%/--//#/,,,,,!*//"/%-//!/''/"% &""" *
" !"%*% &%!
% !""!'&"!
- !*&"!'&"!'
-,&- ,&- ,*
 #'
!#
!#
!#
 #'
-!& ,,!& !*
%!" '*%!*%'& !
" *& &'&& '

ลองออนไลน์!

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

  1. ฉันสามารถหลีกเลี่ยงการใช้เมตาแทน (เช่นการแทรก regexes แบบไดนามิก)
  2. มันจะมีประโยชน์มากกว่าในการแทนที่วัสดุพิมพ์ที่ประหยัดน้อยกว่าก่อน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.