Su código va a generar una representación muy simple del ADN en el arte ASCII, para siempre. Tomará dos números como entrada en cualquier formato que desee: como una lista, como argumentos para una función, en stdin, etc.
- Un intervalo de punto flotante
I
en segundos entre 0.0 y 1.0 (inclusive) - Un nivel de zoom
Z
como entero de 1 a 64 (inclusive)
Su código imprimirá una línea en stdout o su equivalente cada I
segundo, produciendo una salida infinita que se parece a esto (para el nivel de zoom 4):
A
T-----a
G-------c
G-----c
g
t-----A
a-------T
c-----G
T
A-----t
C-------g
...
Específicamente, nuestra representación de ADN es un par de ondas sinusoidales conectados por guiones, uno que consiste en los caracteres a
, c
, g
, y t
, el otro de los personajes A
, C
, G
, y T
. Si x
es el número indexado en 0 de la línea que estamos imprimiendo actualmente, la posición basada en 0 del carácter en la onda minúscula viene dada por (sin(πx / Z) + 1) * Z
, y en la onda mayúscula está dada por (-sin(πx / Z) + 1) * Z
, ambos redondeados (sin piso) al más cercano entero. Más detalles:
- En los casos en que las dos ondas se superponen, debe alternar qué onda está en el frente, comenzando con la onda en mayúscula. (¡Comenzar con la onda en minúscula nos daría una doble hélice que no existe !)
- Ignorando el caso, A siempre se empareja con T y C siempre se empareja con G, como en el ADN real. Los pares mismos deben elegirse al azar con una distribución uniforme sobre las cuatro posibilidades. No importa si la elección de los pares es igual o diferente en ejecuciones sucesivas de su código. La calidad estadística de sus elecciones aleatorias no es un problema siempre que el resultado no tenga un patrón obvio y un período de al menos miles de millones (los PRNG defectuosos como RANDU están bien).
- No debe tener espacios finales o rellenar cada línea hasta la posición máxima de las ondas en ese nivel de zoom (en el ejemplo anterior, nueve caracteres). El nivel de zoom 1 puede tener un espacio adicional adicional opcional por razones matemáticas.
Debido a que el ADN es pequeño, su código deberá ser lo más corto posible.
Más ejemplos:
Nivel de zoom 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
...
Nivel de zoom 2:
A
T---a
c
g---C
G
A---t
c
a---T
...
Nivel de zoom 1 (tenga en cuenta el espacio inicial):
G
a
C
t
...