Twój kod na zawsze wygeneruje bardzo prostą reprezentację DNA w stylu ASCII. Przyjmie dwie liczby jako dane wejściowe w dowolnym formacie: jako listę, jako argumenty funkcji, na standardowe wejście itp.
- Przedział zmiennoprzecinkowy
I
w sekundach od 0,0 do 1,0 (włącznie) - Poziom powiększenia
Z
jako liczba całkowita od 1 do 64 (włącznie)
Kod wydrukuje co I
sekundę jeden wiersz na standardowe wyjście lub jego ekwiwalent , tworząc nieskończone wyjście, które wygląda mniej więcej tak (dla poziomu powiększenia 4):
A
T-----a
G-------c
G-----c
g
t-----A
a-------T
c-----G
T
A-----t
C-------g
...
W szczególności, reprezentacja naszym DNA jest para sinusoidalnych połączonych łącznikami, składający się ze znaków a
, c
, g
i t
, z drugiej strony z postaci A
, C
, G
i T
. Jeśli x
jest to indeksowany przez 0 numer linii, którą obecnie drukujemy, pozycja znaku w fali małych liter jest określana przez 0 (sin(πx / Z) + 1) * Z
, a w fali wielkich liter przez (-sin(πx / Z) + 1) * Z
, obie zaokrąglone (nie zmienione) do najbliższej liczba całkowita. Dalsze szczegóły:
- W przypadku, gdy dwie fale zachodzą na siebie, musisz na przemian, która fala znajduje się z przodu, zaczynając od fali wielkiej litery. (Zaczynając od małej litery, dałoby nam podwójną helisę, która nie istnieje !)
- Ignorując wielkość liter, A zawsze łączy się z T i C zawsze łączy się z G, jak w prawdziwym DNA. Same pary powinny być wybierane losowo z równomiernym rozkładem na cztery możliwości. Nie ma znaczenia, czy wybór par jest taki sam, czy różny przy kolejnych uruchomieniach kodu. Jakość statystyczna twoich losowych wyborów nie stanowi problemu, o ile dane wyjściowe nie mają oczywistego wzorca i okresu co najmniej w miliardach (wadliwe PRNG, takie jak RANDU, są w porządku).
- Musisz albo nie mieć spacji końcowych, albo wstawiać każdą linię do maksymalnego położenia fal na tym poziomie powiększenia (w powyższym przykładzie dziewięć znaków). Poziom powiększenia 1 może mieć jedno opcjonalne dodatkowe miejsce na końcu z powodów matematycznych.
Ponieważ DNA jest małe, kod będzie musiał być jak najkrótszy.
Więcej przykładów:
Poziom powiększenia 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
...
Poziom powiększenia 2:
A
T---a
c
g---C
G
A---t
c
a---T
...
Poziom powiększenia 1 (zwróć uwagę na wiodące miejsce):
G
a
C
t
...