Stavo scherzando con infinite reti di resistori (lunga storia) quando mi sono imbattuto nel seguente schema ricorsivo interessante:
|-||
|---
Ogni istanza di questo modello è doppia rispetto a quella alta. Per passare da un livello del modello a quello successivo, suddividi questo rettangolo in due blocchi secondari (ognuno dei quali è un quadrato NxN):
AB =
|-||
|---
so A =
|-
|-
and B =
||
--
Queste metà vengono quindi duplicate e riorganizzate secondo il modello seguente:
ABAA
ABBB
giving
|-|||-|-
|---|-|-
|-||||||
|-------
Sfida
Scrivi un programma / funzione che, dato un numero N
, genera l' N
iterazione di questo disegno ricorsivo. Questo è il golf.
Il formato I / O è relativamente clemente: è possibile restituire una singola stringa, un elenco di stringhe, una matrice 2D di caratteri, ecc. È consentito uno spazio bianco finale arbitrario. Puoi anche utilizzare l'indicizzazione 0 o 1.
Esempi
Le prime diverse iterazioni del modello sono le seguenti:
N = 0
|-
N = 1
|-||
|---
N = 2
|-|||-|-
|---|-|-
|-||||||
|-------
N = 3
|-|||-|-|-|||-||
|---|-|-|---|---
|-|||||||-|||-||
|-------|---|---
|-|||-|-|-|-|-|-
|---|-|-|-|-|-|-
|-||||||||||||||
|---------------
N = 4
|-|||-|-|-|||-|||-|||-|-|-|||-|-
|---|-|-|---|---|---|-|-|---|-|-
|-|||||||-|||-|||-|||||||-||||||
|-------|---|---|-------|-------
|-|||-|-|-|-|-|-|-|||-|-|-|||-|-
|---|-|-|-|-|-|-|---|-|-|---|-|-
|-|||||||||||||||-|||||||-||||||
|---------------|-------|-------
|-|||-|-|-|||-|||-|||-|||-|||-||
|---|-|-|---|---|---|---|---|---
|-|||||||-|||-|||-|||-|||-|||-||
|-------|---|---|---|---|---|---
|-|||-|-|-|-|-|-|-|-|-|-|-|-|-|-
|---|-|-|-|-|-|-|-|-|-|-|-|-|-|-
|-||||||||||||||||||||||||||||||
|-------------------------------
Mi chiedo se esiste un modo algebrico breve per calcolare questa struttura.
f(n,x,y)
che può calcolare direttamente se una data coordinata deve contenere -
o |
. Potrebbe comportare operazioni modulo o operazioni bit a bit. Le tecniche che ho visto finora riguardano il taglio / l'unione di array come mostrato nelle specifiche.
f(x,y)
funziona anche, poiché se x,y
è valido, il risultato non dipende dan
|-
?