時々、私が本当に退屈している(本当に退屈している)とき、線分を描き、その上に点を描くのが好きです。
まず、特定のサイズの線分を描画します。これは、Nの値に対して2 ^ Nです。線は、一連の .文字でます。
................
次に、左端にポイントをプロットします。ポイントはX文字ます。
X...............
次に、パターンに従います。最後にプロットしたポイント(これをAと呼びます)から開始し、ライン上の次のプロットポイント(B)に進みます(必要に応じて折り返します)。次に、に進みますライン(C)上の次のプロットポイントます。次に、この3番目のポイント(C)と既にプロットされている次のポイント(D)の中間に新しいポイントをプロットします。
行を折り返すたびに、「中間」は折り返しの方法で決定されます。新しくプロットされたポイントは、常にCの右側にあります。
次の行が現在の行だったとしましょう。次の2点をプロットする方法を次に示します。この例では、重要な各ポイントに文字でラベルを付けます。
X...A...X.X...X.
^
X...A...B.X...X.
^
X...A...B.C...X.
^
X...A...B.C...D.
^
X...X...X.X.A.X.
^
X...X...X.X.A.B.
^
C...X...X.X.A.B.
^
C...D...X.X.A.B.
^
X.A.X...X.X.X.X.
^
前の例に戻ると、次の点が線の中央にプロットされます。
X.......X.......
これはおそらく少し特殊なケースです。次のポイントに進むと、開始した場所がそのまま残ります。唯一の有用な中間点は、それ自体の上に点をプロットするのとは対照的に、「循環」中間点(線上の中間点)です。
以下は、ここから最後までの線にプロットする一連のポイントです。
X.......X.......
X.......X...X...
X.......X.X.X...
X...X...X.X.X...
X...X...X.XXX...
X.X.X...X.XXX...
X.X.X...XXXXX...
次のポイントをプロットする余地はもうありません。隣接する2つのポイントの間に挟まれる必要があるため、N = 4の指定された値の最大深度に達しました。上記のリストの最後の行は「complete 」
チャレンジ
目標は、指定されたNの値に対して完了した行を出力/返す最短のプログラム/名前付き関数を作成することです。上記はN = 4を示しています。
入力
入力は単一の非負整数Nになります。生成された行の長さは2 ^ Nになります。
出力
出力は、長さ2 ^ Nの完成した行で.あり、X文字ます。末尾の改行は重要ではありません。
I / Oの例
0
X
1
XX
2
X.XX
3
X.X.XXX.
4
X.X.X...XXXXX...
5
X.X.X...X...X...X.XXX.XXX.......
(c%b+b)%b?cネガティブになることを期待していますか?