ASCII Cayley 그래프


26

내가 공식화하고있어 다른 도전에 대한 몇 가지 연구를하고있는 동안, 나는 우연히 케일리 그래프 , 특히 이 하나 . 저는 최고의 챌린지 작가 중 한 명 이므로 ASCII 아트 챌린지를 만들어야했습니다.

당신의 도전은 다음과 같이 두 발전기에서 자유 그룹의 Cayley 그래프를 ASCII로 묘사하는 것입니다.

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

입력

사용자 언어에서 명시 적으로 입력을 요구하지 않는 한 입력이 없습니다.

산출

위에 표시된 ASCII 아트 표현.

MD5 해시

이것은 꽤 큰 결과물이므로, 작업을 확인하기 위해 예제 출력 형식의 MD5 해시가 있습니다 (모두 BOM이없는 UTF-8 임).

  • 제곱 스페이스 패딩, CR/LF줄 바꿈 및 후행 줄 바꿈-- 954B93871DAAE7A9C05CCDF79B00BF3C위에서 사용한 표현입니다.
  • 제곱 공간 패딩, CR/LF줄 바꿈, 후행 줄 바꿈 없음-28405EF91DA305C406BD03F9275A175C
  • 제곱 공간 패딩, LF줄 바꿈 및 후행 줄 바꿈-8CA65FB455DA7EE5A4C10F25CBD49D7E
  • 제곱 공간 패딩, LF줄 바꿈, 후행 줄 바꿈 없음-FDB1547D68023281BB60DBEC82C8D281
  • 후행 공백, CR/LF줄 바꿈 및 후행 줄 바꿈 없음77FDE8CE5D7BD1BDD47610BA23264A19
  • 후행 공백, CR/LF줄 바꿈, 후행 줄 바꿈 없음 -EAD390C3EFD37F0FCACE55A84B793AB5
  • 후행 공백, LF줄 바꿈 및 후행 줄 바꿈 없음1F6CAB740F87881EB2E65BED65D08C36
  • 후행 공백, LF줄 바꿈, 후행 줄 바꿈 없음 -7D41CE1E637619FEA9515D090BFA2E9C
  • 비교할 MD5가 더 있으면 알려 주시면 문제를 해결하고 업데이트하겠습니다.

규칙

  • 문자 자체가 올바르게 정렬되는 한 줄 바꿈 또는 공백은 모두 선택 사항입니다.
  • 전체 프로그램 또는 기능이 허용됩니다. 함수 인 경우 출력하지 않고 출력을 반환 할 수 있습니다.
  • 가능하면 다른 사람들이 귀하의 코드를 시험해 볼 수 있도록 온라인 테스트 환경에 대한 링크를 포함하십시오!
  • 표준 허점 은 금지되어 있습니다.
  • 이것은 이므로 모든 일반적인 골프 규칙이 적용되며 가장 짧은 코드 (바이트)가 이깁니다.

나는 이것이 어떤 식 으로든 매개 변수화되지 않는다는 것에 약간 놀랐습니다.
Neil

무정부 상태 골프 도전 은 매우 유사합니다.
DJMcMayhem

@Neil 나는 그렇게 생각했지만 작은 이득을 위해 어려움을 너무 많이 증가시킬 까봐 두려워했습니다.
AdmBorkBork

-/ |의 실행은 내 원래 추측했던 (2<<n)-n-2것보다 공식을 따르는 것처럼 보입니다 (1<<n)-1.
Neil

@Neil 그들은 실제로 최고의 미적을 제공했기 때문에 실제로 Eulerian 수 입니다.
AdmBorkBork

답변:


9

자바 스크립트 (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())

MD5를 확인하지 않았지만 사각형 공간 패딩, LF 줄 바꿈 후행 줄 바꿈 없음.

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 바이트. 설명 : 출력 크기는 46 줄 바꾸기를 포함하여 9119 ASCII 문자입니다. (매개 변수 버전의 경우 출력 크기는 후행 줄 바꿈을 포함하여 계산됩니다.) 각 문자는 먼저 줄 바꿈이 필요한지 여부를 확인하여 개별적으로 결정됩니다. 도표. 이 함수는 각 크기의 가장 가까운 십자에 대해 점을 재귀 적으로 확인하여 점이 십자 중심 또는 축에 있는지 여부에 따라 적절한 문자를 반환합니다.


7

로다 , 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는 2 차원 배열로 그래프를 만든 t다음 마지막 줄에 인쇄됩니다.

27,12,5,2,1몇 바이트 로 계산하는 방법을 찾지 못했기 때문에 하드 코딩되었습니다.


2의 거듭 제곱을 계산할 방법이 없습니까?
Neil

@Neil b_shiftl연산자가 존재하지만이 프로그램에서 사용하기에는 너무 깁니다.
fergusq

내가 생각할 수있는 유일한 것은 아마도 base-3입니까? 로 노가 기본 변환에 얼마나 좋은지 모르겠지만 ...- 10000110001200020001> 11686717272 바이트 미만으로 변환하고 나눌 수 있는지 의심하십시오.
Magic Octopus Urn

3

, 50 43 바이트

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 나는 원래 다양한 반사와 회전을 시도했지만 그들은 내가 원하는 것을하지 않았거나 어떤 경우에는 버그가있었습니다. 그런 다음 중첩 루프 접근법을 시도했지만 이제 단계 번호를 3으로 나눌 수있는 힘의 수에 따라 각 내부 십자가 사이에 여러 줄을 그려서 작동하는이 반복 방법으로 전환했습니다. 4 바이트의 비용으로 size 매개 변수를 허용하도록 쉽게 수정할 수도 있습니다.

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 약간 덜 하드 코딩 된 버전 : 온라인으로 사용해보십시오! 아니면 그게 당신이 의도 한 것이 아닙니까?
Neil

: PI는 이것이 숯에 너무 짧고 너무 쉽다는 것을 의미했습니다. : P
HyperNeutrino

@Neil : O 이거 놀랍습니다! 나는 그것을 해결할 수 있도록 당신이 버그가 반사 / 회전의 예를 줄 수 있는지 궁금 해요
ASCII 전용

@ASCII 전용 버그가있는 리플렉션의 경우 대각선 리플렉션 중 하나만 작동한다고 생각하지만 어느 것을 기억할 수 없습니다. 오류가 정의되지 않은 변수라고 생각합니다 (아마도 너무 많은 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로 자르고 심볼을 base-4로 변환하고 패턴의 1/4을 base-214로 압축 한 다음 대칭 선 위로 뒤집 었습니다. 실제 알고리즘을 사용하여 더 똑똑한 작업을하고 있지만 완료 할 때까지 여기에 나옵니다.


4
그것은 05AB1E내가 본 가장 큰 대답입니다. xD 일반적으로이 언어의 답변은 620 대신 6.20에 가깝습니다. ;)
Kevin Cruijssen

@KevinCruijssen iteration 4를 요청한다면 훨씬 작습니다. 아직도 05AB1E의 실제 알고리즘을 연구 중입니다 ... 생각보다 조금 어렵습니다.
Magic Octopus Urn

2

파이썬 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.