Dada uma sequência das bases Adenina, Citosina, Guanina e Timina (codificadas como ACGT
), você deve produzir uma representação artística ASCII de uma fita dupla correspondente de DNA.
O fio se estenderá verticalmente. O fio esquerdo é o que você recebe como entrada. O fio da direita será seu complemento. Para aqueles que não estão familiarizados com o DNA, A
estão emparelhados T
e C
emparelhados G
. Além disso, existe uma estrutura de coluna vertebral em ambos os lados da fita dupla que é idêntica para todas as bases. Portanto, se você recebesse a entrada, TAGCAT
a estrutura em larga escala da arte ASCII seria:
BTAB
BATB
BGCB
BCGB
BATB
BTAB
onde B
representa a espinha dorsal. Agora, cada uma dessas letras representa uma molécula inteira e você deve reproduzir a estrutura molecular real .
As Bases
Use os seguintes modelos 1 para cada uma das bases (cada uma é exibida junto com sua base complementar e as duas moléculas da espinha dorsal):
1 Créditos a Peter Taylor por ajudar com o layout ASCII.
Adenina
O O
\\ /
P
/ \
--O O
/ |
< N NH2 ..... O * |
\ // \ / \\ / |
+--O // ---- ---- |
| \ | // \\ / \\ |
| >--N--< N ...... HN > ---+
| / \ / \ / / |
+--- N=== ---N--< |
| // \ |
| O O--+
| \
| >
| /
O O--
\ /
P
/ \\
O O
Citosina
O O
\\ /
P
/ \
--O O NH2 ..... O N
/ / \\ / \\ |
< ---- ---- \\ ---+
\ // \\ / \\ | / |
+--O < N ...... HN >--N--< |
| \ \ / \ / \ |
| >--N--- ===N O--+
| / \\ / \
+--- O ..... H2N >
| /
O O--
\ /
P
/ \\
O O
Guanina
O O
\\ /
P
/ \
--O O
/ |
< N O ..... H2N |
\ // \ // \ |
+--O // ---- ---- |
| \ | // \ // \\ |
| >--N--< NH ...... N > ---+
| / \ / \ / / |
+--- N=== ---N--< |
| \ // \ |
| NH2 ..... O O--+
| \
| >
| /
O O--
\ /
P
/ \\
O O
Timina
O O
\\ /
P
/ \
--O O * O ..... H2N N
/ \ // \ / \\ |
< ---- ---- \\ ---+
\ // \ // \\ | / |
+--O < NH ...... N >--N--< |
| \ \ / \ / \ |
| >--N--- ===N O--+
| / \\ \
+--- O >
| /
O O--
\ /
P
/ \\
O O
Construindo o fio duplo
Eles se repetem verticalmente, de modo que não haja lacunas na estrutura do backbone. Isso significa que as caixas delimitadoras desses quatro modelos serão sobrepostas.
A extremidade inferior da extremidade esquerda e superior da espinha dorsal direita se conectará à O
de um OH
.
A O
extremidade livre da extremidade esquerda e inferior da espinha dorsal direita terá uma ligação livre entrando para dentro, indicada por --
.
Exemplo 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
Mais exemplos:
Aqui estão os hashes MD5 de vários outros exemplos (sem espaços à esquerda ou à direita):
ATG 2e4a906c44a96fe84134bf4346adf11c (this is the above example)
C e3648b8960967463784818c3eee57246
TTT 6028a90b05775905ef1a00e7a45463c5
TAGCAT 3b834d2b7b9adc4113ffabd52d354c41
GATTACA a19463f965c641d071e07da59d64a418
Deixe-me saber se você acha que algum deles está errado.
Se você não souber como verificar os hashes de seus resultados de maneira confiável, tente este gerador MD5 on-line . Verifique se não há quebra de linha à direita.
Notas adicionais
Você pode usar espaços à esquerda ou à direita como achar melhor. Obviamente, se você usar espaços à esquerda, deve ser a mesma quantidade em cada linha.
Se cometi algum erro ao copiar a estrutura química, os modelos acima ainda são normativos para os propósitos deste desafio.
Você pode escrever uma função ou um programa que use a string de entrada como parâmetro, argumento de linha de comando via STDIN ou espere que ela seja armazenada em uma variável. Escreva a arte ASCII resultante em STDOUT.
Isso é código de golfe, então a resposta mais curta (em bytes) vence.
fonte
TTT
porque a string continha uma nova linha à direita.ATG
saída e recebi uma soma de verificação diferente. E sistemas operacionais diferentes terão somas de verificação diferentes. Você pode tentar isso comunix2dos, unix2mac...
.Digest::MD5.hexdigest()
com finais de linha no estilo Unix. Além disso, nenhum deles tem uma nova linha à direita. Cole aqui - este gerador MD5 on-line concorda com meus hashes.Respostas:
Perl 5 (510)
Perl está bem com bytes nulos, portanto, use o hexdump fornecido para executar isso.
Isso funciona imprimindo diferentes partes da fita de DNA, sendo as partes uma ou mais linhas. Um O ou H é anexado à linha superior de cada componente para garantir uma saída válida.
Assume entrada é na variável
$_
.Versão Golfed:
Versão não destruída:
(-65+ord$&)%15
resulta convenientementeA=>0, C=>2, T=>4, G=>6
, o que é perfeito, pois o programa precisa de dois elementos na matriz para cada letra.A parte central, a parte superior e a parte inferior são armazenadas em índices
8-10
nessa ordem.Lista de peças (usa @ em vez de \ para evitar uma tonelada de escape):
Hexdump:
fonte
s/@/\\/g
faz exatamente isso, antes da impressão. A lista de partes está apenas presente para mostrar quais são os dados compactados.Python 3, 1008
Decompor para blocos menores e depois compactar usando o zlib do python e codificar os dados binários com a codificação asii85. Antes da compactação, o tamanho é 629 e, após a compactação e codificação, o tamanho é 260.
Blocos menores:
O programa lê de STDIN. Pode ter espaços à direita no final de cada linha e pode ter linhas vazias no final.
Soma de verificação correspondida usando este script
E aqui está a versão não destruída:
fonte