Ваш код назавжди створить дуже просте зображення ASCII-мистецтва ДНК. Це буде приймати два числа як вхід у будь-якому бажаному форматі: як список, як аргументи до функції, на stdin тощо.
- Інтервал
I
з плаваючою комою в секундах між 0,0 та 1,0 (включно) - Рівень масштабування
Z
як ціле число від 1 до 64 (включно)
Ваш код буде друкувати один рядок у stdout або його еквівалент кожні I
секунди, створюючи нескінченний вихід, який виглядає приблизно так (для масштабу 4 рівня):
A
T-----a
G-------c
G-----c
g
t-----A
a-------T
c-----G
T
A-----t
C-------g
...
В Зокрема, наше уявлення ДНК є парою синусоид , з'єднаних дефісом, один із символів a
, c
, g
і t
, з іншого із символів A
, C
, G
і T
. Якщо x
це номер, який індексується 0, у рядку, який ми зараз друкуємо, то позиція символу на малій хвилі, що базується на 0, задається (sin(πx / Z) + 1) * Z
, а у верхній великій хвилі задається (-sin(πx / Z) + 1) * Z
обома закругленими (не закресленими) до найближчих ціле число. Детальніше:
- У випадках, коли дві хвилі перекриваються, потрібно чергувати, яка хвиля знаходиться спереду, починаючи з великої хвилі. (Починаючи з малої хвилі, ми дамо нам подвійну спіраль, якої не існує !)
- Ігноруючи випадок, A завжди пара з T і C завжди з G, як у реальній ДНК. Самі пари повинні бути обрані випадковим чином з рівномірним розподілом по чотирьох можливостям. Не має значення, чи вибір пар однаковий чи різний у послідовних прогонах вашого коду. Статистична якість ваших випадкових виборів не є проблемою, якщо вихід не має очевидного шаблону та періоду хоча б у мільярдах (хибні PRNG, такі як RANDU , чудово.)
- У вас не повинно бути пробілів або прокладати кожен рядок до максимального положення хвиль на цьому рівні масштабування (у прикладі вище, дев'ять символів.) Рівень масштабування 1 може мати один необов'язковий додатковий простір з математичних причин.
Оскільки ДНК невелика, ваш код повинен бути якомога коротшим.
Більше прикладів:
Рівень масштабу 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
...
Рівень масштабу 2:
A
T---a
c
g---C
G
A---t
c
a---T
...
Збільшити рівень 1 (зверніть увагу на провідний пробіл):
G
a
C
t
...