Dada una secuencia de las bases Adenina, Citosina, Guanina y Timina (codificadas como ACGT
), debe producir una representación ASCII de una doble cadena de ADN correspondiente.
El hilo se extenderá verticalmente. El hilo de la izquierda es el que se le da como entrada. El hilo de la derecha será su complemento. Para aquellos que no están familiarizados con el ADN, A
está emparejado T
y C
está emparejado G
. Además, hay una estructura de red troncal a cada lado de la doble cadena que es idéntica para todas las bases. Entonces, si se le dio la entrada, TAGCAT
la estructura a gran escala del arte ASCII sería:
BTAB
BATB
BGCB
BCGB
BATB
BTAB
donde B
representa la columna vertebral. Ahora cada una de estas letras representa una molécula completa y debes reproducir la estructura molecular real .
Las bases
Use las siguientes plantillas 1 para cada una de las bases (cada una se muestra junto con su base complementaria y las dos moléculas principales):
1 Créditos a Peter Taylor por ayudar con el diseño 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
Construyendo el doble filamento
Estos se repiten verticalmente, de modo que no hay espacios en la estructura de la red troncal. Esto significa que los cuadros delimitadores de estas cuatro plantillas se superpondrán.
El extremo inferior del extremo izquierdo y la parte superior de la columna vertebral derecha se conectará a la O
de unaOH
.
El libre O
en el extremo superior del extremo izquierdo e inferior de la columna vertebral derecha tendrá un enlace libre hacia adentro, indicado por --
.
Ejemplo 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
Más ejemplos:
Aquí están los hash MD5 de varios ejemplos más (sin espacios iniciales o finales extraños):
ATG 2e4a906c44a96fe84134bf4346adf11c (this is the above example)
C e3648b8960967463784818c3eee57246
TTT 6028a90b05775905ef1a00e7a45463c5
TAGCAT 3b834d2b7b9adc4113ffabd52d354c41
GATTACA a19463f965c641d071e07da59d64a418
Avíseme si cree que alguno de estos está mal.
Si no está seguro de cómo verificar los hashes de sus resultados de manera confiable, pruebe este generador MD5 en línea . Asegúrese de que no haya un salto de línea final.
Notas adicionales
Usted puede utilizar espacios iniciales o finales como mejor le parezca. Por supuesto, si usa espacios iniciales, debe ser la misma cantidad en cada línea.
Si he cometido algún error al copiar la estructura química, las plantillas anteriores siguen siendo normativas a los efectos de este desafío.
Puede escribir una función o un programa que tome la cadena de entrada como parámetro, argumento de línea de comando a través de STDIN o espere que se almacene en una variable. Escriba el arte ASCII resultante en STDOUT.
Este es el código de golf, por lo que gana la respuesta más corta (en bytes).
fuente
TTT
porque la cadena contenía una nueva línea final.ATG
salida y obtuve diferentes sumas de verificación. Y diferentes sistemas operativos obtendrán diferentes sumas de verificación. Puedes probar esto conunix2dos, unix2mac...
.Digest::MD5.hexdigest()
con terminaciones de línea estilo Unix. Además, ninguno de ellos tiene una nueva línea final. Péguelo aquí : este generador MD5 en línea está de acuerdo con mis hashes.Respuestas:
Perl 5 (510)
Perl está bien con bytes nulos, así que utilice el hexdump provisto para ejecutar esto.
Esto funciona imprimiendo diferentes partes de la cadena de ADN, con partes que son una o más líneas. Se agrega una O o H a la línea superior de cada componente para garantizar una salida válida.
Asume que la entrada está en la variable
$_
.Versión de golf:
Versión sin golf:
(-65+ord$&)%15
resulta convenienteA=>0, C=>2, T=>4, G=>6
, lo cual es perfecto ya que el programa necesita dos elementos en la matriz para cada letra.La parte central, la parte superior y la parte inferior se almacenan en índices
8-10
en ese orden.Lista de partes (usa @ en lugar de \ para evitar una tonelada de escape):
Hexdump:
fuente
s/@/\\/g
hace exactamente eso, antes de imprimir. La lista de partes está simplemente presente para mostrar cuáles son los datos comprimidos.Pitón 3, 1008
Descomponga a bloques más pequeños y luego comprima usando zlib de python y codifique los datos binarios con codificación asii85. Antes de comprimir, el tamaño es 629 y después de la compresión y codificación, el tamaño es 260.
Bloques más pequeños:
El programa lee desde STDIN. Puede tener espacios finales al final de cada línea y puede tener líneas vacías al final.
Suma de comprobación combinada con este script
Y aquí está la versión sin golf:
fuente