ASCII Cayley Graph

26

Saat melakukan riset untuk tantangan berbeda yang saya rumuskan, saya menemukan grafik Cayley , khususnya yang ini . Karena saya salah satu penulis tantangan , tentu saja saya harus membuat tantangan seni ASCII untuk ini.

Tantangan Anda adalah untuk menghasilkan penggambaran seni ASCII ini dari grafik Cayley dari kelompok bebas pada dua generator sebagai berikut:

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

Memasukkan

Tanpa input, kecuali bahasa Anda secara eksplisit membutuhkan input untuk dijalankan.

Keluaran

Representasi seni ASCII ditunjukkan di atas.

MD5 Hash

Karena ini adalah keluaran yang cukup besar, untuk memeriksa pekerjaan Anda di sini ada beberapa hash MD5 dari contoh bentuk keluaran (semuanya UTF-8 tanpa BOM):

  • Padding ruang persegi, CR/LFlinefeed, dan trailing newline - 954B93871DAAE7A9C05CCDF79B00BF3C- ini adalah representasi yang digunakan di atas.
  • Padding ruang persegi, CR/LFumpan garis, tidak ada baris baru tertinggal -28405EF91DA305C406BD03F9275A175C
  • Padding ruang persegi, LFumpan garis, dan baris baru tertinggal -8CA65FB455DA7EE5A4C10F25CBD49D7E
  • Padding ruang persegi, LFumpan garis, tidak ada baris baru tertinggal -FDB1547D68023281BB60DBEC82C8D281
  • Tidak ada spasi tambahan, CR/LFumpan baris, dan tambahan baris baru -77FDE8CE5D7BD1BDD47610BA23264A19
  • Tidak ada spasi tambahan, CR/LFumpan baris, tidak ada tambahan baris baru -EAD390C3EFD37F0FCACE55A84B793AB5
  • Tidak ada spasi tambahan, LFumpan baris, dan tambahan baris baru -1F6CAB740F87881EB2E65BED65D08C36
  • Tidak ada spasi tambahan, LFumpan baris, tidak ada tambahan baris baru -7D41CE1E637619FEA9515D090BFA2E9C
  • Jika ada MD5 tambahan yang ingin Anda perbandingan, beri tahu saya dan saya akan membuatnya dan memperbarui tantangan.

Aturan

  • Leading atau trailing newlines atau whitespace semuanya opsional, asalkan karakternya berbaris dengan benar.
  • Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
  • Jika memungkinkan, harap sertakan tautan ke lingkungan pengujian online agar orang lain dapat mencoba kode Anda!
  • Celah standar dilarang.
  • Ini adalah sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
AdmBorkBork
sumber
Saya sedikit terkejut ini tidak parametris dengan cara apapun - sepertinya itu harus menjadi urutan keenam.
Neil
Ini tantangan golf anarki sangat mirip.
DJMcMayhem
@Neil saya telah mempertimbangkan untuk melakukannya, tetapi memutuskan untuk tidak melakukannya karena takut akan meningkatkan kesulitan terlalu banyak untuk keuntungan kecil.
AdmBorkBork
Sepertinya menjalankan -/ |s mengikuti rumus (2<<n)-n-2daripada (1<<n)-1yang merupakan dugaan asli saya.
Neil
@ Neil Mereka sebenarnya nomor Euler , karena itu memberikan estetika terbaik.
AdmBorkBork

Jawaban:

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

Square space padding, LF linefeeds, dan tidak ada baris baru, meskipun saya belum memeriksa 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>+

Versi parameter untuk 222 216 207 199 byte. Penjelasan: Ukuran output adalah 9119 karakter ASCII, termasuk 46 baris baru. (Untuk versi parametris, ukuran output dihitung termasuk baris baru.) Setiap karakter ditentukan secara individual, pertama dengan memeriksa apakah baris baru jatuh tempo, sebaliknya dengan memanggil fungsi pada koordinat relatif terhadap asal di tengah final diagram. Fungsi ini secara rekursif memeriksa titik terhadap persilangan terdekat dari masing-masing ukuran ke titik, dan mengembalikan karakter yang sesuai tergantung pada apakah titik tersebut ditemukan terletak di tengah atau sumbu salib.

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

Cobalah online!

Ini adalah fungsi anonim. Saya menggunakan baris baru alih-alih titik koma sehingga diformat dengan sangat baik!

Fungsi rekursif fmembuat grafik dalam array dua dimensi t, yang kemudian dicetak pada baris terakhir.

Saya tidak menemukan cara untuk menghitung 27,12,5,2,1dalam beberapa byte, jadi mereka hard-coded.

fergusq
sumber
Apakah tidak ada cara untuk menghitung kekuatan 2?
Neil
@Neil b_shiftlOperator ada, tapi terlalu lama untuk digunakan dalam program ini, saya pikir.
fergusq
Satu-satunya hal yang dapat saya pikirkan adalah mungkin base-3? Entah seberapa bagus Roda di konversi basis ... 10000110001200020001-> 1168671727ragu Anda dapat mengonversi dan membagi dengan kurang dari 2 byte meskipun heh ...
Magic Octopus Mm
3

Arang , 50 43 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Saya awalnya mencoba berbagai refleksi dan rotasi tetapi mereka tidak melakukan apa yang saya inginkan atau dalam beberapa kasus kereta. Saya kemudian mencoba pendekatan loop bersarang tetapi saya sekarang telah beralih ke metode iteratif ini yang bekerja dengan menggambar sejumlah garis di antara setiap salib batin tergantung pada berapa banyak kekuatan dari 3 nomor langkah yang dapat dibagi. Bahkan dapat dengan mudah dimodifikasi untuk menerima parameter ukuran dengan biaya hanya 4 byte:

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

Sunting: Saya telah menemukan cara menggunakannya RotateShutterOverlapuntuk mencapai tugas ini, tetapi yang mengganggu saya butuh 44 byte:

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

Jika RotateShutterOverlapmenerima integer rotasi variabel, itu akan menguranginya menjadi 40 byte:

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

Karena itu, menggunakan parameter daftar rotasi membutuhkan 45 byte:

A⁰ηF⁶«A∨η¹γA⁻⁺X²ιηιηJη⁰P+γ+⟲SO⟦⁶ײ⁺¹⁼⁵ι⟧⁻ײγ¹
Neil
sumber
Ini terasa selingkuh bagiku. : P
HyperNeutrino
@HyperNeutrino Versi yang sedikit lebih sulit: Coba online! Atau bukankah itu yang Anda maksud?
Neil
: PI berarti ini terlalu pendek dan terlalu mudah untuk Arang: P
HyperNeutrino
@Neil: O Ini luar biasa! Saya ingin tahu apakah Anda dapat memberikan contoh refleksi / rotasi buggy sehingga saya dapat memperbaikinya
ASCII-hanya
@ Hanya ASCII Dalam hal refleksi kereta, saya pikir hanya satu dari refleksi diagonal yang berfungsi, tetapi saya tidak ingat yang mana. Saya pikir kesalahan adalah variabel yang tidak terdefinisi (mungkin copypasta terlalu banyak).
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ôû€û»

Cobalah online!

Yang saya lakukan adalah memotong pola menjadi empat, mengubah simbol menjadi basis-4, mengkompresi 1/4 dari pola menjadi basis-214 dan kemudian membalikkannya di atas garis simetri. Saya sedang mengerjakan sesuatu yang lebih pintar menggunakan algoritma yang sebenarnya, tetapi sampai saya selesai bahwa inilah yang akan ada di sini untuk saya.

Guci Gurita Ajaib
sumber
4
Sejauh ini 05AB1Ejawaban terbesar yang saya lihat. xD Biasanya mendekati 6.20 bukannya 620 dengan jawaban dalam bahasa ini. ;)
Kevin Cruijssen
@KevinCruijssen jika ia meminta iterasi 4 itu akan menjadi jauh lebih kecil haha. Masih bekerja pada algoritma yang sebenarnya di 05AB1E ... Agak lebih sulit dari yang saya kira.
Magic Octopus 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)))

Menggunakan sepasang fungsi yang saling rekursif. F menggambar garis dan P menyisipkan tanda '+'. Dapat bermain golf lebih banyak, tetapi kehabisan waktu untuk saat ini.

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

Hanya membangun tabel karakter secara rekursif sebelum menampilkannya.

Cobalah online!

Terima kasih @Neil untuk membuat saya menyadari bahwa panjang cabang mengikuti aturan yang sebenarnya.

redup
sumber