ASCII Cayley Grafiği


26

Formüle ettiğim farklı bir zorluk için biraz araştırma yaparken , özellikle bunun gibi bir Cayley grafiğiyle karşılaştım . İlk mücadelesinde başarılı yazarlardan biri olduğum için , elbette bunun için bir ASCII sanat mücadelesi yapmak zorunda kaldım.

Buradaki zorluk, serbest gruba ait bir Cayley grafiğinin bu ASCII sanat tasvirini iki jeneratör üzerinde üretmektir:

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

Giriş

Diliniz açıkça çalıştırmak için giriş gerektirmediği sürece giriş yok.

Çıktı

Yukarıda gösterilen ASCII sanat temsili.

Md5 hash

Bu oldukça büyük bir çıktı olduğundan, işinizi kontrol etmek için örnek çıktı biçimlerinin bazı MD5 karma değerleridir (hepsi ürün reçetesiz UTF-8'dir):

  • Kare boşluk doldurma, CR/LFsatır beslemeleri ve izleyen satırsonu - 954B93871DAAE7A9C05CCDF79B00BF3C- yukarıda kullanılan gösterimdir.
  • Kare boşluk doldurma, CR/LFsatır besleme, takip eden yeni satır yok -28405EF91DA305C406BD03F9275A175C
  • Kare boşluk doldurma, LFsatır beslemeleri ve izleyen yeni satır -8CA65FB455DA7EE5A4C10F25CBD49D7E
  • Kare boşluk doldurma, LFsatır besleme, takip eden yeni satır yok -FDB1547D68023281BB60DBEC82C8D281
  • Sonda boşluk, CR/LFsatır besleme ve sondaki satır yok -77FDE8CE5D7BD1BDD47610BA23264A19
  • Sonda boşluk yok, CR/LFsatır beslemesi yok , son satır yok -EAD390C3EFD37F0FCACE55A84B793AB5
  • Sonda boşluk, LFsatır besleme ve sondaki satır yok -1F6CAB740F87881EB2E65BED65D08C36
  • Sonda boşluk yok, LFsatır beslemesi yok , son satır yok -7D41CE1E637619FEA9515D090BFA2E9C
  • Karşılaştırma yapmak istediğiniz ek bir MD5 varsa, lütfen bana bildirin, ben oluşturup zorluğu güncelleyeceğim.

kurallar

  • Lider ya da izleyen yeni satırlar ya da boşluklar, karakterlerin kendileri doğru şekilde dizildiği sürece isteğe bağlıdır.
  • Tam bir program veya bir işlev kabul edilebilir. Bir işlev varsa, çıktıyı yazdırmak yerine geri gönderebilirsiniz.
  • Mümkünse, lütfen başkalarının kodunuzu deneyebilmesi için çevrimiçi bir test ortamına bir bağlantı ekleyin!
  • Standart boşluklar yasaktır.
  • Bu olduğundan, tüm normal golf kuralları geçerlidir ve en kısa kod (bayt cinsinden) kazanır.

Bu, herhangi bir şekilde parametrik olmamasına biraz şaşırdım - sırayla altıncı olması gerektiği gibi görünüyor.
Neil


@Ben bunu yapmayı düşünmüştüm, fakat az kazanım için çok fazla zorluk çekeceği korkusuyla buna karşı karar verdim.
AdmBorkBork

Görünüşe bakılırsa, -/ sanırım asıl tahminimin ne olacağı yerine |formülü takip ediyor . (2<<n)-n-2(1<<n)-1
Neil

@Neil Onlar aslında Eulerian sayılar , çünkü en iyi estetiği sağladı.
AdmBorkBork

Yanıtlar:


9

JavaScript (ES6), 204 195 188 180 bayt

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

MD5'i kontrol etmemiş olmama rağmen kare boşluk doldurma, LF satır beslemesi ve izleyen yeni satır yok.

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

222 216 207 199 bayt için parametreli versiyon . Açıklama: Çıktı boyutu 46 yeni satır da dahil olmak üzere 9119 ASCII karakterdir. (Parametreli sürüm için, çıkış boyutu takip eden yeni satır dahil olmak üzere hesaplanır.) Her karakter, önce yeni satırın gelip gelmediğini kontrol etmek suretiyle ayrı ayrı belirlenir, aksi takdirde finalin ortasındaki orijine göre bir fonksiyon çağırılarak diyagram. Fonksiyon, noktayı her bir boyutun en yakın çaprazlarına karşı noktaya tekrar tekrar kontrol eder ve noktanın bir çarpının merkezinde mi yoksa ekseni üzerinde mi uzandığına bağlı olarak uygun karakteri döndürür.


7

Röda , 284 280 238 234 bayt

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

Çevrimiçi deneyin!

Bu anonim bir işlevdir. Noktalı virgül yerine yeni satırlar kullandım, bu yüzden çok güzel biçimlendirilmiş!

Özyinelemeli işlev f, grafiği tdaha sonra son satırda yazdırılan iki boyutlu bir dizide oluşturur .

27,12,5,2,1Birkaç baytta hesaplamak için bir yol bulamadım , bu yüzden kodlanmış.


2'nin gücünü hesaplamanın bir yolu yok mu?
Neil

@ Neil Bir b_shiftloperatör var, ancak bu programda kullanılmak için çok uzun sürdüğünü düşünüyorum.
fergusq

Aklıma gelen tek şey belki de üs-3? Dunno, Roda'nın temel dönüşümde ne kadar iyi olduğunu ... 10000110001200020001-> 1168671727şüphe etseniz de 2 bayttan daha az dönüştürebildiğinizden şüpheleniyor ...
Magic Octopus Urn

3

Kömür , 50 43 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Başlangıçta çeşitli yansımalar ve rotasyonlar denedim ama ya istediğimi yapmadılar ya da bazı durumlarda buggy vardı. Sonra iç içe geçmiş bir döngü yaklaşımını denedim ama şimdi adım sayısının 3 gücünün bölüştürülmesine bağlı olarak her bir iç çapraz arasında birkaç çizgi çizerek çalışan bu yinelemeli yönteme geçtim. Hatta yalnızca 4 byte maliyetinde bir boyut parametresini kabul etmek için kolayca değiştirilebilir:

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

Düzenleme: O zamandan beri RotateShutterOverlapbu görevi gerçekleştirmek için nasıl kullanılacağı konusunda çalıştım , ama can sıkıcı bir şekilde beni 44 bayt alıyor:

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

RotateShutterOverlapDeğişken bir dönüş tamsayı kabul edilirse , bu değeri 40 bayta düşürür:

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

Olduğu gibi, bir dönüş listesi parametresi kullanılması 45 bayt alır:

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

Bu beni aldatmak gibi geliyor. : P
HyperNeutrino

@HyperNeutrino Biraz daha az kodlanmış sürüm: Çevrimiçi deneyin! Yoksa demek istediğin bu değil miydi?
Neil

: PI bunun Kömür için çok kısa ve çok kolay olduğu anlamına geliyordu: P
HyperNeutrino

@Neil: O Bu şaşırtıcı! Acaba buggy yansıması / döndürme örneği verebilir misiniz, böylece düzeltebilirim
ASCII-sadece

@ ASCII-only Buggy yansıması durumunda, köşegen yansımaların sadece birinin çalıştığını düşünüyorum, ama hangisini hatırlayamıyorum. Hata tanımlanmamış bir değişkendi (muhtemelen çok fazla copypasta) olduğunu düşünüyorum.
Neil,

2

05AB1E , 620 bayt

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

Çevrimiçi deneyin!

Tek yaptığım, deseni dördüncü parçalara böldü, sembolleri taban-4'e dönüştürdü, modelin 1 / 4'ünü taban-214'e sıkıştırdı ve sonra simetri çizgileri üzerine çevirdi. Gerçek algoritmayı kullanarak daha akıllıca bir şey üzerinde çalışıyorum, ancak bunu bitirene kadar bu benim için burada olacak.


4
Şimdiye kadar 05AB1Egördüğüm en büyük cevap. xD Genellikle bu dilde cevapları olan 620 yerine 6.20'ye yakındır. ;)
Kevin Cruijssen

@KevinCruijssen, yineleme 4'ü istiyorsa, çok daha küçük olurdu. Halen 05AB1E'de gerçek algoritma üzerinde çalışıyorum ... Düşündüğümden biraz daha zor.
Magic Octopus Urn

2

Python 3, 264 bayt

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

Karşılıklı özyinelemeli bir çift işlev kullanır. F çizgileri çizer ve P '+' leri ekler. Daha fazla golf oynayabilir, ancak şimdilik.


1

C, 236 bayt

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

Sadece karakter tablosunu göstermeden önce tekrarlı bir şekilde oluşturmak.

Çevrimiçi deneyin!

Şubelerin uzunluğunun gerçek bir kural olduğunu takip etmemi sağladığınız için teşekkür ederiz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.