Ihr Code wird für immer eine sehr einfache ASCII-artige Darstellung der DNA erzeugen. Es werden zwei Zahlen in einem beliebigen Format als Eingabe verwendet: als Liste, als Argumente für eine Funktion, für stdin usw.
- Ein Gleitkommaintervall
I
in Sekunden zwischen 0,0 und 1,0 (einschließlich) - Eine Zoomstufe
Z
als Ganzzahl von 1 bis einschließlich 64
Ihr Code druckt jede I
Sekunde eine Zeile auf stdout oder das Äquivalent davon und erzeugt eine unendliche Ausgabe, die ungefähr so aussieht (für Zoomstufe 4):
A
T-----a
G-------c
G-----c
g
t-----A
a-------T
c-----G
T
A-----t
C-------g
...
Genauer gesagt, unsere Darstellung von DNA ist ein Paar von Sinuswellen , die durch Bindestriche verbunden ist , eine aus den Zeichen a
, c
, g
, und t
, die andere der Zeichen A
, C
, G
, und T
. Wenn x
die 0-indizierten Nummer der Zeile sind wir gerade gedruckt wird , die 0-basierte Position des Zeichens in der Kleinwelle wird durch gegeben (sin(πx / Z) + 1) * Z
, und in der Groß Welle ist gegeben durch (-sin(πx / Z) + 1) * Z
, die beide abgerundet (nicht platt) zum nächstgelegenen ganze Zahl. Weitere Details:
- In Fällen, in denen sich die beiden Wellen überlappen, müssen Sie abwechseln, welche Welle vorne liegt, beginnend mit der Welle in Großbuchstaben. (Wenn wir mit der Welle in Kleinbuchstaben beginnen, erhalten wir eine Doppelhelix, die es nicht gibt !)
- Ignoriert man den Fall, so paart sich A immer mit T und C immer mit G, wie in der realen DNA. Die Paare selbst sollten zufällig mit einer gleichmäßigen Verteilung über die vier Möglichkeiten ausgewählt werden. Es spielt keine Rolle, ob die Auswahl der Paare bei aufeinanderfolgenden Codeausführungen gleich oder unterschiedlich ist. Die statistische Qualität Ihrer zufälligen Auswahl ist kein Problem, solange die Ausgabe kein offensichtliches Muster und einen Zeitraum von mindestens mehreren Milliarden aufweist (fehlerhafte PRNGs wie RANDU sind in Ordnung).
- Sie dürfen entweder keine nachgestellten Leerzeichen haben oder jede Zeile bis zur maximalen Position der Wellen in dieser Zoomstufe auffüllen (im obigen Beispiel neun Zeichen). Zoomstufe 1 kann aus mathematischen Gründen ein optionales zusätzliches nachgestelltes Leerzeichen enthalten.
Da die DNA klein ist, muss Ihr Code so kurz wie möglich sein.
Mehr Beispiele:
Zoomstufe 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
...
Zoomstufe 2:
A
T---a
c
g---C
G
A---t
c
a---T
...
Zoomstufe 1 (beachten Sie das führende Leerzeichen):
G
a
C
t
...