Я плутався з нескінченними резисторними мережами (довга історія), коли зіткнувся з такою цікавою рекурсивною схемою:
|-||
|---
Кожен екземпляр цього шаблону вдвічі ширший, ніж високий. Щоб перейти від одного рівня шаблону до іншого, ви розділите цей прямокутник на два підблоки (кожен з яких - квадрат NxN):
AB =
|-||
|---
so A =
|-
|-
and B =
||
--
Потім ці половинки дублюються та переставляються відповідно до наступної схеми:
ABAA
ABBB
giving
|-|||-|-
|---|-|-
|-||||||
|-------
Виклик
Напишіть програму / функцію, яка, задавши число N
, виводить N
ітерацію цієї рекурсивної конструкції. Це гольф.
Формат вводу / виводу є порівняно м'яким: ви можете повернути один рядок, список рядків, двовимірний масив символів тощо. Дозволено довільний пробіл пробілів. Ви також можете використовувати індексацію 0 або 1.
Приклади
Перші кілька ітерацій шаблону наступні:
N = 0
|-
N = 1
|-||
|---
N = 2
|-|||-|-
|---|-|-
|-||||||
|-------
N = 3
|-|||-|-|-|||-||
|---|-|-|---|---
|-|||||||-|||-||
|-------|---|---
|-|||-|-|-|-|-|-
|---|-|-|-|-|-|-
|-||||||||||||||
|---------------
N = 4
|-|||-|-|-|||-|||-|||-|-|-|||-|-
|---|-|-|---|---|---|-|-|---|-|-
|-|||||||-|||-|||-|||||||-||||||
|-------|---|---|-------|-------
|-|||-|-|-|-|-|-|-|||-|-|-|||-|-
|---|-|-|-|-|-|-|---|-|-|---|-|-
|-|||||||||||||||-|||||||-||||||
|---------------|-------|-------
|-|||-|-|-|||-|||-|||-|||-|||-||
|---|-|-|---|---|---|---|---|---
|-|||||||-|||-|||-|||-|||-|||-||
|-------|---|---|---|---|---|---
|-|||-|-|-|-|-|-|-|-|-|-|-|-|-|-
|---|-|-|-|-|-|-|-|-|-|-|-|-|-|-
|-||||||||||||||||||||||||||||||
|-------------------------------
Цікаво, чи існує якийсь короткий алгебраїчний спосіб обчислити цю структуру.
f(n,x,y)
яка може безпосередньо обчислити, чи повинна містити дана координата -
або |
. Це може включати модульні операції або бітові операції. До цих пір усі методи, які я бачив, включають різання / з'єднання масивів, як показано у специфікації.
f(x,y)
також працює, оскільки якщо x,y
це дійсно, результат не залежить відn
|-
?