ASCII Dragon's Curve


26

introduzione

La curva del Drago è una curva frattale che appare in particolare nelle pagine titolo della sezione del romanzo Jurassic Park.

Può essere semplicemente descritto come un processo di piegatura di una striscia di carta, come spiegato nell'articolo di Wikipedia su questa curva.

Le prime poche iterazioni sulla generazione di questa curva sembrano così (crediti per Wikipedia per l'immagine):

inserisci qui la descrizione dell'immagine

La sfida

Scrivi un programma o una funzione che, dato un intero n come input, genera l'ennesima iterazione della curva del drago come arte ASCII usando solo i simboli _e|

  • Bisogna uscita la cifra utilizzando solo |, _e gli spazi. Non è possibile produrre la curva come trama o altro.
  • È possibile accettare l'input come argomento di programma, in STDIN o come parametro di funzione.
  • Gli input saranno sempre un numero intero> = 0. Il tuo programma dovrebbe funzionare con valori ragionevoli di input, 12 essendo il più alto nei casi di test offerti.
  • Le prime iterazioni dovrebbero apparire così

    • Iterazione 0 è

      _
      
    • Iterazione 1 è

      _|
      
    • Iterazione 2 è

      |_ 
       _|
      
  • Una riga finale alla fine è ok. Non sono ammessi spazi finali oltre a riempire la linea fino al carattere più a destra nella curva

  • Nessun abuso standard di scappatoie come al solito

Casi test

  • Ingresso 0

Produzione

_
  • Ingresso 3

Produzione

   _   
|_| |_ 
     _|
  • Ingresso 5

Produzione

     _   _   
    |_|_| |_ 
 _   _|    _|
|_|_|_       
  |_|_|      
    |_       
     _|      
  |_|        
  • Ingresso 10

Produzione

           _       _                                           
         _|_|    _|_|                                          
        |_|_   _|_|_   _                                       
         _|_|_| |_| |_|_|                                      
   _    |_|_|_        |_                                       
 _|_|    _| |_|        _|                                      
|_|_   _|_          |_|                                        
 _|_|_|_|_|_                                                   
|_| |_|_|_|_|_                                                 
     _|_|_| |_|                                                
    |_| |_                                                     
         _|_   _   _           _   _           _   _           
   _    |_|_|_|_|_|_|_        |_|_|_|_        |_|_|_|_         
 _|_|    _|_|_|_|_| |_|    _   _|_| |_|    _   _|_| |_|        
|_|_   _|_|_|_|_|_        |_|_|_|_        |_|_|_|_             
 _|_|_|_|_|_|_|_|_|_   _   _|_|_|_|_   _   _|_|_|_|_   _   _   
|_| |_|_|_| |_|_|_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ 
     _|_|    _|_|    _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|
    |_|     |_|     |_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_     
                         _|_|_|_|_|_|_|_|_|_|_| |_| |_|_|_|_   
                   _    |_|_|_|_|_|_|_|_|_|_|_        |_|_|_|_ 
                 _|_|    _|_|_|_|_|_|_|_|_| |_|    _   _|_| |_|
                |_|_   _|_|_|_|_|_|_|_|_|_        |_|_|_|_     
                 _|_|_|_|_|_|_|_|_|_|_|_|_|_        |_| |_|    
                |_| |_|_|_| |_|_|_| |_|_|_|_|_                 
                     _|_|    _|_|    _|_|_| |_|                
                    |_|     |_|     |_| |_                     
                                         _|_   _   _           
                                   _    |_|_|_|_|_|_|_         
                                 _|_|    _|_|_|_|_| |_|        
                                |_|_   _|_|_|_|_|_             
                                 _|_|_|_|_|_|_|_|_|_   _   _   
                                |_| |_|_|_|_|_|_|_|_|_|_|_|_|_ 
                                     _|_|_|_|_|_|_|_|_|_|_| |_|
                                    |_| |_|_|_|_|_|_|_|_|_     
               _   _                     _|_|_| |_| |_|_|_|_   
              |_|_| |_             _    |_|_|_        |_|_|_|_ 
           _   _|    _|          _|_|    _| |_|    _   _|_| |_|
          |_|_|_                |_|_   _|_        |_|_|_|_     
            |_|_|                _|_|_|_|_|_        |_| |_|    
              |_   _       _    |_|_|_|_|_|_|_                 
           _   _|_|_|    _|_|    _|_|_|_|_| |_|                
          |_|_|_|_|_   _|_|_   _|_|_|_|_|_                     
            |_| |_| |_|_|_|_|_| |_| |_|_|_|_                   
                      |_|_|_|_        |_|_|_|_                 
                   _   _|_| |_|    _   _|_| |_|                
                  |_|_|_|_        |_|_|_|_                     
                    |_| |_|         |_| |_|                    
  • Ingresso 12

Produzione

                                                               _   _           _   _                                           _   _           _   _                                           
                                                              |_|_|_|_        |_|_|_|_                                        |_|_|_|_        |_|_|_|_                                         
                                                           _   _|_| |_|    _   _|_| |_|                                    _   _|_| |_|    _   _|_| |_|                                        
                                                          |_|_|_|_        |_|_|_|_                                        |_|_|_|_        |_|_|_|_                                             
                                                            |_|_|_|_   _   _|_|_|_|_   _   _                                |_|_|_|_   _   _|_|_|_|_   _   _                                   
                                                              |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_                                |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_                                 
                                                           _   _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|                            _   _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|                                
                                                          |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_                                |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_                                     
                                               _   _        |_|_|_|_|_|_|_|_|_| |_| |_|_|_|_                   _   _        |_|_|_|_|_|_|_|_|_| |_| |_|_|_|_                                   
                                              |_|_|_|_        |_|_|_|_|_|_|_|_        |_|_|_|_                |_|_|_|_        |_|_|_|_|_|_|_|_        |_|_|_|_                                 
                                           _   _|_| |_|    _   _|_|_|_|_|_| |_|    _   _|_| |_|            _   _|_| |_|    _   _|_|_|_|_|_| |_|    _   _|_| |_|                                
                                          |_|_|_|_        |_|_|_|_|_|_|_|_        |_|_|_|_                |_|_|_|_        |_|_|_|_|_|_|_|_        |_|_|_|_                                     
                                            |_|_|_|_   _   _|_|_|_|_|_|_|_|_        |_| |_|                 |_|_|_|_   _   _|_|_|_|_|_|_|_|_        |_| |_|                                    
                                              |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_                                |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_                                                 
                                           _   _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|                            _   _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|                                                
                                          |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_                                |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_                                                     
                                            |_| |_| |_|_|_|_|_|_|_|_|_|_|_|_   _   _           _   _        |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_   _   _           _   _           _   _           
                                                      |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_        |_|_|_|_        |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_        |_|_|_|_        |_|_|_|_         
                                                   _   _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|    _   _|_| |_|    _   _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|    _   _|_| |_|    _   _|_| |_|        
                                                  |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_        |_|_|_|_        |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_        |_|_|_|_        |_|_|_|_             
                                                    |_| |_| |_|_|_|_|_|_|_|_|_|_|_|_   _   _|_|_|_|_   _   _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_   _   _|_|_|_|_   _   _|_|_|_|_   _   _   
                                                              |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|_|_| |_|_|_|_|_|_|_|_|_|_|_| |_|_|_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ 
                                                           _   _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|    _|_|    _|_|_|_|_|_|_|_|_|_|    _|_|    _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|
                                                          |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_    |_|     |_| |_|_|_|_|_|_|_|_    |_|     |_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_     
                                               _   _        |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|                _|_|_|_|_|_|_|_|                _|_|_|_|_|_|_|_|_|_|_| |_| |_|_|_|_   
                                              |_|_|_|_        |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|_           _    |_|_|_|_|_| |_|_           _    |_|_|_|_|_|_|_|_|_|_|_        |_|_|_|_ 
                                           _   _|_| |_|    _   _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|    _|_|        _|_|    _|_|_|_|    _|_|        _|_|    _|_|_|_|_|_|_|_|_| |_|    _   _|_| |_|
                                          |_|_|_|_        |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_    |_|         |_|_   _|_|_|_|_    |_|         |_|_   _|_|_|_|_|_|_|_|_|_        |_|_|_|_     
                                            |_|_|_|_   _   _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|                _|_|_|_|_|_|_|_|                _|_|_|_|_|_|_|_|_|_|_|_|_|_        |_| |_|    
                                              |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_   _            |_| |_|_|_| |_|_                |_| |_|_|_| |_|_|_| |_|_|_|_|_                 
                                           _   _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|                _|_|    _|_|                    _|_|    _|_|    _|_|_| |_|                
                                          |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_   _            |_|     |_|                     |_|     |_|     |_| |_                     
                                            |_| |_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|                                                                _|_   _   _           
                                                      |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|_                                                           _    |_|_|_|_|_|_|_         
                                                   _   _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|    _|_|                                                        _|_|    _|_|_|_|_| |_|        
                                                  |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_    |_|                                                         |_|_   _|_|_|_|_|_             
                                                    |_| |_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|                                                                _|_|_|_|_|_|_|_|_|_   _   _   
           _       _                                          |_|_|_|_|_|_| |_|_|_| |_|_|_|_|_|_   _                                                            |_| |_|_|_|_|_|_|_|_|_|_|_|_|_ 
         _|_|    _|_|                                      _   _|_|_|_|_|    _|_|    _|_|_|_|_|_|_|_|                                                                _|_|_|_|_|_|_|_|_|_|_| |_|
        |_|_   _|_|_   _                                  |_|_|_|_|_|_|_    |_|     |_| |_|_|_|_|_|_   _                                                            |_| |_|_|_|_|_|_|_|_|_     
         _|_|_| |_| |_|_|                      _   _        |_|_|_|_|_|_|                _|_|_|_|_|_|_|_|                                      _   _                     _|_|_| |_| |_|_|_|_   
   _    |_|_|_        |_                      |_|_|_|_        |_|_| |_|_           _    |_|_|_|_|_| |_|_                                      |_|_| |_             _    |_|_|_        |_|_|_|_ 
 _|_|    _| |_|        _|                  _   _|_| |_|    _   _|    _|_|        _|_|    _|_|_|_|    _|_|                                  _   _|    _|          _|_|    _| |_|    _   _|_| |_|
|_|_   _|_          |_|                   |_|_|_|_        |_|_|_    |_|         |_|_   _|_|_|_|_    |_|                                   |_|_|_                |_|_   _|_        |_|_|_|_     
 _|_|_|_|_|_                                |_|_|_|_   _   _|_|_|                _|_|_|_|_|_|_|_|                                           |_|_|                _|_|_|_|_|_        |_| |_|    
|_| |_|_|_|_|_                                |_|_|_|_|_|_|_|_|_   _            |_| |_|_|_| |_|_                                              |_   _       _    |_|_|_|_|_|_|_                 
     _|_|_| |_|                            _   _|_|_|_|_|_|_|_|_|_|_|                _|_|    _|_|                                          _   _|_|_|    _|_|    _|_|_|_|_| |_|                
    |_| |_                                |_|_|_|_|_|_|_|_|_|_|_|_|_   _            |_|     |_|                                           |_|_|_|_|_   _|_|_   _|_|_|_|_|_                     
         _|_   _   _           _   _        |_|_|_|_|_|_|_|_|_|_|_|_|_|_|                                                                   |_| |_| |_|_|_|_|_| |_| |_|_|_|_                   
   _    |_|_|_|_|_|_|_        |_|_|_|_        |_|_|_|_|_|_|_|_|_|_| |_|_                                                                              |_|_|_|_        |_|_|_|_                 
 _|_|    _|_|_|_|_| |_|    _   _|_| |_|    _   _|_|_|_|_|_|_|_|_|    _|_|                                                                          _   _|_| |_|    _   _|_| |_|                
|_|_   _|_|_|_|_|_        |_|_|_|_        |_|_|_|_|_|_|_|_|_|_|_    |_|                                                                           |_|_|_|_        |_|_|_|_                     
 _|_|_|_|_|_|_|_|_|_   _   _|_|_|_|_   _   _|_|_|_|_|_|_|_|_|_|_|                                                                                   |_| |_|         |_| |_|                    
|_| |_|_|_| |_|_|_| |_|_|_|_|_|_|_|_|_|_|_| |_|_|_| |_|_|_|_|_|_   _                                                                                                                           
     _|_|    _|_|    _|_|_|_|_|_|_|_|_|_|    _|_|    _|_|_|_|_|_|_|_|                                                                                                                          
    |_|     |_|     |_| |_|_|_|_|_|_|_|_    |_|     |_| |_|_|_|_|_|_   _                                                                                                                       
                         _|_|_|_|_|_|_|_|                _|_|_|_|_|_|_|_|                                                                                                                      
                   _    |_|_|_|_|_| |_|_           _    |_|_|_|_|_| |_|_                                                                                                                       
                 _|_|    _|_|_|_|    _|_|        _|_|    _|_|_|_|    _|_|                                                                                                                      
                |_|_   _|_|_|_|_    |_|         |_|_   _|_|_|_|_    |_|                                                                                                                        
                 _|_|_|_|_|_|_|_|                _|_|_|_|_|_|_|_|                                                                                                                              
                |_| |_|_|_| |_|_                |_| |_|_|_| |_|_                                                                                                                               
                     _|_|    _|_|                    _|_|    _|_|                                                                                                                              
                    |_|     |_|                     |_|     |_|                                                                                                                                

punteggio

Questo è , quindi vince il programma più breve in byte.


Sono sicuro che qualcuno si lamenterà della vaghezza di una "grande quantità di spazi", quindi che ne dici di un limite asintotico?
feersum,

1
@feersum Beh, non ho ammesso del tutto gli spazi finali, quindi nessuno si lamenterà ora!
Fatalizza il

2
Mi sto lamentando ... ora sei un nazista spazi bianchi!
febbraio

@feersum e sei un ellissi orizzontale nazista!
Ottimizzatore

Questa è la migliore domanda frattale di sempre, spero di avere il tempo di partecipare! Va bene ruotare la curva di 90.180.270 gradi o deve essere visualizzata per gli esempi?
Level River St

Risposte:


9

Rubino, 239 201 byte

Questa è una funzione lambda che dovrebbe essere chiamata allo stesso modo di quella nella versione non golfata.

I miglioramenti del golf includono: assegnazione di 8<<n/2una variabile per il riutilizzo; uptoloop anziché eachloop; operatore ternario invece di if..else..end; uso di [y,y+=d].maxper calcolare dove stampare il |; uso di ?_e ?|invece dell'equivalente '|'e '_'; ed eliminazione di ridondanti %4(grazie Sp3000.)

->n{a=Array.new(m=8<<n/2){" "*m}
p=q=1+x=y=m/2
r=3
1.upto(1<<n){|i|d=(r&2)-1
r%2>0?(a[y][x+=d]=?_
x+=d):(a[[y,y+=d].max][x]=?|
p=x<p ?x:p
q=x>q ?x:q)
r+=i/(i&-i)}
a.delete(a[0])
puts a.map{|e|e[p..q]}}

Si basa sulla seguente formula di Wikipedia:

Innanzitutto, esprimi n nella forma k * (2 ^ m) dove k è un numero dispari. La direzione dell'ennesima svolta è determinata da k mod 4, ovvero il resto a sinistra quando k è diviso per 4. Se k mod 4 è 1, l'ennesima svolta è R; se k mod 4 è 3, l'ennesima curva è L.

Wikipedia fornisce il seguente codice:

Esiste un semplice metodo non ricorsivo su una riga per implementare il metodo k mod 4 sopra riportato per trovare la direzione di virata nel codice. Considerando la svolta n come un numero binario, calcola il seguente valore booleano: bool turn = (((n & −n) << 1) & n) != 0

Ho migliorato ciò a i/(i&-i)%4cui utilizza la stessa tecnica di utilizzo dell'espressione i&-iper trovare la cifra meno significativa, ma la mia espressione fornisce direttamente 1 (per svolta a sinistra) o 3 (per svolta a destra), il che è utile mentre seguo la direzione come numero 0..3(in ordina nord, ovest, sud, est per motivi di golf.)

Originale non registrato nel programma di test

f=->n{
  a=Array.new(8<<n/2){" "*(8<<n/2)}  #Make an array of strings of spaces of appropriate size 
  p=q=1+x=y=4<<n/2                   #set x&y to the middle of the array, p&q to the place where the underscore for n=0 will be printed.                             
  r=3                                #direction pointer, headed East
  (1..1<<n).each{|i|                 #all elements, starting at 1
    d=(r&2)-1                          #d is +1 for East and South, -1 for West and North
    if r%2>0                           #if horizontal
      a[y][x+=d]='_'                     #move cursor 1 position in direction d, print underscore,
      x+=d                               #and move again.
    else                               #else vertical
      a[(y+([d,0].max))][x]='|'          #draw | on the same line if d negative, line below if d positive
      y+=d                               #move cursor
      p=x<p ?x:p                         #update minimum and maximum x values for whitespace truncation later
      q=x>q ?x:q                         #(must be done for vertical bars, to avoid unnecesary space in n=0 case)
    end
    r=(r+i/(i&-i))%4                   #update direction
  }
  a.delete(a[0])                     #first line of a is blank. delete all blank lines.
  puts a.map!{|e|e[p..q]}                 #use p and q to truncate all strings to avoid unnecessary whitespace to left and right.
}


f.call(0)
f.call(2)
f.call(3)
f.call(11)

@Fatalizzare entrambe le funzioni sono (attualmente) identiche (ad eccezione dei commenti e degli spazi bianchi). Ho aggiunto la stampa a stdout invece di restituire un valore (+5 byte) e cancellato f=all'inizio in quanto normalmente non viene conteggiato per un anonimo definizione della funzione (-2 byte). Più golfing domani. Nota che dovrai ancora eseguire la funzione golf, assegnandola a una variabile f=->n{.....}e chiamandola usando f.call(n)come nell'esempio del programma di test.
Level River St

1
@Fatalize BTW Penso che il frattale sia assolutamente fantastico nella mia console. Grazie per la sfida
Level River St

@ Sp3000 infatti %4non è necessario, poiché rviene utilizzato solo nelle espressioni r%2e r&2. Grazie per il consiglio. Ora sono sceso al 202.
Level River St

8

Python 2, 270 222 byte

y=X=Y=0
i=m=x=1
D={}
k=2**input()
while~k+i:j=Y+(y>0);s={2*X+x};D[j]=D.get(j,s)|s;m=min(m,*s);Y+=y;X+=x;exec i/(i&-i)*"x,y=y,-x;";i+=1
for r in sorted(D):print"".join(" | _"[(n in D[r])+n%2*2]for n in range(m,max(D[r])+1))

Ora usa la formula per l'ennesima curva. Ho visto la (((n & −n) << 1) & n)formula su Wikipedia, ma non ho capito quanto fosse utile fino a quando non l'ho vista nella risposta di @ steveverrill . In realtà anch'io lo faccio cadere %4, quindi c'è molta rotazione in corso, rendendo gli input più grandi richiedono un po 'di tempo.


Nota laterale: questo non è un output grafico, ma ecco un po 'di codice tartaruga golfizzata:

from turtle import*
for i in range(1,2**input()+1):fd(5);lt(i/(i&-i)*90)

Finché non ci vorrà un'ora per correre, per me va bene
Fatalizza il

Se ho capito bene, il tuo secondo codice potrebbe essere leggermente modificato per diventare una risposta a questa sfida .
nedla2004,

3

C #, 337 byte

C'è un po 'di abuso di regole qui. Non ci sono restrizioni per lo spazio iniziale. Sfortunatamente, la tela è finita, quindi c'è un limite superiore per n .

Rientrato per chiarezza:

using C=System.Console;
class P{
    static void Main(string[]a){
        int n=int.Parse(a[0]),d=2,x=250,y=500;
        var f="0D";
        while(n-->0)
            f=f.Replace("D","d3t03").Replace("T","10d1t").ToUpper();
        C.SetBufferSize(999,999);
        foreach(var c in f){
            n=c&7;
            d=(d+n)%4;
            if(n<1){
                var b=d%2<1;
                x+=n=b?1-d:0;
                y+=b?0:2-d;
                C.SetCursorPosition(x*2-n,y+d/3);
                C.Write(b?'_':'|');
            }
        }
    }
}

1

JavaScript (ES6), 220

Utilizzando la formula di Wikipedia per le svolte a destra e a sinistra.

n=>(d=>{for(i=x=y=d;i<1<<n;d+=++i/(i&-i))z=d&2,(w=d&1)?y+=z/2:x+=1-z,g=x<0?g.map(r=>[,,...r],x=1):g,g=y<0?[y=0,...g]:g,r=g[y]=g[y]||[],r[x]='_|'[w],w?y-=!z:x+=1-z})(0,g=[])||g.map(r=>[...r].map(c=>c||' ').join``).join`
`

Meno golf

n=>{
  g=[];
  for(i=x=y=d=0;i<1<<n;d+=++i/(i&-i))
    z=d&2,
    (w=d&1)?y+=z/2:x+=1-z,
    g=x<0?g.map(r=>[,,...r],x=1):g,
    g=y<0?[y=0,...g]:g,
    r=g[y]=g[y]||[],
    r[x]='_|'[w],
    w?y-=!z:x+=1-z
  return g.map(r=>[...r].map(c=>c||' ').join``).join`\n`
}

F=
n=>(d=>{for(i=x=y=d;i<1<<n;d+=++i/(i&-i))z=d&2,(w=d&1)?y+=z/2:x+=1-z,g=x<0?g.map(r=>[,,...r],x=1):g,g=y<0?[y=0,...g]:g,r=g[y]=g[y]||[],r[x]='_|'[w],w?y-=!z:x+=1-z})(0,g=[])||g.map(r=>[...r].map(c=>c||' ').join``).join`
`

function update() {
  var n=+I.value
  O.textContent=F(n)
}

update()
pre { font-size: 8px }
<input id=I value=5 type=number oninput='update()'><pre id=O></pre>


1

APL (Dyalog Unicode) , 65 64 byte SBCS

('_|'⍴⍨≢a)@a⍴∘''1+⌈/a←(⊢-⌊/)⌈2+/÷∘¯2 1¨11 9∘○¨+\0,(⊢,0j1×⌽)⍣⎕,1

Provalo online!

(⊢,0j1×⌽)⍣⎕,1genera un elenco di passaggi come numeri complessi. Inizia da 1e aggiunge ripetutamente ( ,) una copia invertita ( ) dell'elenco moltiplicata per 0j1= sqrt (-1).

+\0, anteporre 0 e calcolare le somme del prefisso

11 9∘○¨ scomporre il complesso in coppie (reali; immaginarie)

÷∘¯2 1¨ dividere le parti reali per -2

2+/ somme di coppie adiacenti

soffitto

(⊢-⌊/) sottrarre i minimi da tutti, in modo che i coord non siano negativi

a← assegnato a a

⍴∘''⊃1+⌈/ crea una matrice di caratteri vuota in modo tale che i coordini massimi possano adattarsi

('_|'⍴⍨≢a)@amettere alternando _e |alle coordinate daa

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.