ASCII-Drachenkurve


26

Einführung

Die Drachenkurve ist eine fraktale Kurve, die insbesondere auf den Titelseiten des Jurassic Park-Romans erscheint.

Es kann sehr einfach als Prozess des Faltens eines Papierstreifens beschrieben werden, wie im Wikipedia-Artikel über diese Kurve erläutert.

Die ersten Iterationen der Erzeugung dieser Kurve sehen folgendermaßen aus (Bildnachweis für das Bild bei Wikipedia):

Bildbeschreibung hier eingeben

Die Herausforderung

Schreiben Sie ein Programm oder eine Funktion, die bei einer Ganzzahl von n als Eingabe die n-te Iteration der Drachenkurve als ASCII-Grafik ausgibt, wobei nur die Symbole _und verwendet werden|

  • Sie müssen die Figur nur |mit _und Leerzeichen ausgeben . Sie können die Kurve möglicherweise nicht als Plot oder etwas anderes ausgeben.
  • Sie können die Eingabe als Programmargument, in STDIN oder als Funktionsparameter verwenden.
  • Eingaben werden immer eine ganze Zahl> = 0 sein. Ihr Programm sollte für angemessene Werte von Eingaben funktionieren, wobei 12 in den angebotenen Testfällen am höchsten ist.
  • Die ersten Iterationen sollen so aussehen

    • Iteration 0 ist

      _
      
    • Iteration 1 ist

      _|
      
    • Iteration 2 ist

      |_ 
       _|
      
  • Eine abschließende Zeile am Ende ist in Ordnung. Es sind keine nachgestellten Leerzeichen zulässig, außer dem Ausfüllen der Zeile bis zum Zeichen ganz rechts in der Kurve

  • Kein normaler Lückenmissbrauch wie gewohnt

Testfälle

  • Eingang 0

Ausgabe

_
  • Eingang 3

Ausgabe

   _   
|_| |_ 
     _|
  • Eingang 5

Ausgabe

     _   _   
    |_|_| |_ 
 _   _|    _|
|_|_|_       
  |_|_|      
    |_       
     _|      
  |_|        
  • Eingang 10

Ausgabe

           _       _                                           
         _|_|    _|_|                                          
        |_|_   _|_|_   _                                       
         _|_|_| |_| |_|_|                                      
   _    |_|_|_        |_                                       
 _|_|    _| |_|        _|                                      
|_|_   _|_          |_|                                        
 _|_|_|_|_|_                                                   
|_| |_|_|_|_|_                                                 
     _|_|_| |_|                                                
    |_| |_                                                     
         _|_   _   _           _   _           _   _           
   _    |_|_|_|_|_|_|_        |_|_|_|_        |_|_|_|_         
 _|_|    _|_|_|_|_| |_|    _   _|_| |_|    _   _|_| |_|        
|_|_   _|_|_|_|_|_        |_|_|_|_        |_|_|_|_             
 _|_|_|_|_|_|_|_|_|_   _   _|_|_|_|_   _   _|_|_|_|_   _   _   
|_| |_|_|_| |_|_|_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ 
     _|_|    _|_|    _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|
    |_|     |_|     |_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_     
                         _|_|_|_|_|_|_|_|_|_|_| |_| |_|_|_|_   
                   _    |_|_|_|_|_|_|_|_|_|_|_        |_|_|_|_ 
                 _|_|    _|_|_|_|_|_|_|_|_| |_|    _   _|_| |_|
                |_|_   _|_|_|_|_|_|_|_|_|_        |_|_|_|_     
                 _|_|_|_|_|_|_|_|_|_|_|_|_|_        |_| |_|    
                |_| |_|_|_| |_|_|_| |_|_|_|_|_                 
                     _|_|    _|_|    _|_|_| |_|                
                    |_|     |_|     |_| |_                     
                                         _|_   _   _           
                                   _    |_|_|_|_|_|_|_         
                                 _|_|    _|_|_|_|_| |_|        
                                |_|_   _|_|_|_|_|_             
                                 _|_|_|_|_|_|_|_|_|_   _   _   
                                |_| |_|_|_|_|_|_|_|_|_|_|_|_|_ 
                                     _|_|_|_|_|_|_|_|_|_|_| |_|
                                    |_| |_|_|_|_|_|_|_|_|_     
               _   _                     _|_|_| |_| |_|_|_|_   
              |_|_| |_             _    |_|_|_        |_|_|_|_ 
           _   _|    _|          _|_|    _| |_|    _   _|_| |_|
          |_|_|_                |_|_   _|_        |_|_|_|_     
            |_|_|                _|_|_|_|_|_        |_| |_|    
              |_   _       _    |_|_|_|_|_|_|_                 
           _   _|_|_|    _|_|    _|_|_|_|_| |_|                
          |_|_|_|_|_   _|_|_   _|_|_|_|_|_                     
            |_| |_| |_|_|_|_|_| |_| |_|_|_|_                   
                      |_|_|_|_        |_|_|_|_                 
                   _   _|_| |_|    _   _|_| |_|                
                  |_|_|_|_        |_|_|_|_                     
                    |_| |_|         |_| |_|                    
  • Eingang 12

Ausgabe

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

Wertung

Das ist , also gewinnt das kürzeste Programm in Bytes.


Ich bin sicher, jemand wird sich über die Unbestimmtheit einer „großen Anzahl von Räumen“ beschweren. Wie wäre es also mit einer asymptotischen Bindung?
— Feersum

1
@feersum Naja, ich habe alle nachgestellten Leerzeichen gesperrt, also wird sich jetzt niemand beschweren!
— Fatalize

2
Ich beschwere mich ... jetzt bist du ein Weißraum-Nazi!
— Feersum

@feersum und du bist ein horizontaler Auslassungsnazi!
— Optimierer

Dies ist die beste Fraktal-Frage aller Zeiten. Ich hoffe, ich habe Zeit für die Teilnahme! Ist es in Ordnung, die Kurve um 90.180.270 Grad zu drehen, oder muss sie gemäß den Beispielen angezeigt werden?
— Level River St

Antworten:


9

Ruby, 239 201 Bytes

Dies ist eine Lambda-Funktion, die auf dieselbe Weise wie die in der ungolfed-Version aufgerufen werden sollte.

Zu den Verbesserungen beim Golfen gehören: Zuweisung 8<<n/2einer Variablen zur Wiederverwendung; uptoSchleife statt eachSchleife; ternärer Operator statt if..else..end; Verwendung von, um [y,y+=d].maxzu berechnen, wo das zu drucken ist |; Verwendung von ?_und ?|anstelle des Äquivalents '|'und '_'; und Beseitigung von redundanten %4(danke 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]}}

Es basiert auf der folgenden Formel von Wikipedia:

Drücken Sie zunächst n in der Form k * (2 ^ m) aus, wobei k eine ungerade Zahl ist. Die Richtung der n-ten Kurve wird durch k mod 4 bestimmt, dh der verbleibende Rest, wenn k durch 4 geteilt wird. Wenn k mod 4 1 ist, ist die n-te Kurve R; wenn k mod 4 3 ist, dann ist die n-te Kurve L.

Wikipedia gibt folgenden Code an:

Es gibt ein einfaches nicht-rekursives Einzeilenverfahren zum Implementieren des obigen k mod 4-Verfahrens zum Finden der Drehrichtung in Code. Berechnen Sie den folgenden Booleschen Wert, indem Sie Turn n als Binärzahl behandeln: bool turn = (((n & −n) << 1) & n) != 0

Ich habe dies verbessert, i/(i&-i)%4indem ich mit der gleichen Technik wie mit dem Ausdruck i&-idie niedrigstwertige Ziffer finde, aber mein Ausdruck gibt 1 (für die linke Abbiegung) oder 3 (für die rechte Abbiegung) direkt, was praktisch ist, wenn ich die Richtung als Zahl 0..3(in) verfolge bestellen Sie aus Golfgründen Nord, West, Süd, Ost.)

Ungolfed Original im Testprogramm

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)

@Fatalize Beide Funktionen sind (derzeit) identisch (mit Ausnahme von Kommentaren und Leerzeichen). Ich habe stdout um Drucken erweitert, anstatt einen Wert (+5 Byte) zurückzugeben, und das f=am Anfang gelöscht, da dies normalerweise nicht für anonyme Benutzer gezählt wird Funktionsdefinition (-2 Byte) Morgen mehr Golf. Beachten Sie, dass Sie die Funktion golfed noch ausführen müssen, indem Sie sie einer Variablen zuweisen f=->n{.....}und f.call(n)wie im Beispiel des Testprogramms aufrufen .
— Level River St

1
@ Fatalize BTW Ich finde, dass das Fraktal in meiner Konsole absolut fantastisch aussieht. Danke für die Herausforderung.
— Level River St

@ Sp3000 ist ja %4nicht nötig, da res nur in den Ausdrücken r%2und verwendet wird r&2. Danke für den Tipp. Ich bin jetzt auf 202 gesunken.
— Level River St

8

Python 2 270 222 Bytes

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

Verwenden Sie nun die Formel für die n-te Runde. Ich habe die (((n & −n) << 1) & n)Formel auf Wikipedia gesehen, aber erst als ich sie in der Antwort von @ steveverrill sah, wurde mir klar, wie nützlich sie ist . Ich lasse das %4auch tatsächlich fallen , so dass eine Menge Rotation stattfindet und größere Eingaben eine Weile dauern.


Nebenbemerkung: Dies ist keine grafische Ausgabe, aber hier ist ein Code für Golfschildkröten:

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

Solange es keine Stunde dauert, ist es in Ordnung für mich
— Fatalize

Wenn ich das richtig verstehe, könnte Ihr zweiter Code leicht geändert werden, um eine Antwort auf diese Herausforderung zu erhalten .
— nedla2004

3

C #, 337 Bytes

Hier gibt es ein bisschen Regelmissbrauch. Es gibt keine Beschränkung für den führenden Platz. Leider ist die Leinwand endlich, so dass es eine Obergrenze für n gibt .

Zur Verdeutlichung eingerückt:

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

Verwendung der Wikipedia-Formel für Links- und Rechtskurven.

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

Weniger golfen

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

Probieren Sie es online!

(⊢,0j1×⌽)⍣⎕,1Erzeugt eine Liste von Schritten als komplexe Zahlen. Es beginnt mit einer umgekehrten ( ) Kopie der Liste multipliziert mit = sqrt (-1) 1und hängt diese wiederholt an ( ).,⌽0j1

+\0, 0 voranstellen und Präfixsummen berechnen

11 9∘○¨ Komplex in (reelle; imaginäre) Paare zerlegen

÷∘¯2 1¨ Teilen Sie die Realteile durch -2

2+/ Summen benachbarter Paare

⌈ Decke

(⊢-⌊/) subtrahieren Sie die Minima von allen, so dass die Koordinaten nicht negativ sind

a← zuweisen a

⍴∘''⊃1+⌈/ Erstellen Sie eine leere Zeichenmatrix, sodass die maximalen Koordinaten passen

('_|'⍴⍨≢a)@astellen sie abwechselnd _und |an den koordinaten aba

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.