Étant donné une séquence des bases Adenine, Cytosine, Guanine et Thymine (codées comme ACGT
), vous devez produire une représentation artistique ASCII d'un double brin d'ADN correspondant.
Le brin s'étendra verticalement. Le brin de gauche est celui qui vous est donné en entrée. Le brin droit sera son complément. Pour ceux qui ne sont pas familiers avec l'ADN, A
est couplé avec T
et C
est couplé avec G
. De plus, il y a une structure de squelette de chaque côté du double brin qui est identique pour toutes les bases. Donc, si vous avez reçu l'entrée, TAGCAT
la structure à grande échelle de l'art ASCII serait:
BTAB
BATB
BGCB
BCGB
BATB
BTAB
où B
représente l'épine dorsale. Maintenant, chacune de ces lettres représente une molécule entière et vous devez reproduire la structure moléculaire réelle .
Les bases
Utilisez les modèles 1 suivants pour chacune des bases (chacune est affichée avec sa base complémentaire et les deux molécules du squelette):
1 Remerciements à Peter Taylor pour sa contribution à la mise en page ASCII.
Adénine
O O
\\ /
P
/ \
--O O
/ |
< N NH2 ..... O * |
\ // \ / \\ / |
+--O // ---- ---- |
| \ | // \\ / \\ |
| >--N--< N ...... HN > ---+
| / \ / \ / / |
+--- N=== ---N--< |
| // \ |
| O O--+
| \
| >
| /
O O--
\ /
P
/ \\
O O
Cytosine
O O
\\ /
P
/ \
--O O NH2 ..... O N
/ / \\ / \\ |
< ---- ---- \\ ---+
\ // \\ / \\ | / |
+--O < N ...... HN >--N--< |
| \ \ / \ / \ |
| >--N--- ===N O--+
| / \\ / \
+--- O ..... H2N >
| /
O O--
\ /
P
/ \\
O O
Guanine
O O
\\ /
P
/ \
--O O
/ |
< N O ..... H2N |
\ // \ // \ |
+--O // ---- ---- |
| \ | // \ // \\ |
| >--N--< NH ...... N > ---+
| / \ / \ / / |
+--- N=== ---N--< |
| \ // \ |
| NH2 ..... O O--+
| \
| >
| /
O O--
\ /
P
/ \\
O O
Thymine
O O
\\ /
P
/ \
--O O * O ..... H2N N
/ \ // \ / \\ |
< ---- ---- \\ ---+
\ // \ // \\ | / |
+--O < NH ...... N >--N--< |
| \ \ / \ / \ |
| >--N--- ===N O--+
| / \\ \
+--- O >
| /
O O--
\ /
P
/ \\
O O
Construire le double brin
Ceux-ci se répètent verticalement, de sorte qu'il n'y a pas de lacunes dans la structure de l'épine dorsale. Cela signifie que les boîtes englobantes de ces quatre modèles se chevaucheront.
L'extrémité inférieure de l'extrémité gauche et supérieure de la colonne vertébrale droite se connectera à celle O
d'un OH
.
Le libre O
à l'extrémité supérieure de l'extrémité gauche et inférieure de l'épine dorsale droite aura une liaison libre vers l'intérieur, indiquée par --
.
Exemple 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
Plus d'exemples:
Voici les hachages MD5 de plusieurs autres exemples (sans espaces de début ou de fin étrangers):
ATG 2e4a906c44a96fe84134bf4346adf11c (this is the above example)
C e3648b8960967463784818c3eee57246
TTT 6028a90b05775905ef1a00e7a45463c5
TAGCAT 3b834d2b7b9adc4113ffabd52d354c41
GATTACA a19463f965c641d071e07da59d64a418
Faites-moi savoir si vous pensez que certains d'entre eux sont faux.
Si vous ne savez pas comment vérifier de manière fiable les hachages de vos résultats, essayez ce générateur MD5 en ligne . Assurez-vous qu'il n'y a pas de rupture de ligne de fuite.
Notes complémentaires
Vous pouvez utiliser des espaces de début ou de fin comme bon vous semble. Bien sûr, si vous utilisez des espaces de début, il doit être le même montant dans chaque ligne.
Si j'ai fait des erreurs lors de la copie de la structure chimique, les modèles ci-dessus sont toujours normatifs aux fins de ce défi.
Vous pouvez écrire une fonction ou un programme qui prend la chaîne d' entrée comme paramètre, argument de ligne de commande via STDIN ou s'attend à ce qu'elle soit stockée dans une variable. Écrivez l'art ASCII résultant dans STDOUT.
Il s'agit du code golf, donc la réponse la plus courte (en octets) l'emporte.
la source
TTT
car la chaîne contenait une nouvelle ligne de fin.ATG
sortie et j'ai obtenu une somme de contrôle différente. Et différents OS recevront des sommes de contrôle différentes. Vous pouvez les essayer avecunix2dos, unix2mac...
.Digest::MD5.hexdigest()
avec des fins de ligne de style Unix. De plus, aucun d'entre eux n'a de nouvelle ligne de fin. Collez-le ici - ce générateur MD5 en ligne est d'accord avec mes hachages.Réponses:
Perl 5 (510)
Perl va bien avec des octets nuls, veuillez donc utiliser le hexdump fourni pour exécuter ceci.
Cela fonctionne en imprimant différentes parties du brin d'ADN, les parties étant une ou plusieurs lignes. Un O ou H est ajouté à la ligne supérieure de chaque composant pour garantir une sortie valide.
Suppose que l'entrée se trouve dans la variable
$_
.Version golfée:
Version non golfée:
(-65+ord$&)%15
résulte commodément enA=>0, C=>2, T=>4, G=>6
, ce qui est parfait car le programme a besoin de deux éléments dans le tableau pour chaque lettre.La partie centrale, la partie supérieure et la partie inférieure sont stockées dans des index
8-10
dans cet ordre.Liste des pièces (utilise @ au lieu de \ pour éviter une tonne de fuite):
Hexdump:
la source
s/@/\\/g
fait exactement cela, avant l'impression. La liste des parties est simplement présente pour montrer quelles sont les données compressées.Python 3, 1008
Décomposer en blocs plus petits, puis compresser à l'aide de zlib de python et encoder les données binaires avec le codage asii85. Avant la compression, la taille est 629 et après compression et encodage, la taille est 260.
Blocs plus petits:
Le programme lit à partir de STDIN. Il peut avoir des espaces de fin à la fin de chaque ligne et peut avoir des lignes vides à la fin.
Somme de contrôle correspondant à l'aide de ce script
Et voici la version non golfée:
la source