概要
フラクタルをコード化するビットパターンと、フラクタルの世代ごとのスケールファクターおよび世代数を指定して、単純なフラクタルパターンを印刷するプログラムを作成します。
説明
これは、シェルピンスキーカーペットの ASCII表現です。。
ジェネレーション0:
#
ジェネレーション1:
# # #
# #
# # #
ジェネレーション2:
# # # # # # # # #
# # # # # #
# # # # # # # # #
# # # # # #
# # # #
# # # # # #
# # # # # # # # #
# # # # # #
# # # # # # # # #
ASCII Sierpinski Carpetのジェネレーションn + 1は、ジェネレーションnの8つのコピーを含む3x3グリッドで構成され、グリッドの中心要素が欠落しています。
したがって、3x3グリッドを使用して定義され、世代ごとに幅と高さが3倍大きくなるため、スケールファクターは3と言えます。
Sierpinskiカーペットのビットパターンを定義するには、3x3グリッドの要素に0〜8の番号を付け、上から下、左から右、世代n + 1に含まれる整数の対応するビットを設定します。そのグリッド位置での世代nのコピー:
bit: place value: bit pattern: bit value:
0 1 2 1 2 4 1 1 1 1 2 4
3 4 5 8 16 32 1 0 1 8 0 32
6 7 8 64 128 256 1 1 1 64 128 256
integer value = 1 + 2 + 4 + 8 + 32 + 64 + 128 + 256 = 495
スケールファクター2の場合、ビットパターンは次のように配置されます。
0 1
2 3
等々。
あなたの仕事は、この形式のビットパターン、スケールファクター(Sierpinskiカーペットの場合は3など)および世代番号を受け入れ、ASCIIフラクタルを出力するプログラムを作成することです。
入力
プログラムは、ビットパターン、スケールファクタ(2〜5の範囲)、世代数(0〜5の範囲)の3つの整数を受け入れる必要があります。
これらの値に対して入力検証を実行する必要はありません。プログラムが指定された範囲よりも大きい値に対して機能する場合、まったく問題ありません。
入力は、任意の形式(タプル、コンマ/スペース区切りリストなど)で渡すことができます
出力
プログラムは、#
文字と、フラクタルが定義されている位置のスペース、定義されていないダブルスペース、および各行の終わりの改行文字で構成されるフラクタルを出力する必要があります。関数から。
例
入力:
495,3,3
出力(Sierpinski Carpet generation 3):
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
入力:
7,2,5
出力(シェルピンスキートライアングル):
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # #
# # # #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # #
# # # #
# # # # # # # #
# # # #
# # # #
# #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # #
# # # #
# # # # # # # #
# # # #
# # # #
# #
# # # # # # # #
# # # #
# # # #
# #
# # # #
# #
# #
#
入力:
325,3,3
出力(Cantor Dust):
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
入力
186,3,3
出力(Vicsekフラクタル):
#
# # #
#
# # #
# # # # # # # # #
# # #
#
# # #
#
# # #
# # # # # # # # #
# # #
# # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # #
# # #
# # # # # # # # #
# # #
#
# # #
#
# # #
# # # # # # # # #
# # #
#
# # #
#
入力:
279,3,3
出力(非対称フラクタルの例):
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # #
# # # # # # # # #
# # # # # # # # #
# # #
# # #
# # # # # # # # #
# # #
# # #
# # # # # # # # #
# # #
# # #
# # #
#
#
# # #
#
#
# # # # # # # # #
# # #
# # #
# # #
#
#
# # #
#
#
等
ノート:
- これはコードゴルフなので、バイト単位の最短回答が勝ちます
- プログラムは、スタンドアロンまたは3つの入力パラメーターで呼び出され、文字列を返す(または出力する)関数のいずれかです。
- ジェネレーション0は
#
(a#
、ビットパターン0であっても後にスペースが続く)ます。 - 最後の行の末尾の改行はオプションですが、許可されます。各行の末尾の空白も同様です。
279,3,3
か?
"##"
に変更されて、ここでより好きになりました"# "
。行末の末尾にスペースが1つ含まれていますが、これは必須ですか?。最後のルールに従って、私はそれがオプションであると仮定しますが、世代0に末尾のスペースが必要であるという事実は不思議に思います。また、許可されている最大の空白と改行(複数ある)を示す必要があると思います。極端な例として、常に2 * 5 ^ 6スペースの5 ^ 6 = 15625行の配列から始めて、#
sを置き換えることができます。未使用の空白の膨大な量の最も入力の場合には