Đồ thị ASCII Cayley


26

Trong khi thực hiện một số nghiên cứu cho một thử thách khác mà tôi đang thực hiện, tôi đã bắt gặp một biểu đồ của Cayley , cụ thể là biểu đồ này . Vì tôi là một trong những nhà văn thách thức hàng đầu , tất nhiên tôi phải thực hiện một thử thách nghệ thuật ASCII cho việc này.

Thách thức của bạn là tạo ra mô tả nghệ thuật ASCII này về đồ thị Cayley của nhóm miễn phí trên hai máy phát như sau:

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

Đầu vào

Không có đầu vào, trừ khi ngôn ngữ của bạn rõ ràng yêu cầu đầu vào để chạy.

Đầu ra

Các đại diện nghệ thuật ASCII hiển thị ở trên.

Băm MD5

Vì đây là một đầu ra khá lớn, để kiểm tra công việc của bạn ở đây là một số băm MD5 của các dạng đầu ra mẫu (tất cả đều là UTF-8 không có BOM):

  • Đệm không gian vuông CR/LF, nguồn cấp dữ liệu và dòng mới theo dõi - 954B93871DAAE7A9C05CCDF79B00BF3C- đây là đại diện được sử dụng ở trên.
  • Đệm không gian vuông, đường dẫn CR/LF, không có đường dẫn mới -28405EF91DA305C406BD03F9275A175C
  • Đệm không gian hình vuông LF, nguồn cấp dữ liệu và dòng mới8CA65FB455DA7EE5A4C10F25CBD49D7E
  • Đệm không gian vuông, đường dẫn LF, không có đường dẫn mới -FDB1547D68023281BB60DBEC82C8D281
  • Không có dấu cách CR/LF, nguồn cấp dữ liệu và dòng mới77FDE8CE5D7BD1BDD47610BA23264A19
  • Không có dấu cách, CR/LFdấu vết dòng, không có dòng mớiEAD390C3EFD37F0FCACE55A84B793AB5
  • Không có dấu cách LF, nguồn cấp dữ liệu và dòng mới1F6CAB740F87881EB2E65BED65D08C36
  • Không có dấu cách, LFdấu vết dòng, không có dòng mới7D41CE1E637619FEA9515D090BFA2E9C
  • Nếu có một MD5 bổ sung mà bạn muốn so sánh, vui lòng cho tôi biết và tôi sẽ tạo nó và cập nhật thử thách.

Quy tắc

  • Các dòng mới hoặc dấu cách hàng đầu hoặc dấu trắng đều là tùy chọn, miễn là bản thân các ký tự xếp hàng chính xác.
  • Một chương trình đầy đủ hoặc một chức năng được chấp nhận. Nếu một chức năng, bạn có thể trả lại đầu ra thay vì in nó.
  • Nếu có thể, vui lòng bao gồm một liên kết đến một môi trường thử nghiệm trực tuyến để người khác có thể thử mã của bạn!
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là vì vậy tất cả các quy tắc chơi gôn thông thường đều được áp dụng và mã ngắn nhất (tính bằng byte) sẽ thắng.

Tôi hơi ngạc nhiên khi điều này không được tham số hóa theo bất kỳ cách nào - có vẻ như nó sẽ là thứ sáu trong chuỗi.
Neil


@Neil Tôi đã cân nhắc làm như vậy, nhưng quyết định chống lại nó vì sợ rằng nó sẽ tăng độ khó quá nhiều cho ít lợi ích.
AdmBorkBork

Có vẻ như các lần chạy -/ |s tuân theo công thức (2<<n)-n-2chứ không phải (1<<n)-1là dự đoán ban đầu của tôi.
Neil

@Neil Chúng thực sự là những con số Euler , vì điều đó mang lại tính thẩm mỹ tốt nhất.
admBorkBork 14/03/2017

Câu trả lời:


9

JavaScript (ES6), 204 195 188 180 byte

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

Đệm không gian hình vuông, nguồn cấp dữ liệu LF không có dòng mới nào, mặc dù tôi chưa kiểm tra 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>+

Phiên bản tham số cho 222 216 207 199 byte. Giải thích: Kích thước đầu ra là 9119 ký tự ASCII, bao gồm 46 dòng mới. (Đối với phiên bản tham số hóa, kích thước đầu ra được tính bao gồm cả dòng mới theo dõi.) Mỗi ​​ký tự được xác định riêng lẻ, trước tiên bằng cách kiểm tra xem một dòng mới có phải hay không, bằng cách gọi một hàm trên tọa độ so với gốc ở giữa cuối cùng sơ đồ. Hàm kiểm tra đệ quy điểm so với các đường chéo gần nhất của từng kích thước đến điểm đó và trả về ký tự phù hợp tùy thuộc vào việc điểm được phát hiện nằm trên tâm hoặc trục của đường chéo.


7

Röda , 284 280 238 234 byte

{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 _&""}

Hãy thử trực tuyến!

Đây là một chức năng ẩn danh. Tôi đã sử dụng dòng mới thay vì dấu chấm phẩy nên nó được định dạng rất độc đáo!

Hàm đệ quy ftạo biểu đồ trong một mảng hai chiều t, sau đó được in ở dòng cuối cùng.

Tôi đã không tìm ra cách tính 27,12,5,2,1theo vài byte, vì vậy chúng được mã hóa cứng.


Có cách nào để tính lũy thừa 2 không?
Neil

@Neil Một b_shiftltoán tử tồn tại, nhưng nó quá dài để được sử dụng trong chương trình này, tôi nghĩ vậy.
fergusq

Điều duy nhất tôi có thể nghĩ là có lẽ cơ sở 3? Mặc dù Roda hoạt động tốt như thế nào khi chuyển đổi cơ sở mặc dù ... 10000110001200020001-> 1168671727nghi ngờ bạn có thể chuyển đổi và phân tách với ít hơn 2 byte mặc dù ...
Magic Octopus Urn

3

Than , 50 43 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Ban đầu tôi đã thử các phản xạ và xoay khác nhau nhưng chúng không làm được điều tôi muốn hoặc trong một số trường hợp là lỗi. Sau đó, tôi đã thử một cách tiếp cận vòng lặp lồng nhau nhưng giờ tôi đã chuyển sang phương pháp lặp này hoạt động bằng cách vẽ một số dòng giữa mỗi chữ thập bên trong tùy thuộc vào số lượng của 3 số bước chia hết. Nó thậm chí có thể dễ dàng sửa đổi để chấp nhận tham số kích thước với chi phí chỉ 4 byte:

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

Chỉnh sửa: Tôi đã tìm ra cách sử dụng RotateShutterOverlapđể đạt được nhiệm vụ này, nhưng thật khó chịu, tôi phải mất 44 byte:

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

Nếu RotateShutterOverlapđược chấp nhận một số nguyên xoay biến, điều đó sẽ giảm xuống còn 40 byte:

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

Như vậy, sử dụng tham số danh sách xoay vòng cần 45 byte:

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

Điều này cảm thấy như lừa dối tôi. : P
HyperNeutrino

@HyperNeutrino Phiên bản ít mã hóa hơn: Hãy thử trực tuyến! Hay đó không phải là ý bạn?
Neil

: PI có nghĩa là điều này quá ngắn và quá dễ dàng đối với
Char

@Neil: O Điều này thật tuyệt vời! Tôi tự hỏi liệu bạn có thể đưa ra một ví dụ về phản xạ / xoay vòng lỗi để tôi có thể khắc phục nó không
ASCII chỉ

@ Chỉ ASCII Trong trường hợp phản xạ có lỗi, tôi nghĩ chỉ có một trong số các phản xạ chéo đang hoạt động, nhưng tôi không thể nhớ được. Tôi nghĩ rằng lỗi là một biến không xác định (có thể là quá nhiều copypasta).
Neil

2

05AB1E , 620 byte

•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ôû€û»

Hãy thử trực tuyến!

Tất cả những gì tôi đã làm là cắt mẫu thành phần tư, chuyển đổi các ký hiệu thành cơ sở 4, nén 1/4 mẫu thành cơ sở-214 và sau đó lật nó qua các đường đối xứng. Tôi đang làm việc trên một cái gì đó thông minh hơn bằng cách sử dụng thuật toán thực tế, nhưng cho đến khi tôi hoàn thành rằng đây là thứ sẽ ở đây cho tôi.


4
Đó là 05AB1Ecâu trả lời lớn nhất tôi từng thấy. xD Thông thường, nó gần bằng 6,20 thay vì 620 với câu trả lời bằng ngôn ngữ này. ;)
Kevin Cruijssen

@KevinCruijssen nếu nó yêu cầu lặp lại 4 thì nó sẽ nhỏ hơn nhiều haha. Vẫn làm việc với thuật toán thực tế trong 05AB1E ... Khó hơn tôi nghĩ.
Bạch tuộc ma thuật Urn

2

Python 3, 264 byte

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

Sử dụng một cặp hàm đệ quy lẫn nhau. F vẽ các dòng và P chèn '+' s. Có thể được chơi golf nhiều hơn, nhưng hết thời gian bây giờ.


1

C, 236 byte

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

Chỉ cần xây dựng bảng nhân vật đệ quy trước khi hiển thị nó.

Hãy thử trực tuyến!

Cảm ơn @Neil vì đã khiến tôi nhận ra rằng độ dài của các nhánh tuân theo quy tắc thực tế.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.