ASCII Cayley Graph


26

Роблячи деякі дослідження для іншого завдання, який я формулюю, я натрапив на графік Кейлі , конкретно на цей . Оскільки я один з найкращих авторів виклику , я, звичайно, повинен був зробити для цього мистецтво ASCII.

Ваше завдання полягає в створенні цього художнього зображення ASCII графіку Кейлі вільної групи на двох генераторах:

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

Вхідні дані

Немає даних, якщо ваша мова явно не вимагає введення.

Вихідні дані

Представлене вище мистецтво ASCII.

MD5 хешей

Оскільки це досить великий вихід, для перевірки вашої роботи наведено декілька хешів MD5 з прикладними формами виводу (всі UTF-8 без BOM):

  • Квадратний пробіл, CR/LFлінійка каналів та новий рядок 954B93871DAAE7A9C05CCDF79B00BF3C- ось таке представлення, яке використовується вище.
  • Квадратний простір, прокладка CR/LFліній, відсутність нового рядка -28405EF91DA305C406BD03F9275A175C
  • Квадратний простір, прокладка LFліній та новий рядок -8CA65FB455DA7EE5A4C10F25CBD49D7E
  • Квадратний простір, прокладка LFліній, відсутність нового рядка -FDB1547D68023281BB60DBEC82C8D281
  • Немає пробілів, CR/LFканалів ліній та нового рядка -77FDE8CE5D7BD1BDD47610BA23264A19
  • Немає пробілів, CR/LFканалів ліній, жодного нового рядка -EAD390C3EFD37F0FCACE55A84B793AB5
  • Немає пробілів, LFканалів ліній та нового рядка -1F6CAB740F87881EB2E65BED65D08C36
  • Немає пробілів, LFканалів ліній, жодного нового рядка -7D41CE1E637619FEA9515D090BFA2E9C
  • Якщо є додатковий MD5, який ви хотіли б для порівняння, будь ласка, дайте мені знати, і я створити його та оновити виклик.

Правила

  • Провідні чи кінцеві рядки чи пробіли - це необов’язково, до тих пір, поки самі символи правильно вишикуються.
  • Прийнятна або повна програма, або функція. Якщо функція, ви можете повернути вихід, а не надрукувати його.
  • Якщо можливо, додайте посилання на онлайн-тестувальне середовище, щоб інші люди могли спробувати ваш код!
  • Стандартні лазівки заборонені.
  • Це тому діють усі звичайні правила гольфу, і найкоротший код (у байтах) виграє.

Я трохи здивований, що це ніяк не параметризоване - це виглядає так, ніби це повинно бути шостим у послідовності.
Ніл


@Neil Я розглядав це, але вирішив проти цього, побоюючись, що це занадто сильно збільшить труднощі для невеликого прибутку.
AdmBorkBork

Схоже, пробіги -/ |с дотримуються формули, (2<<n)-n-2а не (1<<n)-1те, що було б моїм початковим здогадом.
Ніл

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

Параметризована версія для 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 b_shiftlОператор існує, але я думаю, що це занадто довго, щоб використовуватись у цій програмі.
fergusq

Єдине, про що я можу подумати - це, можливо, база 3? Не знаю, наскільки хороша Рода в базовій конверсії, хоча ... 10000110001200020001-> 1168671727сумніви, ви можете конвертувати та розділити менше ніж 2 байти, хоча хе ...
Чарівний восьминіг Урна

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 Трохи менш тверда версія: Спробуйте в Інтернеті! Або це не те, що ви мали на увазі?
Ніл

: PI означав, що це занадто короткий і занадто простий спосіб для вугілля: P
HyperNeutrino

@Neil: O Це дивовижно! Мені цікаво, чи можете ви навести приклад помилкового відображення / обертання, щоб я міг це виправити
лише ASCII

@ ASCII-тільки У випадку помилкового відображення, я думаю, що працювало лише одне з діагональних відображень, але я не можу пригадати, яке. Я думаю, що помилка була не визначеною змінною (можливо, занадто багато copypasta).
Ніл

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 з відповідями на цій мові. ;)
Кевін Круїссен

@KevinCruijssen, якби він просив ітерацію 4, він був би набагато меншим, ха-ха. Ще працюю над власне алгоритмом в 05AB1E ... Трохи важче, ніж я думав.
Чарівний восьминога Урна

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 за те, що я зрозумів, що довжина гілок відповідає дійсному правилу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.