Ваш код будет генерировать очень простое представление ДНК в ASCII-искусстве, навсегда. В качестве входных данных он будет принимать два числа в любом формате: в виде списка, в качестве аргументов функции, в stdin и т. Д.
- Интервал с плавающей запятой
I
в секундах от 0,0 до 1,0 (включительно) - Уровень масштабирования
Z
в виде целого числа от 1 до 64 (включительно)
Ваш код будет печатать одну строку в стандартный вывод или его эквивалент каждую 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
...