Я возился с бесконечными резисторными сетями (длинная история), когда натолкнулся на следующую интересную рекурсивную схему:
|-||
|---
Каждый экземпляр этого шаблона в два раза шире, чем высокий. Чтобы перейти от одного уровня шаблона к следующему, вы разбиваете этот прямоугольник на два подблока (каждый из которых представляет собой квадрат 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
|-
?