귀하의 코드는 매우 간단한 ASCII 아트 표현의 DNA를 영원히 생성 할 것입니다. 리스트, 함수에 대한 인수, stdin 등 원하는 형식으로 두 숫자를 입력으로 사용합니다.
I
0.0에서 1.0 사이 의 부동 소수점 간격 (초)Z
1에서 64까지의 정수인 줌 레벨
코드는 I
초 당 한 줄을 stdout 또는 그와 동등한 것으로 인쇄하여 다음과 같은 무한 출력을 생성합니다 (줌 레벨 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
모두 둥근는 가장 가까운에 (하지 낭패) 정수. 자세한 내용은 :
- 두 개의 파도가 겹치는 경우 대문자로 시작하여 앞쪽에있는 파도를 번갈아 가며 교체해야합니다. (소문자 웨이브로 시작하면 존재하지 않는 이중 나선이 생깁니다 !)
- 대소 문자를 무시하면 A는 항상 T와 쌍을 이루고 C는 항상 실제 DNA와 같이 G와 쌍을 이룹니다. 쌍 자체는 4 가지 가능성에 대한 균일 한 분포로 무작위로 선택되어야합니다. 코드의 연속 실행에서 쌍 선택이 동일하거나 다른지 여부는 중요하지 않습니다. 출력물에 명백한 패턴이없고 최소한 수십억의 기간이있는 한 무작위 선택의 통계적 품질은 문제가되지 않습니다 ( RANDU 와 같은 결함이있는 PRNG 는 괜찮습니다).
- 후행 공백이 없어야하거나 모든 선을 해당 줌 레벨에서 웨이브의 최대 위치까지 채 웁니다 (위의 예에서는 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
...