Data una sequenza delle basi Adenina, Citosina, Guanina e Timina (codificate come ACGT
), dovrete produrre una rappresentazione artistica ASCII di un corrispondente doppio filamento di DNA.
Il filo si estenderà verticalmente. Il filo sinistro è quello che ti viene dato come input. Il filo di destra sarà il suo complemento. Per coloro che non hanno familiarità con il DNA, A
è associato T
e C
associato G
. Inoltre, vi è una struttura a spina dorsale su entrambi i lati del doppio filo che è identico per tutte le basi. Quindi, se ti venisse dato l'input, TAGCAT
la struttura su larga scala dell'arte ASCII sarebbe:
BTAB
BATB
BGCB
BCGB
BATB
BTAB
dove B
rappresenta la spina dorsale. Ora ognuna di queste lettere rappresenta un'intera molecola e devi riprodurre l' attuale struttura molecolare .
Le basi
Utilizzare i seguenti modelli 1 per ciascuna delle basi (ognuna viene visualizzata insieme alla sua base complementare e alle due molecole della spina dorsale):
1 crediti a Peter Taylor per l'aiuto con il 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
Costruire il doppio filo
Questi si ripetono verticalmente, in modo tale che non ci siano spazi vuoti nella struttura della spina dorsale. Ciò significa che le caselle di delimitazione di questi quattro modelli si sovrapporranno.
L'estremità inferiore dell'estremità sinistra e superiore del backbone destro si collegherà alla O
di un OH
.
Il libero O
all'estremità superiore dell'estremità sinistra e inferiore della spina dorsale destra avrà un legame libero che va verso l'interno, indicato da --
.
Esempio 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
Altri esempi:
Ecco gli hash MD5 di molti altri esempi (senza spazi iniziali o finali estranei):
ATG 2e4a906c44a96fe84134bf4346adf11c (this is the above example)
C e3648b8960967463784818c3eee57246
TTT 6028a90b05775905ef1a00e7a45463c5
TAGCAT 3b834d2b7b9adc4113ffabd52d354c41
GATTACA a19463f965c641d071e07da59d64a418
Fammi sapere se pensi che qualcuno di questi sia sbagliato.
Se non sei sicuro di come verificare in modo affidabile gli hash dei risultati, prova questo generatore MD5 online . Assicurarsi che non vi siano interruzioni di riga finali.
Ulteriori note
È possibile utilizzare gli spazi iniziali o finali, come si vede in forma. Ovviamente, se usi spazi iniziali deve essere lo stesso importo in ogni riga.
Se ho commesso degli errori nel copiare la struttura chimica, i modelli sopra riportati sono ancora normativi ai fini di questa sfida.
È possibile scrivere una funzione o un programma che accetta la stringa di input come parametro, argomento della riga di comando tramite STDIN o si aspetta che sia memorizzato in una variabile. Scrivi l'arte ASCII risultante su STDOUT.
Questo è il golf del codice, quindi vince la risposta più breve (in byte).
TTT
perché la stringa conteneva una nuova riga finale.
ATG
output e ho ottenuto un checksum diverso. E diversi sistemi operativi avranno diversi checksum. Puoi provarli con unix2dos, unix2mac...
.
Digest::MD5.hexdigest()
con terminazioni di linea in stile Unix. Inoltre, nessuno di loro ha una nuova riga finale. Incollalo qui : questo generatore MD5 online è d'accordo con i miei hash.