Ваш код назавжди створить дуже просте зображення 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
...