Gawędziłem z nieskończonymi sieciami rezystorów (długa historia), kiedy natknąłem się na następujący interesujący wzorzec rekurencyjny:
|-||
|---
Każde wystąpienie tego wzoru jest dwa razy szersze niż wysokie. Aby przejść z jednego poziomu wzoru na następny, należy rozbić ten prostokąt na dwa podbloki (z których każdy jest kwadratem NxN):
AB =
|-||
|---
so A =
|-
|-
and B =
||
--
Połówki te są następnie powielane i układane zgodnie z następującym wzorem:
ABAA
ABBB
giving
|-|||-|-
|---|-|-
|-||||||
|-------
Wyzwanie
Napisz program / funkcję, która przy danej liczbie N
wyświetli N
iterację tego rekurencyjnego projektu. To jest golf.
Format we / wy jest względnie łagodny: możesz zwrócić pojedynczy ciąg, listę ciągów, tablicę znaków 2D itp. Dozwolona jest dowolna końcowa spacja. Możesz także użyć indeksowania 0 lub 1.
Przykłady
Pierwsze kilka iteracji wzoru jest następujące:
N = 0
|-
N = 1
|-||
|---
N = 2
|-|||-|-
|---|-|-
|-||||||
|-------
N = 3
|-|||-|-|-|||-||
|---|-|-|---|---
|-|||||||-|||-||
|-------|---|---
|-|||-|-|-|-|-|-
|---|-|-|-|-|-|-
|-||||||||||||||
|---------------
N = 4
|-|||-|-|-|||-|||-|||-|-|-|||-|-
|---|-|-|---|---|---|-|-|---|-|-
|-|||||||-|||-|||-|||||||-||||||
|-------|---|---|-------|-------
|-|||-|-|-|-|-|-|-|||-|-|-|||-|-
|---|-|-|-|-|-|-|---|-|-|---|-|-
|-|||||||||||||||-|||||||-||||||
|---------------|-------|-------
|-|||-|-|-|||-|||-|||-|||-|||-||
|---|-|-|---|---|---|---|---|---
|-|||||||-|||-|||-|||-|||-|||-||
|-------|---|---|---|---|---|---
|-|||-|-|-|-|-|-|-|-|-|-|-|-|-|-
|---|-|-|-|-|-|-|-|-|-|-|-|-|-|-
|-||||||||||||||||||||||||||||||
|-------------------------------
Zastanawiam się, czy istnieje jakiś krótki algebraiczny sposób obliczenia tej struktury.
f(n,x,y)
która może bezpośrednio obliczyć, czy dana współrzędna powinna zawierać -
lub |
. Może to obejmować operacje modulo lub operacje bitowe. Techniki, które do tej pory widziałem, obejmują wycinanie / łączenie tablic, jak pokazano w specyfikacji.
f(x,y)
działa również, ponieważ jeśli x,y
jest poprawny, wynik nie zależy odn
|-
?