ASCII Cayley Graph


26

Bei der Recherche für eine andere Herausforderung, die ich formuliere, bin ich auf einen Cayley-Graphen gestoßen , insbesondere auf diesen . Da bin ich einer der Top - Herausforderung Autoren, natürlich musste ich dafür eine ASCII - Art Herausforderung machen.

Ihre Herausforderung besteht darin, diese ASCII-Grafik eines Cayley-Diagramms der freien Gruppe auf zwei Generatoren wie folgt zu erstellen:

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

Eingang

Keine Eingabe, es sei denn, für die Ausführung Ihrer Sprache ist ausdrücklich eine Eingabe erforderlich.

Ausgabe

Die oben gezeigte ASCII-Grafikdarstellung.

MD5-Hashes

Da dies eine ziemlich große Ausgabe ist, finden Sie hier einige MD5-Hashes mit Beispielen für Ausgabeformen (alle sind UTF-8 ohne Stückliste), um Ihre Arbeit zu überprüfen:

  • Quadratische CR/LFAbstände , Zeilenvorschübe und abschließende Zeilenumbrüche 954B93871DAAE7A9C05CCDF79B00BF3C- dies ist die oben verwendete Darstellung.
  • Quadratisches Leerzeichen, CR/LFZeilenvorschub, kein Zeilenumbruch -28405EF91DA305C406BD03F9275A175C
  • Quadratische LFAbstände , Zeilenvorschübe und abschließende Zeilenumbrüche -8CA65FB455DA7EE5A4C10F25CBD49D7E
  • Quadratisches Leerzeichen, LFZeilenvorschub, kein Zeilenumbruch -FDB1547D68023281BB60DBEC82C8D281
  • Keine nachgestellten Leerzeichen, CR/LFZeilenvorschübe und nachgestellten Zeilenumbrüche -77FDE8CE5D7BD1BDD47610BA23264A19
  • Keine nachgestellten Leerzeichen, CR/LFZeilenvorschübe, keine nachgestellten Zeilenumbrüche -EAD390C3EFD37F0FCACE55A84B793AB5
  • Keine nachgestellten Leerzeichen, LFZeilenvorschübe und nachgestellten Zeilenumbrüche -1F6CAB740F87881EB2E65BED65D08C36
  • Keine nachgestellten Leerzeichen, LFZeilenvorschübe, keine nachgestellten Zeilenumbrüche -7D41CE1E637619FEA9515D090BFA2E9C
  • Wenn es einen zusätzlichen MD5 gibt, den Sie zum Vergleich haben möchten, lassen Sie es mich bitte wissen und ich werde ihn erstellen und die Herausforderung aktualisieren.

Regeln

  • Führende oder nachfolgende Zeilenumbrüche oder Leerzeichen sind optional, sofern die Zeichen selbst korrekt ausgerichtet sind.
  • Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
  • Fügen Sie nach Möglichkeit einen Link zu einer Online-Testumgebung hinzu, damit andere Benutzer Ihren Code ausprobieren können!
  • Standardlücken sind verboten.
  • Dies ist daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.

Ich bin etwas überrascht, dass dies in keiner Weise parametrisiert ist - es sieht so aus, als ob es das sechste in einer Sequenz sein sollte.
Neil

Diese Anarchie Golf Herausforderung ist sehr ähnlich.
DJMcMayhem

@Neil Ich hatte darüber nachgedacht, habe mich aber aus Angst dagegen entschieden, dass es die Schwierigkeit für wenig Gewinn zu sehr erhöhen würde.
AdmBorkBork

Es sieht so aus, als ob die Läufe von -/ |s (2<<n)-n-2eher der Formel folgen, als (1<<n)-1was meine ursprüngliche Vermutung gewesen wäre.
Neil

@Neil Sie sind eigentlich Eulersche Zahlen , da dies die beste Ästhetik ergab .
AdmBorkBork

Antworten:


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

Quadratisches Leerzeichen, LF- Zeilenumbrüche und kein Zeilenumbruch, obwohl ich den MD5 nicht überprüft habe.

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

Parametrisierte Version für 222 216 207 199 Bytes. Erläuterung: Die Ausgabegröße beträgt 9119 ASCII-Zeichen, einschließlich 46 Zeilenumbrüchen. (Bei der parametrisierten Version wird die Ausgabegröße einschließlich der nachgestellten Newline berechnet.) Jedes Zeichen wird einzeln bestimmt, indem zunächst geprüft wird, ob eine Newline fällig ist. Andernfalls wird in der Mitte des Finales eine Funktion für die Koordinaten relativ zum Ursprung aufgerufen Diagramm. Die Funktion vergleicht den Punkt rekursiv mit den nächstgelegenen Kreuzen jeder Größe zum Punkt und gibt das entsprechende Zeichen zurück, je nachdem, ob festgestellt wird, dass der Punkt in der Mitte oder auf der Achse eines Kreuzes liegt.


7

Röda , 284 280 238 234 Bytes

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

Probieren Sie es online!

Dies ist eine anonyme Funktion. Ich habe Zeilenumbrüche anstelle von Semikolons verwendet, so dass es sehr schön formatiert ist!

Die rekursive Funktion ferstellt das Diagramm in einem zweidimensionalen Array t, das dann in der letzten Zeile gedruckt wird.

Ich habe keine Möglichkeit gefunden, 27,12,5,2,1in wenigen Bytes zu rechnen , daher sind sie hart codiert.


Gibt es keine Möglichkeit, Potenzen von 2 zu berechnen?
Neil

@Neil Es b_shiftlgibt einen Operator, aber er ist zu lang, um in diesem Programm verwendet zu werden.
Fergusq

Das Einzige, woran ich denken kann, ist vielleicht Base-3? Keine Ahnung, wie gut Roda bei der Basisumwandlung ist ... 10000110001200020001-> 1168671727bezweifle, dass Sie mit weniger als 2 Bytes konvertieren und teilen können, obwohl ...
Magic Octopus Urn

3

Holzkohle , 50 43 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Ich habe ursprünglich verschiedene Überlegungen und Drehungen versucht, aber sie haben entweder nicht getan, was ich wollte, oder waren in einigen Fällen fehlerhaft. Ich habe dann einen Nested-Loop-Ansatz ausprobiert, aber jetzt bin ich zu dieser iterativen Methode übergegangen, bei der abhängig von der Anzahl der Potenzen von 3, durch die die Schrittzahl teilbar ist, mehrere Linien zwischen den einzelnen inneren Kreuzen gezogen werden. Es kann sogar leicht modifiziert werden, um einen Größenparameter zu akzeptieren, der nur 4 Byte kostet:

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

Edit: Ich habe seitdem herausgefunden, wie ich RotateShutterOverlapdiese Aufgabe lösen soll, aber ärgerlicherweise benötige ich 44 Bytes:

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

Wenn RotateShutterOverlapeine Ganzzahl mit variablen Rotationen akzeptiert würde, würde dies diese auf 40 Bytes reduzieren:

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

Die Verwendung eines Rotationslistenparameters dauert 45 Byte:

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

Das fühlt sich für mich wie Betrug an. : P
HyperNeutrino

@HyperNeutrino Etwas weniger hardcodierte Version: Probieren Sie es online aus! Oder hast du das nicht gemeint?
Neil

: PI bedeutete, dass dies für Charcoal: P
HyperNeutrino

@ Neil: O das ist erstaunlich! Ich frage mich, ob Sie ein Beispiel für eine fehlerhafte Reflektion / Rotation geben könnten, damit ich das Problem beheben kann
ASCII -

@ Nur ASCII Im Falle einer fehlerhaften Reflexion denke ich, dass nur eine der diagonalen Reflexionen funktioniert hat, aber ich kann mich nicht erinnern, welche. Ich denke, der Fehler war eine undefinierte Variable (wahrscheinlich zu viel Copypasta).
Neil

2

05AB1E , 620 Bytes

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

Probieren Sie es online!

Ich habe das Muster nur in Viertel geschnitten, die Symbole in Basis-4 konvertiert, 1/4 des Musters in Basis-214 komprimiert und es dann über die Symmetrielinien gespiegelt. Ich arbeite mit dem eigentlichen Algorithmus an etwas Klügerem, aber bis ich fertig bin, werde ich das hier tun.


4
Das ist mit Abstand die größte 05AB1EAntwort, die ich je gesehen habe. xD Normalerweise ist es 6,20 statt 620 mit Antworten in dieser Sprache. ;)
Kevin Cruijssen

@ KevinCruijssen, wenn es um Iteration 4 gebeten hätte, wäre es viel, viel kleiner gewesen, haha. Arbeite immer noch am eigentlichen Algorithmus in 05AB1E ... Etwas schwieriger als ich dachte.
Magic Octopus Urn

2

Python 3, 264 Bytes

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

Verwendet ein Paar gegenseitig rekursiver Funktionen. F zeichnet die Linien und P fügt die '+' ein. Kann mehr golfen werden, aber fürs Erste nicht rechtzeitig.


1

C 236 Bytes

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

Erstellen Sie die Zeichentabelle einfach rekursiv, bevor Sie sie anzeigen.

Probieren Sie es online!

Vielen Dank an @Neil, dass ich festgestellt habe, dass die Länge der Zweige einer tatsächlichen Regel entspricht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.