Ich habe mit unendlichen Widerstandsnetzwerken herumgespielt (lange Geschichte), als ich auf folgendes interessantes rekursives Muster stieß:
|-||
|---
Jedes Exemplar dieses Musters ist doppelt so breit wie hoch. Um von einer Ebene des Musters zur nächsten zu gelangen, zerlegen Sie dieses Rechteck in zwei Unterblöcke (von denen jeder ein NxN-Quadrat ist):
AB =
|-||
|---
so A =
|-
|-
and B =
||
--
Diese Hälften werden dann dupliziert und nach folgendem Muster neu angeordnet:
ABAA
ABBB
giving
|-|||-|-
|---|-|-
|-||||||
|-------
Herausforderung
Schreiben Sie ein Programm / eine Funktion, die unter Angabe einer Zahl N
die N
Iteration dieses rekursiven Entwurfs ausgibt . Das ist Golf.
Das E / A-Format ist relativ nachgiebig: Sie können eine einzelne Zeichenfolge, eine Liste von Zeichenfolgen, ein 2D-Array von Zeichen usw. zurückgeben. Beliebig nachgestellte Leerzeichen sind zulässig. Sie können auch die Indexierung 0 oder 1 verwenden.
Beispiele
Die ersten Iterationen des Musters lauten wie folgt:
N = 0
|-
N = 1
|-||
|---
N = 2
|-|||-|-
|---|-|-
|-||||||
|-------
N = 3
|-|||-|-|-|||-||
|---|-|-|---|---
|-|||||||-|||-||
|-------|---|---
|-|||-|-|-|-|-|-
|---|-|-|-|-|-|-
|-||||||||||||||
|---------------
N = 4
|-|||-|-|-|||-|||-|||-|-|-|||-|-
|---|-|-|---|---|---|-|-|---|-|-
|-|||||||-|||-|||-|||||||-||||||
|-------|---|---|-------|-------
|-|||-|-|-|-|-|-|-|||-|-|-|||-|-
|---|-|-|-|-|-|-|---|-|-|---|-|-
|-|||||||||||||||-|||||||-||||||
|---------------|-------|-------
|-|||-|-|-|||-|||-|||-|||-|||-||
|---|-|-|---|---|---|---|---|---
|-|||||||-|||-|||-|||-|||-|||-||
|-------|---|---|---|---|---|---
|-|||-|-|-|-|-|-|-|-|-|-|-|-|-|-
|---|-|-|-|-|-|-|-|-|-|-|-|-|-|-
|-||||||||||||||||||||||||||||||
|-------------------------------
Ich frage mich, ob es eine kurze algebraische Methode gibt, um diese Struktur zu berechnen.
f(n,x,y)
der direkt berechnet werden kann, ob eine bestimmte Koordinate enthalten soll -
oder nicht |
. Es kann sich um Modulo-Operationen oder bitweise Operationen handeln. Die Techniken, die ich bisher gesehen habe, umfassen alle das Schneiden / Verbinden von Arrays, wie in der Spezifikation gezeigt.
f(x,y)
funktioniert auch, da wenn x,y
gültig, dann das Ergebnis nicht abhängtn
|-
?