Учитывая последовательность оснований аденин, цитозин, гуанин и тимин (кодируется как ACGT
), вы должны получить художественное представление ASCII соответствующей двойной цепи ДНК.
Нить простирается вертикально. Левая нить - это та, которую вам дают в качестве входных данных. Правая нить будет его дополнением. Для тех, кто не знаком с ДНК, A
в паре с T
и C
в паре с G
. Кроме того, на обеих сторонах двойной цепи имеется структура позвоночника, которая одинакова для всех оснований. Так что, если бы вам дали ввод, TAGCAT
масштабная структура искусства ASCII была бы:
BTAB
BATB
BGCB
BCGB
BATB
BTAB
где B
представляет собой основную Теперь каждая из этих букв обозначает целую молекулу, и вы должны воспроизвести фактическую молекулярную структуру .
Основы
Используйте следующие шаблоны 1 для каждого из оснований (каждое отображается вместе со своим дополнительным основанием и двумя основными цепями):
1 Благодарность Питеру Тейлору за помощь в разметке ASCII.
аденин
O O
\\ /
P
/ \
--O O
/ |
< N NH2 ..... O * |
\ // \ / \\ / |
+--O // ---- ---- |
| \ | // \\ / \\ |
| >--N--< N ...... HN > ---+
| / \ / \ / / |
+--- N=== ---N--< |
| // \ |
| O O--+
| \
| >
| /
O O--
\ /
P
/ \\
O O
цитозин
O O
\\ /
P
/ \
--O O NH2 ..... O N
/ / \\ / \\ |
< ---- ---- \\ ---+
\ // \\ / \\ | / |
+--O < N ...... HN >--N--< |
| \ \ / \ / \ |
| >--N--- ===N O--+
| / \\ / \
+--- O ..... H2N >
| /
O O--
\ /
P
/ \\
O O
гуанин
O O
\\ /
P
/ \
--O O
/ |
< N O ..... H2N |
\ // \ // \ |
+--O // ---- ---- |
| \ | // \ // \\ |
| >--N--< NH ...... N > ---+
| / \ / \ / / |
+--- N=== ---N--< |
| \ // \ |
| NH2 ..... O O--+
| \
| >
| /
O O--
\ /
P
/ \\
O O
тимин
O O
\\ /
P
/ \
--O O * O ..... H2N N
/ \ // \ / \\ |
< ---- ---- \\ ---+
\ // \ // \\ | / |
+--O < NH ...... N >--N--< |
| \ \ / \ / \ |
| >--N--- ===N O--+
| / \\ \
+--- O >
| /
O O--
\ /
P
/ \\
O O
Построение двойной нити
Они повторяются по вертикали, так что в структуре позвоночника нет пробелов. Это означает, что ограничивающие рамки этих четырех шаблонов будут перекрываться.
Нижний конец левого и верхнего конца правой магистрали будет подключаться к O
Ан OH
.
Свободный O
верхний конец левого и нижнего конца правого скелета будет иметь свободную связь, идущую внутрь, обозначенную как --
.
пример ATG
O O--
\\ /
P
/ \
--O O OH
/ |
< N NH2 ..... O * |
\ // \ / \\ / |
+--O // ---- ---- |
| \ | // \\ / \\ |
| >--N--< N ...... HN > ---+
| / \ / \ / / |
+--- N=== ---N--< |
| // \ |
| O O--+
| \
| >
| /
O O O O--
\\ / \ /
P P
/ \ / \\
--O O * O ..... H2N N O O
/ \ // \ / \\ |
< ---- ---- \\ ---+
\ // \ // \\ | / |
+--O < NH ...... N >--N--< |
| \ \ / \ / \ |
| >--N--- ===N O--+
| / \\ \
+--- O >
| /
O O O O--
\\ / \ /
P P
/ \ / \\
--O O O O
/ |
< N O ..... H2N |
\ // \ // \ |
+--O // ---- ---- |
| \ | // \ // \\ |
| >--N--< NH ...... N > ---+
| / \ / \ / / |
+--- N=== ---N--< |
| \ // \ |
| NH2 ..... O O--+
| \
| >
| /
OH O O--
\ /
P
/ \\
--O O
Больше примеров:
Вот хэши MD5 еще нескольких примеров (без посторонних начальных или конечных пробелов):
ATG 2e4a906c44a96fe84134bf4346adf11c (this is the above example)
C e3648b8960967463784818c3eee57246
TTT 6028a90b05775905ef1a00e7a45463c5
TAGCAT 3b834d2b7b9adc4113ffabd52d354c41
GATTACA a19463f965c641d071e07da59d64a418
Дайте мне знать, если вы думаете, что что-то из этого не так.
Если вы не знаете, как надежно проверить хэши своих результатов, попробуйте этот онлайн-генератор MD5. . Убедитесь, что нет разрывов задней линии.
Дальнейшие заметки
Вы можете использовать начальные или конечные пробелы по своему усмотрению. Конечно, если вы используете начальные пробелы, это должно быть одинаковое количество в каждой строке.
Если я допустил какие-либо ошибки при копировании химической структуры, приведенные выше шаблоны все еще являются нормативными для целей этой задачи.
Вы можете написать функцию или программу, которая принимает входную строку в качестве параметра, аргумент командной строки через STDIN или ожидает, что она будет сохранена в переменной. Запишите полученное искусство ASCII в STDOUT.
Это код гольф, поэтому самый короткий ответ (в байтах) выигрывает.
источник
TTT
потому что строка содержала завершающий перевод строки.ATG
вывод и получил другую контрольную сумму. И разные ОС получат разные контрольные суммы. Вы можете попробовать это сunix2dos, unix2mac...
.Digest::MD5.hexdigest()
с окончаниями строк в стиле Unix. Кроме того, ни у одного из них нет новой строки. Вставьте его сюда - этот онлайн генератор MD5 согласен с моими хешами.Ответы:
Perl 5 (510)
Perl в порядке с нулевыми байтами, поэтому, пожалуйста, используйте hexdump, предоставленный для запуска этого.
Это работает путем распечатки различных частей цепи ДНК, причем части представляют собой одну или несколько линий. O или H добавляются в верхнюю строку каждого компонента, чтобы обеспечить корректный вывод.
Предполагается, что вход находится в переменной
$_
.Гольф версия:
Безголовая версия:
(-65+ord$&)%15
удобноA=>0, C=>2, T=>4, G=>6
, что идеально, так как программе нужно два элемента в массиве для каждой буквы.Центральная часть, верхняя часть и нижняя часть хранятся в индексах
8-10
в указанном порядке.Список деталей (использует @ вместо \, чтобы избежать тонны побега):
HexDump:
источник
s/@/\\/g
делает именно это, перед печатью. Список частей просто присутствует, чтобы показать, что представляют собой сжатые данные.Питон 3, 1008
Разобрать на меньшие блоки, а затем сжать с помощью Python zlib и кодировать двоичные данные с кодировкой asii85. Перед сжатием размер равен 629, а после сжатия и кодирования - 260.
Меньшие блоки:
Программа читает из STDIN. Он может иметь пробелы в конце каждой строки и может содержать пустые строки в конце.
Контрольная сумма соответствует этому сценарию
И вот версия без заглатывания:
источник