กราฟ Cayley ของ ASCII


26

ในขณะที่ทำวิจัยบางอย่างสำหรับความท้าทายที่แตกต่างกันฉันกำหนด, ฉันมาข้ามกราฟเคย์ลีโดยเฉพาะคนนี้ ตั้งแต่ฉันหนึ่งในด้านบน นักเขียนท้าทายแน่นอนผมจะต้องทำให้ความท้าทายศิลปะ ASCII สำหรับเรื่องนี้

ความท้าทายของคุณคือการสร้างผลงานศิลปะ ASCII ของกราฟ Cayley ของกลุ่มฟรีในเครื่องกำเนิดสองเครื่องดังนี้

                                               +                                               
                                              +++                                              
                                             + | +                                             
                                            ++-+-++                                            
                                             + | +                                             
                                          +    |    +                                          
                                         +++   |   +++                                         
                                        + |    |    | +                                        
                                       ++-+----+----+-++                                       
                                        + |    |    | +                                        
                                         +++   |   +++                                         
                                          +    |    +                                          
                                   +           |           +                                   
                                  +++          |          +++                                  
                                 + | +         |         + | +                                 
                                ++-+-++        |        ++-+-++                                
                                 + | +         |         + | +                                 
                              +    |           |           |    +                              
                             +++   |           |           |   +++                             
                            + |    |           |           |    | +                            
                           ++-+----+-----------+-----------+----+-++                           
                            + |    |           |           |    | +                            
                             +++   |           |           |   +++                             
                              +    |           |           |    +                              
                                 + | +         |         + | +                                 
                                ++-+-++        |        ++-+-++                                
                                 + | +         |         + | +                                 
                    +             +++          |          +++             +                    
                   +++             +           |           +             +++                   
                  + | +                        |                        + | +                  
                 ++-+-++                       |                       ++-+-++                 
                  + | +                        |                        + | +                  
               +    |    +                     |                     +    |    +               
              +++   |   +++                    |                    +++   |   +++              
             + |    |    | +                   |                   + |    |    | +             
            ++-+----+----+-++                  |                  ++-+----+----+-++            
             + |    |    | +                   |                   + |    |    | +             
              +++   |   +++                    |                    +++   |   +++              
               +    |    +                     |                     +    |    +               
        +           |                          |                          |           +        
       +++          |                          |                          |          +++       
      + | +         |                          |                          |         + | +      
     ++-+-++        |                          |                          |        ++-+-++     
      + | +         |                          |                          |         + | +      
   +    |           |                          |                          |           |    +   
  +++   |           |                          |                          |           |   +++  
 + |    |           |                          |                          |           |    | + 
++-+----+-----------+--------------------------+--------------------------+-----------+----+-++
 + |    |           |                          |                          |           |    | + 
  +++   |           |                          |                          |           |   +++  
   +    |           |                          |                          |           |    +   
      + | +         |                          |                          |         + | +      
     ++-+-++        |                          |                          |        ++-+-++     
      + | +         |                          |                          |         + | +      
       +++          |                          |                          |          +++       
        +           |                          |                          |           +        
               +    |    +                     |                     +    |    +               
              +++   |   +++                    |                    +++   |   +++              
             + |    |    | +                   |                   + |    |    | +             
            ++-+----+----+-++                  |                  ++-+----+----+-++            
             + |    |    | +                   |                   + |    |    | +             
              +++   |   +++                    |                    +++   |   +++              
               +    |    +                     |                     +    |    +               
                  + | +                        |                        + | +                  
                 ++-+-++                       |                       ++-+-++                 
                  + | +                        |                        + | +                  
                   +++             +           |           +             +++                   
                    +             +++          |          +++             +                    
                                 + | +         |         + | +                                 
                                ++-+-++        |        ++-+-++                                
                                 + | +         |         + | +                                 
                              +    |           |           |    +                              
                             +++   |           |           |   +++                             
                            + |    |           |           |    | +                            
                           ++-+----+-----------+-----------+----+-++                           
                            + |    |           |           |    | +                            
                             +++   |           |           |   +++                             
                              +    |           |           |    +                              
                                 + | +         |         + | +                                 
                                ++-+-++        |        ++-+-++                                
                                 + | +         |         + | +                                 
                                  +++          |          +++                                  
                                   +           |           +                                   
                                          +    |    +                                          
                                         +++   |   +++                                         
                                        + |    |    | +                                        
                                       ++-+----+----+-++                                       
                                        + |    |    | +                                        
                                         +++   |   +++                                         
                                          +    |    +                                          
                                             + | +                                             
                                            ++-+-++                                            
                                             + | +                                             
                                              +++                                              
                                               +                                               

อินพุต

ไม่มีการป้อนข้อมูลยกเว้นว่าภาษาของคุณต้องการให้ป้อนข้อมูลอย่างชัดเจน

เอาท์พุต

การแทนค่า ASCII art ที่แสดงด้านบน

Hash MD5

เนื่องจากนี่เป็นเอาต์พุตที่ค่อนข้างใหญ่ในการตรวจสอบงานของคุณที่นี่มีแฮช MD5 บางตัวอย่างของรูปแบบเอาต์พุต (ทั้งหมดเป็น UTF-8 ที่ไม่มี BOM):

  • การเว้นวรรคสี่เหลี่ยมจัตุรัสการCR/LFป้อนบรรทัดและการขึ้นบรรทัดใหม่954B93871DAAE7A9C05CCDF79B00BF3C- นี่คือตัวแทนที่ใช้ด้านบน
  • ช่องว่างภายในช่องสี่เหลี่ยม, CR/LFlinefeeds, ไม่มีการขึ้นบรรทัดใหม่ -28405EF91DA305C406BD03F9275A175C
  • ช่องว่างภายในช่องว่างการLFป้อนบรรทัดและการขึ้นบรรทัดใหม่ -8CA65FB455DA7EE5A4C10F25CBD49D7E
  • ช่องว่างภายในช่องสี่เหลี่ยม, LFlinefeeds, ไม่มีการขึ้นบรรทัดใหม่ -FDB1547D68023281BB60DBEC82C8D281
  • ไม่มีช่องว่างต่อท้ายCR/LFlinefeeds และขึ้นบรรทัดใหม่ -77FDE8CE5D7BD1BDD47610BA23264A19
  • ไม่มีช่องว่างต่อท้ายCR/LFlinefeeds ไม่มีการขึ้นบรรทัดใหม่ -EAD390C3EFD37F0FCACE55A84B793AB5
  • ไม่มีช่องว่างต่อท้ายLFlinefeeds และขึ้นบรรทัดใหม่ -1F6CAB740F87881EB2E65BED65D08C36
  • ไม่มีช่องว่างต่อท้ายLFlinefeeds ไม่มีการขึ้นบรรทัดใหม่ -7D41CE1E637619FEA9515D090BFA2E9C
  • หากมี MD5 เพิ่มเติมที่คุณต้องการเปรียบเทียบโปรดแจ้งให้เราทราบและฉันจะสร้างและอัปเดตความท้าทาย

กฎระเบียบ

  • ขึ้นบรรทัดใหม่หรือต่อท้ายช่องว่างหรือช่องว่างทั้งหมดเป็นตัวเลือกตราบใดที่ตัวละครตัวเองเข้าแถวอย่างถูกต้อง
  • ยอมรับได้ทั้งโปรแกรมหรือฟังก์ชั่น หากฟังก์ชั่นคุณสามารถส่งคืนผลลัพธ์มากกว่าการพิมพ์
  • หากเป็นไปได้โปรดใส่ลิงค์ไปยังสภาพแวดล้อมการทดสอบออนไลน์เพื่อให้ผู้อื่นสามารถลองใช้รหัสของคุณได้!
  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • นี่คือเพื่อให้ใช้กฎการเล่นกอล์ฟตามปกติทั้งหมดและรหัสที่สั้นที่สุด (เป็นไบต์) ชนะ

ฉันประหลาดใจเล็กน้อยที่นี่ไม่ได้ทำให้เสียชื่อ แต่อย่างใด - ดูเหมือนว่าควรเป็นลำดับที่หกในลำดับ
Neil

นี้ท้าทายความโกลาหลกอล์ฟจะคล้ายกันมาก
DJMcMayhem

@ Neil ฉันพิจารณาแล้วทำ แต่ตัดสินใจต่อต้านเพราะกลัวว่ามันจะเพิ่มความยากลำบากมากเกินไปเพื่อให้ได้รับเพียงเล็กน้อย
AdmBorkBork

ดูเหมือนว่าการวิ่งของ-/ |s จะเป็นไปตามสูตร(2<<n)-n-2แทนที่จะ(1<<n)-1เป็นสิ่งที่ฉันคาดเดาได้
Neil

@ Neil พวกเขาเป็นตัวเลขของออยเลอเรเนี่ยนเพราะมันให้ความสวยงามที่สุด
AdmBorkBork

คำตอบ:


9

JavaScript (ES6), 204 195 188 180 ไบต์

f=
_=>[...Array(9119)].map((_,i)=>~i%96?g(48+~(i/96),47-i%96,5):`
`,g=(x,y,z,n=(1<<z)-z)=>x|y?(x=x<0?-x:x)+(y=y<0?-y:y)<n?` |-+`[2*!x+!y]:z--?x>y?g(x-n,y,z):g(x,y-n,z):` `:`+`).join``
;document.write(`<pre>`+f())

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

f=
m=>[...Array((w=(4<<m)-m*-~m-2)*~-w)].map((_,i)=>~i%w?g(w/2+~(i/w),w/2-i%w-1,m):`
`,g=(x,y,z,n=(1<<z)-z)=>x|y?(x=x<0?-x:x)+(y=y<0?-y:y)<n?` |-+`[2*!x+!y]:z--?x>y?g(x-n,y,z):g(x,y-n,z):` `:`+`).join``
<input type=number min=0 oninput=o.textContent=f(this.value)><pre id=o>+

Parametrised เวอร์ชันสำหรับ222 216 207 199 ไบต์ คำอธิบาย: ขนาดเอาต์พุตคืออักขระ 9119 ASCII รวมถึง 46 บรรทัดใหม่ (สำหรับรุ่นที่กำหนดพารามิเตอร์ขนาดเอาท์พุทจะถูกคำนวณรวมถึงการขึ้นบรรทัดใหม่) แต่ละอักขระจะถูกกำหนดเป็นรายบุคคลอันดับแรกโดยการตรวจสอบว่ามีการขึ้นบรรทัดใหม่หรือไม่โดยการเรียกฟังก์ชันบนพิกัดที่สัมพันธ์กับจุดเริ่มต้นตรงกลาง แผนภาพ ฟังก์ชั่นตรวจสอบจุดซ้ำกับไม้กางเขนที่ใกล้ที่สุดของแต่ละขนาดจนถึงจุดและส่งกลับอักขระที่เหมาะสมโดยขึ้นอยู่กับว่าจุดนั้นถูกค้นพบว่าอยู่ตรงกลางหรือแกนของไม้กางเขน


7

Röda , 284 280 238 234 ไบต์

{a=[1,-1]t=[]seq 1,95|t+=[" "]*95,_
f={|x,y,i,d|{s=[27,12,5,2,1][i]i++
a|{|j|{seq y,y+s*j|t[_][x]="|"f x,y+s*j,i,2-j}if[d!=2+j]}_
a|{|j|{seq x,x+s*j|t[y][_]="-"f x+s*j,y,i,3-j}if[d!=3+j]}_}if[i<5]
t[y][x]="+"}f 47,47,0,0
t|print _&""}

ลองออนไลน์!

นี่คือฟังก์ชั่นที่ไม่ระบุชื่อ ฉันใช้บรรทัดใหม่แทนเซมิโคลอนดังนั้นจึงจัดรูปแบบได้ดีมาก!

ฟังก์ชันเรียกซ้ำfสร้างกราฟในอาร์เรย์สองมิติtซึ่งจะถูกพิมพ์ที่บรรทัดสุดท้าย

ฉันไม่พบวิธีการคำนวณ27,12,5,2,1ในไม่กี่ไบต์ดังนั้นจึงมีการเข้ารหัสยาก


ไม่มีวิธีคำนวณพลังของ 2 หรือไม่?
Neil

@Neil มีb_shiftlตัวดำเนินการอยู่ แต่ฉันคิดว่ามันใช้เวลานานเกินไป
fergusq

มีเพียงสิ่งเดียวที่ฉันคิดได้ว่าอาจเป็นเบส -3 Dunno ความดีของ Roda คือการแปลงฐานแม้ว่า ... 10000110001200020001-> 1168671727สงสัยว่าคุณสามารถแปลงและแยกได้น้อยกว่า 2 ไบต์แม้ว่าจะเป็น ...
Magic Octopus Urn

3

ถ่าน , 50 43 ไบต์

F³²⁴«P++↷AE…¹¦⁵∧¬﹪ιX³κ⁻X²⁺κ¹⁺κ²εF⁺ε⮌ε¿κ«+κ↶

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

NβF×⁴X³β«P++↷AE…·¹β∧¬﹪ιX³κ⁻X²⁺κ¹⁺κ²εF⁺ε⮌ε¿κ«+κ↶

แก้ไข: ฉันได้ทำมาตั้งแต่วิธีการใช้RotateShutterOverlapเพื่อให้งานนี้สำเร็จ แต่มันน่ารำคาญที่ฉันใช้เวลา 44 ไบต์:

A⁰ηF⁶«AηγA⁻⁺X²ιηιηJη⁰P-γ+¿γ⟲SO²⁶⁻×²γ¹»‖⟲SO⁹⁵

หากRotateShutterOverlapยอมรับการหมุนตัวแปรจำนวนเต็มนั่นจะลดลงเป็น 40 ไบต์:

A⁰ηF⁶«A∨η¹γA⁻⁺X²ιηιηJη⁰P+γ+⟲SO⎇‹ι⁵Lβ²⁴⁶γ

ตามที่เป็นอยู่การใช้พารามิเตอร์รายการการหมุนจะใช้เวลา 45 ไบต์:

A⁰ηF⁶«A∨η¹γA⁻⁺X²ιηιηJη⁰P+γ+⟲SO⟦⁶ײ⁺¹⁼⁵ι⟧⁻ײγ¹

รู้สึกเหมือนโกงฉัน : P
HyperNeutrino

@HyperNeutrino รุ่น hardcoded น้อยลงเล็กน้อยลองออนไลน์! หรือนั่นไม่ใช่สิ่งที่คุณหมายถึง?
Neil

: PI หมายความว่านี่สั้นเกินไปและง่ายเกินไปสำหรับ Charcoal: P
HyperNeutrino

@Neil: O มันน่าทึ่งมาก! ฉันสงสัยว่าคุณสามารถยกตัวอย่างการสะท้อน / การหมุนของรถบั๊กกี้ได้หรือไม่ดังนั้นฉันจึงสามารถแก้ไขได้
ASCII- เท่านั้น

@ ASCII-only ในกรณีที่มีการสะท้อนบั๊กกี้ฉันคิดว่ามีการสะท้อนแนวทแยงเพียงอันเดียวที่ทำงานได้ แต่ฉันจำไม่ได้ว่าอันไหน ฉันคิดว่าข้อผิดพลาดเป็นตัวแปรที่ไม่ได้กำหนด (อาจเป็น copypasta มากเกินไป)
Neil

2

05AB1E , 620 ไบต์

•1dOœ˜‘Av–Qs†ƒFã&äuÌʹÝ2býádÙI’´Ëœ¼)Y»+™ß›[Vg“Ò¢Jù1no<V<*Ét*-¢&â-ßBÆ×090`11-øsµ–¶1VÛ==ü:¼÷ØûÍZ„æ¹=#ùÞV«¡fä&Έ'ëˆÝ=ä^‰¤?Êçù!ØèØr-3îÛ+êò‚û¢½°BéG¦U”Ü1žˆr6S‹“ŽKRK°A¹ª¿â9]}×u¬]ž„Îï›V¦Â¶4Ãï¢v£×é´Ü2Äžiqô>§17F*ÎañníÆ4]s8mÏ›HSÏ771í´‰d3´Þ|À]Uà{þñýqø’e„XÿF4–:Yl&uqžÍÒÿ¾u9¤jóHP‰çêoÒNŠX-°xpÒÿ*ejÏD0Ë+GnÊ-/§3ÜJÙˆƒÌ=ŒÒOX‰|O%wæ[n‹ã4)ôF+~´Ö{aÄ$(Þí¼”÷u–qÿBòfÂíÜìTó–xÝwû¾])<§O«\‚e°‡¾‹K…ZDPô;µ!ò&Ô¼¨1gŠ—Ÿ¦©zW¢¾×4K±ÔÄ_ìûÄ‚3¶Ñ>‚bùn±œ×)ÙCâRö裶”ˆ1ßÑֱͮ[ZéRïyÓxÓE¨cW˜{Ã’ùoE›¥ÚvA¨‹êÆýÑY½RÎ5´‘Ê™uåÄr"ãYð÷I!0¤)å‡ëž”>úèWò}é€@.ØñÈQ€ñ{Á„‘Ü’‰~Çñ=…|“ڃĬcóÇkþÛÇ–š;{¡¦½ÕrÎé–àTz€Kì2à^|¢èˆÎxž“å$œ2ô»EidœþFrSS¥ÝÜ—X¡á~îþQ˜NÜGñ¥Q)aè•4B"1230"" +-|"‡48ôû€û»

ลองออนไลน์!

ทั้งหมดที่ฉันทำคือตัดรูปแบบเป็นสี่แปลงสัญลักษณ์เป็นเบส -4 บีบอัด 1/4 ของแพทเทิร์นเป็นเบส -214 แล้วพลิกมันข้ามเส้นสมมาตร ฉันกำลังทำงานกับบางสิ่งที่ฉลาดกว่าโดยใช้อัลกอริทึมจริง แต่จนกว่าฉันจะเสร็จสิ้นสิ่งนี้จะเป็นสิ่งที่ฉันต้องการ


4
นั่นคือ05AB1Eคำตอบที่ใหญ่ที่สุดที่ฉันเคยเห็น xD ปกติแล้วจะใกล้เคียงกับ 6.20 แทนที่จะเป็น 620 พร้อมคำตอบในภาษานี้ ;)
Kevin Cruijssen

@KevinCruijssen หากมีการถามซ้ำ 4 มันน่าจะเล็กกว่านี้ฮ่าฮ่า ยังคงทำงานกับอัลกอริทึมจริงใน 05AB1E ... หนักกว่าที่ฉันคิด
Magic Octopus Urn

2

Python 3, 264 ไบต์

def F(g,p,d,k):
 for c in'-|'[d.real!=0]*(2**k-k-1):g[p]=c;p+=d
 P(g,p,k-1)
def P(g,p,k):
 if'+'==g.setdefault(p,'+')and k:
  for d in[1,1j,-1,-1j]:F(g,p+d,d,k)
g={}
P(g,0j,5)
print('\n'.join(''.join(g.get(r+c*1j,' ')for c in range(-47,48))for r in range(-47,48)))

ใช้ฟังก์ชั่นแบบเรียกซ้ำร่วมกัน F วาดเส้นและ P แทรกเครื่องหมาย '+' สามารถเล่นกอล์ฟได้มากขึ้น แต่ไม่สามารถทำได้ในขณะนี้


1

C, 236 ไบต์

char t[95][95],i=95;f(x,y,s,n,m){if(t[y][x]<33){m=~s+(1<<s);for(n=~m;n++<m;)t[y][x+n]='-',t[y+n][x]=n==0?'+':'|';if(s--)f(x+n,y,s),f(x-n,y,s),f(x,y+n,s),f(x,y-n,s);}}main(){memset(t,32,9025);f(47,47,5);while(i--)printf("%.95s\n",t[i]);}

เพียงสร้างตารางตัวละครซ้ำก่อนที่จะแสดง

ลองออนไลน์!

ขอบคุณ @Neil ที่ทำให้ฉันตระหนักว่าความยาวของกิ่งก้านเป็นไปตามกฎที่เกิดขึ้นจริง

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