次の興味深い再帰パターンに出くわしたとき、無限抵抗ネットワーク(長い話)をいじっていました。
|-||
|---
このパターンの各インスタンスは、高さの2倍の幅です。パターンのあるレベルから次のレベルに進むには、この長方形を2つのサブブロックに分割します(それぞれがNxNの正方形です)。
AB =
|-||
|---
so A =
|-
|-
and B =
||
--
これらの半分は、次のパターンに従って複製および再配置されます。
ABAA
ABBB
giving
|-|||-|-
|---|-|-
|-||||||
|-------
チャレンジ
数値を指定して、この再帰的設計のth番目の反復をN
出力するプログラム/関数を作成しN
ます。これはゴルフです。
I / O形式は比較的緩やかです。単一の文字列、文字列のリスト、文字の2D配列などを返すことができます。任意の末尾の空白を使用できます。0または1のインデックスを使用することもできます。
例
パターンの最初のいくつかの反復は次のとおりです。
N = 0
|-
N = 1
|-||
|---
N = 2
|-|||-|-
|---|-|-
|-||||||
|-------
N = 3
|-|||-|-|-|||-||
|---|-|-|---|---
|-|||||||-|||-||
|-------|---|---
|-|||-|-|-|-|-|-
|---|-|-|-|-|-|-
|-||||||||||||||
|---------------
N = 4
|-|||-|-|-|||-|||-|||-|-|-|||-|-
|---|-|-|---|---|---|-|-|---|-|-
|-|||||||-|||-|||-|||||||-||||||
|-------|---|---|-------|-------
|-|||-|-|-|-|-|-|-|||-|-|-|||-|-
|---|-|-|-|-|-|-|---|-|-|---|-|-
|-|||||||||||||||-|||||||-||||||
|---------------|-------|-------
|-|||-|-|-|||-|||-|||-|||-|||-||
|---|-|-|---|---|---|---|---|---
|-|||||||-|||-|||-|||-|||-|||-||
|-------|---|---|---|---|---|---
|-|||-|-|-|-|-|-|-|-|-|-|-|-|-|-
|---|-|-|-|-|-|-|-|-|-|-|-|-|-|-
|-||||||||||||||||||||||||||||||
|-------------------------------
この構造を計算するための短い代数的方法があるのだろうか。
f(n,x,y)
、特定の座標に-
またはを含める必要があるかどうかを直接計算できる「単純な」数学式があります|
。モジュロ演算またはビット演算が含まれる場合があります。私がこれまでに見てきた技術はすべて、仕様に示されているように、配列の切断/結合を伴います。
f(x,y)
場合以降も、作品x,y
有効で、結果は依存しませんn
|-
ますか?