Votre code va générer pour toujours une représentation très simple de l'ADN ASCII de l'ADN. Il prendra deux nombres en entrée dans n'importe quel format que vous souhaitez: comme une liste, comme arguments d'une fonction, sur stdin, etc.
- Un intervalle
Ià virgule flottante en secondes compris entre 0,0 et 1,0 (inclus) - Un niveau de zoom
Zsous forme d'entier de 1 à 64 (inclus)
Votre code imprimera une ligne sur stdout ou son équivalent toutes les Isecondes, produisant une sortie infinie qui ressemble à ceci (pour le niveau de zoom 4):
A
T-----a
G-------c
G-----c
g
t-----A
a-------T
c-----G
T
A-----t
C-------g
...
En particulier, notre représentation de l' ADN est une paire d'ondes sinusoïdales reliés par des traits d' union, une constituée des caractères a, c, g, et t, à l'autre des caractères A, C, G, et T. Si xle numéro 0-indexé de la ligne que nous imprimons actuellement, la position de base 0 du caractère dans la vague minuscule est donnée par (sin(πx / Z) + 1) * Z, et dans la vague majuscule est donnée par (-sin(πx / Z) + 1) * Z, à la fois arrondie (non parqueté) au plus proche entier. Plus de détails:
- Dans les cas où les deux ondes se chevauchent, vous devez alterner celle qui se trouve à l'avant, en commençant par l'onde en majuscule. (Commencer par l'onde minuscule nous donnerait une double hélice qui n'existe pas !)
- En ignorant la casse, A s'associe toujours à T et C s'associe toujours à G, comme dans l'ADN réel. Les paires elles-mêmes doivent être choisies au hasard avec une distribution uniforme sur les quatre possibilités. Peu importe si le choix des paires est le même ou différent lors des exécutions successives de votre code. La qualité statistique de vos choix aléatoires n'est pas un problème tant que la sortie n'a pas de modèle évident et une période au moins dans les milliards (les PRNG défectueux comme RANDU sont très bien.)
- Vous devez avoir aucun espace de fin ou remplir chaque ligne à la position maximale des vagues à ce niveau de zoom (dans l'exemple ci-dessus, neuf caractères.) Le niveau de zoom 1 peut avoir un espace de fin supplémentaire facultatif pour des raisons mathématiques.
Parce que l'ADN est petit, votre code devra être aussi court que possible.
Plus d'exemples:
Niveau 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
...
Niveau de zoom 2:
A
T---a
c
g---C
G
A---t
c
a---T
...
Niveau de zoom 1 (notez l'espace de tête):
G
a
C
t
...