Je jouais avec des réseaux de résistances infinies (longue histoire) quand je suis tombé sur le motif récursif intéressant suivant:
|-||
|---
Chaque instance de ce modèle est deux fois plus large que haute. Pour passer d'un niveau du motif au suivant, vous divisez ce rectangle en deux sous-blocs (chacun étant un carré NxN):
AB =
|-||
|---
so A =
|-
|-
and B =
||
--
Ces moitiés sont ensuite dupliquées et réorganisées selon le modèle suivant:
ABAA
ABBB
giving
|-|||-|-
|---|-|-
|-||||||
|-------
Défi
Écrivez un programme / fonction qui, étant donné un nombre N
, produit la N
ième itération de cette conception récursive. C'est le golf.
Le format d'E / S est relativement indulgent: vous pouvez renvoyer une seule chaîne, une liste de chaînes, un tableau 2D de caractères, etc. Un espace de fin arbitraire est autorisé. Vous pouvez également utiliser l'indexation 0 ou 1.
Exemples
Les premières itérations du modèle sont les suivantes:
N = 0
|-
N = 1
|-||
|---
N = 2
|-|||-|-
|---|-|-
|-||||||
|-------
N = 3
|-|||-|-|-|||-||
|---|-|-|---|---
|-|||||||-|||-||
|-------|---|---
|-|||-|-|-|-|-|-
|---|-|-|-|-|-|-
|-||||||||||||||
|---------------
N = 4
|-|||-|-|-|||-|||-|||-|-|-|||-|-
|---|-|-|---|---|---|-|-|---|-|-
|-|||||||-|||-|||-|||||||-||||||
|-------|---|---|-------|-------
|-|||-|-|-|-|-|-|-|||-|-|-|||-|-
|---|-|-|-|-|-|-|---|-|-|---|-|-
|-|||||||||||||||-|||||||-||||||
|---------------|-------|-------
|-|||-|-|-|||-|||-|||-|||-|||-||
|---|-|-|---|---|---|---|---|---
|-|||||||-|||-|||-|||-|||-|||-||
|-------|---|---|---|---|---|---
|-|||-|-|-|-|-|-|-|-|-|-|-|-|-|-
|---|-|-|-|-|-|-|-|-|-|-|-|-|-|-
|-||||||||||||||||||||||||||||||
|-------------------------------
Je me demande s'il existe une méthode algébrique courte pour calculer cette structure.
f(n,x,y)
qui peut calculer directement si une coordonnée donnée doit contenir -
ou |
. Il peut s'agir d'opérations modulo ou d'opérations au niveau du bit. Les techniques que j'ai vues jusqu'à présent impliquent toutes de couper / joindre des tableaux comme indiqué dans la spécification.
f(x,y)
fonctionne également, car si x,y
est valide, le résultat ne dépend pas den
|-
?