あなたのコードは、DNAの非常に単純なASCIIアート表現を永久に生成します。必要な形式の入力として2つの数字を受け取ります。リスト、関数の引数、標準入力などです。
I
0.0〜1.0の秒単位の浮動小数点間隔Z
1から64までの整数としてのズームレベル
コードはI
、1 秒ごとにstdoutまたはそれに相当するものに1行を出力し、次のような無限出力を生成します(ズームレベル4の場合)。
A
T-----a
G-------c
G-----c
g
t-----A
a-------T
c-----G
T
A-----t
C-------g
...
具体的には、DNAの我々の表現は、ハイフンで接続された正弦波のペア、文字から成るものであるa
、c
、g
、及びt
、文字の他A
、C
、G
、およびT
。場合はx
私たちが現在印刷している行の0から始まるインデックス番号で、小文字の波の中の文字の0ベースの位置は次式で与えられ(sin(πx / Z) + 1) * Z
、そして大文字の波にで与えられ(-sin(πx / Z) + 1) * Z
、両方の丸い最寄りに(床のではありません)整数。詳細:
- 2つの波が重なる場合は、大文字の波から始めて、どちらの波が前面にあるかを交互に切り替える必要があります。(小文字の波から始めると、存在しない二重らせんができます!)
- 大文字小文字を無視して、実際のDNAのように、Aは常にTとペアになり、Cは常にGとペアになります。ペア自体は、4つの可能性にわたって均一に分布するようにランダムに選択する必要があります。ペアの選択がコードの連続した実行で同じか異なるかは関係ありません。あなたのランダムな選択の統計的品質は長い出力が明らかなパターンと、少なくとも十億にピリオドがないほどの問題ではありません(のような欠陥のPRNG RANDUは罰金ですが。)
- 後続のスペースがないか、そのズームレベル(上記の例では9文字)ですべての行を波の最大位置までパディングする必要があります。
DNAは小さいため、コードはできるだけ短くする必要があります。
その他の例:
ズームレベル8:
T
C-----g
A-----------t
C-------------g
G---------------c
T-------------a
T-----------a
T-----a
c
g-----C
t-----------A
g-------------C
a---------------T
...
ズームレベル2:
A
T---a
c
g---C
G
A---t
c
a---T
...
ズームレベル1(先頭のスペースに注意):
G
a
C
t
...