ASCII Cayley Graph


26

Durante la ricerca di una diversa sfida che sto formulando, mi sono imbattuto in un grafico di Cayley , in particolare questo . Dal momento che sono uno dei migliori scrittori di sfide in , ovviamente ho dovuto fare una sfida all'arte ASCII per questo.

La tua sfida è quella di produrre questa rappresentazione di arte ASCII di un grafico Cayley del gruppo libero su due generatori come segue:

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

Ingresso

Nessun input, a meno che la tua lingua non richieda esplicitamente input per l'esecuzione.

Produzione

La rappresentazione artistica ASCII mostrata sopra.

Hash MD5

Dato che si tratta di un output piuttosto grande, per controllare il tuo lavoro qui ci sono alcuni hash MD5 di forme di output di esempio (tutti sono UTF-8 senza BOM):

  • Riempimento spaziale quadrato, CR/LFavanzamenti riga e riga finale trascinata 954B93871DAAE7A9C05CCDF79B00BF3C: questa è la rappresentazione utilizzata in precedenza.
  • Imbottitura quadrata, CR/LFavanzamenti di riga, nessuna riga finale trascinata -28405EF91DA305C406BD03F9275A175C
  • Imbottitura quadrata, LFavanzamenti di riga e newline finale -8CA65FB455DA7EE5A4C10F25CBD49D7E
  • Imbottitura quadrata, LFavanzamenti di riga, nessuna riga finale trascinata -FDB1547D68023281BB60DBEC82C8D281
  • Nessuno spazio finale, CR/LFavanzamenti riga e riga finale finale -77FDE8CE5D7BD1BDD47610BA23264A19
  • Nessun spazio finale, CR/LFavanzamenti riga, nessuna riga finale finale -EAD390C3EFD37F0FCACE55A84B793AB5
  • Nessuno spazio finale, LFavanzamenti riga e riga finale finale -1F6CAB740F87881EB2E65BED65D08C36
  • Nessun spazio finale, LFavanzamenti riga, nessuna riga finale finale -7D41CE1E637619FEA9515D090BFA2E9C
  • Se c'è un MD5 aggiuntivo che desideri confrontare, per favore fatemelo sapere e lo creerò e aggiornerò la sfida.

Regole

  • Le nuove linee iniziali o finali o gli spazi bianchi sono tutti opzionali, purché i personaggi stessi si allineino correttamente.
  • È accettabile un programma completo o una funzione. Se una funzione, è possibile restituire l'output anziché stamparlo.
  • Se possibile, includi un collegamento a un ambiente di test online in modo che altre persone possano provare il tuo codice!
  • Sono vietate le scappatoie standard .
  • Si tratta di quindi si applicano tutte le normali regole del golf e vince il codice più breve (in byte).

Sono leggermente sorpreso che questo non sia parametrizzato in alcun modo - sembra che dovrebbe essere il sesto di una sequenza.
Neil

Questa sfida al golf dell'anarchia è molto simile.
DJMcMayhem

@Neil avevo pensato di farlo, ma ho deciso di non farlo per paura che aumentasse troppo la difficoltà per un piccolo guadagno.
AdmBorkBork

Sembra che le serie di -/ |s seguano la formula (2<<n)-n-2piuttosto che (1<<n)-1quale sarebbe stata la mia ipotesi originale.
Neil

@Neil In realtà sono numeri euleriani , dal momento che hanno fornito la migliore estetica.
AdmBorkBork

Risposte:


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

Imbottitura spaziale quadrata, avanzamenti di riga LF e nessuna nuova riga finale, anche se non ho controllato l'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>+

Versione parametrizzata per 222 216 207 199 byte. Spiegazione: La dimensione dell'output è 9119 caratteri ASCII, inclusi 46 newline. (Per la versione parametrizzata, la dimensione dell'output viene calcolata includendo la nuova riga finale.) Ogni carattere viene determinato individualmente, in primo luogo controllando se è dovuta una nuova riga, altrimenti chiamando una funzione sulle coordinate relative all'origine nel mezzo del finale diagramma. La funzione controlla ricorsivamente il punto rispetto alle croci più vicine di ogni dimensione al punto e restituisce il carattere appropriato a seconda che si scopra che il punto si trova al centro o sull'asse di una croce.


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

Provalo online!

Questa è una funzione anonima. Ho usato newline invece di punti e virgola quindi è formattato molto bene!

La funzione ricorsiva fcrea il grafico in una matrice bidimensionale t, che viene quindi stampata sull'ultima riga.

Non ho trovato il modo di calcolare 27,12,5,2,1in pochi byte, quindi sono codificati.


Non c'è modo di calcolare i poteri di 2?
Neil

@Neil Esiste un b_shiftloperatore, ma è troppo lungo per essere utilizzato in questo programma, credo.
Fergusq,

L'unica cosa che mi viene in mente è forse base-3? Non so quanto è buono Roda è alla conversione di base anche se ... 10000110001200020001-> 1168671727dubitare è possibile convertire e dividere con meno di 2 byte però eh ...
Magia Octopus Urna

3

Carbone di legna , 50 43 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Inizialmente ho provato varie riflessioni e rotazioni ma non hanno fatto quello che volevo o in alcuni casi erano buggy. Ho quindi provato un approccio ad anello nidificato ma ora sono passato a questo metodo iterativo che funziona disegnando un numero di linee tra ogni croce interna a seconda di quanti poteri di 3 il numero di passo è divisibile per. Può anche essere prontamente modificato per accettare un parametro di dimensione al costo di soli 4 byte:

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

Modifica: da allora ho capito come usare RotateShutterOverlapper realizzare questo compito, ma fastidiosamente mi ci vogliono 44 byte:

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

Se RotateShutterOverlapaccettato un numero intero di rotazioni variabili, ciò lo ridurrebbe a 40 byte:

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

Allo stato attuale, l'utilizzo di un parametro dell'elenco rotazioni richiede 45 byte:

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

Mi sembra un tradimento. : P
HyperNeutrino,

@HyperNeutrino Versione leggermente meno hardcoded: provala online! O non è quello che volevi dire?
Neil,

: PI significa che è troppo breve e troppo facile per il carbone: P
HyperNeutrino,

@Neil: O Questo è fantastico! Mi chiedo se potresti dare un esempio di un riflesso / rotazione difettoso in modo che io possa risolverlo
solo ASCII

@ ASCII-only Nel caso di una riflessione buggy, penso che solo una delle riflessioni diagonali funzionasse, ma non ricordo quale. Penso che l'errore sia stato una variabile indefinita (probabilmente troppa copypasta).
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ôû€û»

Provalo online!

Tutto quello che ho fatto è stato tagliare il disegno in quarti, convertire i simboli in base-4, comprimere 1/4 del motivo in base-214 e poi capovolgerlo sulle linee di simmetria. Sto lavorando a qualcosa di più intelligente usando l'algoritmo reale, ma fino a quando non avrò finito, questo è ciò che sarà qui per me.


4
Questa è di gran lunga la 05AB1Erisposta più grande che abbia mai visto. xD Di solito è vicino a 6.20 invece di 620 con risposte in questa lingua. ;)
Kevin Cruijssen,

@KevinCruijssen se avesse richiesto l'iterazione 4 sarebbe stato molto più piccolo ahah. Sto ancora lavorando sull'algoritmo attuale in 05AB1E ... Un po 'più difficile di quanto pensassi.
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)))

Utilizza una coppia di funzioni reciprocamente ricorsive. F disegna le linee e P inserisce i '+'. Può essere giocato a golf di più, ma per ora è fuori tempo.


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

Basta costruire la tabella dei caratteri in modo ricorsivo prima di visualizzarla.

Provalo online!

Grazie @Neil per avermi fatto capire che la lunghezza dei rami segue una regola reale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.