Biorąc pod uwagę sekwencję zasad: adeninę, cytozynę, guaninę i tyminę (kodowane jako ACGT
), masz stworzyć ASCII reprezentację odpowiadającą podwójnej nici DNA.
Pasmo będzie rozciągać się pionowo. Lewy nić to ten, który podano jako dane wejściowe. Prawe pasmo będzie jego dopełnieniem. Dla tych, którzy nie są zaznajomieni z DNA, A
jest powiązany z T
i C
jest powiązany z G
. Ponadto po obu stronach podwójnej nici znajduje się struktura szkieletowa, która jest identyczna dla wszystkich zasad. Więc jeśli otrzymamy dane wejściowe, TAGCAT
wielkoskalowa struktura sztuki ASCII wyglądałaby następująco:
BTAB
BATB
BGCB
BCGB
BATB
BTAB
gdzie B
reprezentuje kręgosłup. Teraz każda z tych liter oznacza całą cząsteczkę, a ty odtworzysz rzeczywistą strukturę molekularną .
Podstawy
Użyj następujących szablonów 1 dla każdej z zasad (każdy z nich jest wyświetlany razem z komplementarną zasadą i dwiema cząsteczkami szkieletu):
1 Podziękowania dla Petera Taylora za pomoc w układzie ASCII.
Adenina
O O
\\ /
P
/ \
--O O
/ |
< N NH2 ..... O * |
\ // \ / \\ / |
+--O // ---- ---- |
| \ | // \\ / \\ |
| >--N--< N ...... HN > ---+
| / \ / \ / / |
+--- N=== ---N--< |
| // \ |
| O O--+
| \
| >
| /
O O--
\ /
P
/ \\
O O
Cytozyna
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
Tymina
O O
\\ /
P
/ \
--O O * O ..... H2N N
/ \ // \ / \\ |
< ---- ---- \\ ---+
\ // \ // \\ | / |
+--O < NH ...... N >--N--< |
| \ \ / \ / \ |
| >--N--- ===N O--+
| / \\ \
+--- O >
| /
O O--
\ /
P
/ \\
O O
Konstruowanie podwójnej nici
Powtarzają się one pionowo, tak że nie ma żadnych przerw w strukturze szkieletu. Oznacza to, że ramki ograniczające tych czterech szablonów będą się nakładać.
Dolny koniec lewego i górnego końca prawego kręgosłupa połączy się O
z OH
.
Wolny O
na górnym końcu lewego i dolnego końca prawego kręgosłupa będzie miał swobodną wiązanie skierowaną do wewnątrz, oznaczoną przez --
.
Przykład 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
Więcej przykładów:
Oto skróty MD5 kilku innych przykładów (bez obcych początkowych lub końcowych spacji):
ATG 2e4a906c44a96fe84134bf4346adf11c (this is the above example)
C e3648b8960967463784818c3eee57246
TTT 6028a90b05775905ef1a00e7a45463c5
TAGCAT 3b834d2b7b9adc4113ffabd52d354c41
GATTACA a19463f965c641d071e07da59d64a418
Daj mi znać, jeśli uważasz, że któreś z nich są złe.
Jeśli nie masz pewności, jak niezawodnie sprawdzić skróty wyników, wypróbuj ten internetowy generator MD5 . Upewnij się, że nie ma końca linii końcowej.
Dalsze uwagi
Państwo może używać spacji początkowych lub końcowych, jak widać pasuje. Oczywiście, jeśli używasz wiodących spacji, musi to być taka sama ilość w każdym wierszu.
Jeśli popełniłem błędy podczas kopiowania struktury chemicznej, powyższe szablony nadal są normatywne na potrzeby tego wyzwania.
Możesz napisać funkcję lub program, który pobiera ciąg wejściowy jako parametr, argument wiersza poleceń za pośrednictwem STDIN lub oczekuje, że zostanie on zapisany w zmiennej. Napisz wynikową grafikę ASCII do STDOUT.
To jest kod golfowy, więc wygrywa najkrótsza odpowiedź (w bajtach).
źródło
TTT
ponieważ ciąg zawierał znak nowej linii.ATG
dane wyjściowe i otrzymałem inną sumę kontrolną. Różne systemy operacyjne otrzymają różne sumy kontrolne. Możesz spróbować z nimiunix2dos, unix2mac...
.Digest::MD5.hexdigest()
z zakończeniami linii w stylu uniksowym. Ponadto żaden z nich nie ma nowej linii końcowej. Wklej tutaj - ten internetowy generator MD5 zgadza się z moimi skrótami.Odpowiedzi:
Perl 5 (510)
Perl jest w porządku z bajtami zerowymi, więc proszę użyć zrzutu heksowego przewidzianego do uruchomienia tego.
Działa to poprzez drukowanie różnych części nici DNA, przy czym części stanowią jedną lub więcej linii. O lub H jest dołączany do górnego wiersza każdego komponentu, aby zapewnić prawidłowe wyniki.
Zakłada, że dane wejściowe znajdują się w zmiennej
$_
.Wersja golfowa:
Wersja bez golfa:
(-65+ord$&)%15
wygodnie daje wynikA=>0, C=>2, T=>4, G=>6
, co jest idealne, ponieważ program potrzebuje dwóch elementów w tablicy dla każdej litery.Część środkowa, górna i dolna są przechowywane w indeksach
8-10
w tej kolejności.Lista części (używa @ zamiast \, aby uniknąć ton ucieczki):
Hexdump:
źródło
s/@/\\/g
robi dokładnie to przed drukowaniem. Lista części jest jedynie obecna, aby pokazać, co to są skompresowane dane.Python 3, 1008
Dekompozyt na mniejsze bloki, a następnie kompresuj za pomocą zlib Pythona i koduj dane binarne za pomocą kodowania asii85. Przed kompresowaniem rozmiar wynosi 629, a po kompresji i kodowaniu rozmiar 260.
Mniejsze bloki:
Program odczytuje ze STDIN. Może mieć końcowe spacje na końcu każdej linii i może mieć puste linie na końcu.
Suma kontrolna dopasowana przy użyciu tego skryptu
A oto wersja bez golfa:
źródło