Il tuo codice genererà per sempre una rappresentazione molto semplice di arte ASCII del DNA. Ci vorranno due numeri come input in qualsiasi formato desiderato: come un elenco, come argomenti per una funzione, su stdin, ecc.
- Un intervallo
Iin virgola mobile in secondi tra 0,0 e 1,0 (incluso) - Un livello di zoom
Zcome numero intero compreso tra 1 e 64 (incluso)
Il tuo codice stamperà una riga su stdout o equivalente ogni Isecondo, producendo un output infinito simile a questo (per il livello di zoom 4):
A
T-----a
G-------c
G-----c
g
t-----A
a-------T
c-----G
T
A-----t
C-------g
...
Specificamente, la nostra rappresentazione di DNA è una coppia di onde sinusoidali collegati da trattini, uno costituita dai caratteri a, c, g, e t, l'altro dei caratteri A, C, G, e T. Se xè il numero con indice 0 della linea che stiamo attualmente stampando, la posizione in base a 0 del carattere nell'onda minuscola è data da (sin(πx / Z) + 1) * Z, e nell'onda maiuscola è data da (-sin(πx / Z) + 1) * Z, entrambe arrotondate (non pavimentate) al più vicino numero intero. Maggiori dettagli:
- Nei casi in cui le due onde si sovrappongono, è necessario alternare quale onda si trova nella parte anteriore, iniziando con l'onda maiuscola. (Iniziare con l'onda minuscola ci darebbe una doppia elica che non esiste !)
- Ignorando il caso, A si accoppia sempre con T e C si accoppia sempre con G, come nel DNA reale. Le coppie stesse dovrebbero essere scelte casualmente con una distribuzione uniforme sulle quattro possibilità. Non importa se la scelta delle coppie è uguale o diversa nelle successive esecuzioni del codice. La qualità statistica delle tue scelte casuali non è un problema fintanto che l'output non ha uno schema evidente e un periodo almeno in miliardi (i PRNG difettosi come RANDU vanno bene).
- Non è necessario avere spazi finali o riempire tutte le linee fino alla posizione massima delle onde a quel livello di zoom (nell'esempio sopra, nove caratteri.) Il livello di zoom 1 può avere uno spazio di trascinamento aggiuntivo opzionale per motivi matematici.
Poiché il DNA è piccolo, il tuo codice dovrà essere il più breve possibile.
Altri esempi:
Livello di 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
...
Livello di zoom 2:
A
T---a
c
g---C
G
A---t
c
a---T
...
Livello di zoom 1 (notare lo spazio iniziale):
G
a
C
t
...