Jak zapewne wiesz, w DNA są cztery zasady - adenina ( A
), cytozyna ( C
), guanina ( G
) i tymina ( T
). Zwykle A
wiązania z T
i C
wiązania z G
tworzącą „szczeble” z podwójną spiralą DNA .
Definiujemy dopełnienie zasady jako bazę, z którą się wiąże - tj. Dopełnienie A
jest T
, dopełnienie T
jest A
, uzupełnienie C
jest G
i uzupełnienie G
jest C
. Możemy również zdefiniować dopełnienie łańcucha DNA jako ciąg z każdą komplementowaną zasadą, np. Dopełnienie GATATC
to CTATAG
.
Ze względu na dwuniciową strukturę DNA zasady jednej nici są komplementarne do zasad drugiej nici. Jednak DNA ma kierunek, a transkrypcja DNA zachodzi w przeciwnych kierunkach na dwóch niciach. Dlatego biolodzy molekularni są często zainteresowani odwrotnym dopełnieniem łańcucha DNA - całkiem dosłownie odwrotnością dopełniacza łańcucha.
Aby rozszerzyć nasz poprzedni przykład, odwrotne uzupełnienie GATATC
jest odwrotne CTATAG
, więc GATATC
. Jak można zauważyć, w tym przykładzie odwrotne uzupełnienie jest równe pierwotnemu ciągowi - taki ciąg nazywamy odwrotnym palindromem . *
Biorąc pod uwagę ciąg DNA, czy możesz znaleźć najdłuższy substrat, którym jest odwrotny palindrom?
* Używam terminu „odwrotny palindrom” zaczerpnięty z Rosalind , aby odróżnić się od zwykłego znaczenia palindromu.
Wejście
Dane wejściowe będą stanowić pojedynczy ciąg znaków składający się wyłącznie ze znaków ACGT
pisanych wielkimi literami. Możesz napisać funkcję lub pełny program dla tego wyzwania.
Wynik
Możesz zdecydować się na wydruk za pośrednictwem drukowania lub zwrotu (ten drugi wybór jest dostępny tylko w przypadku funkcji).
Twój program powinien wypisać najdłuższy odwrotny palindromiczny podciąg ciągu wejściowego, jeśli istnieje unikalne rozwiązanie. Jeśli istnieje wiele rozwiązań, możesz wydrukować dowolne z nich lub wszystkie (według własnego wyboru). Duplikaty są w porządku, jeśli zdecydujesz się wydrukować je wszystkie.
Gwarantowane wejście ma rozwiązanie o długości co najmniej 2.
Przykład działał
ATGGATCCG -> GGATCC
Odwrotnym dopełnieniem GGATCC
jest samo ( GGATCC --complement--> CCTAGG --reverse--> GGATCC
), podobnie GGATCC
jak odwrotny palindrom. GATC
jest także odwrotnym palindomem, ale nie jest najdłuższy.
Przypadki testowe
AT -> AT
CGT -> CG
AGCA -> GC
GATTACA -> AT, TA
ATGGATCCG -> GGATCC
CCCCCGGGGG -> CCCCCGGGGG
ACATATATAGACT -> ATATAT, TATATA
ATTCGATCTATGTAAAGAGG -> TCGA, GATC
CGCACGTCTACGTACCTACGTAG -> CTACGTAG
TCAATGCATGCGGGTCTATATGCAT -> ATGCAT, GCATGC [, ATGCAT]
CGCTGAACTTTGCCCGTTGGTAGAACGGACTGATGTGAACGAGTGACCCG -> CG, GC, TA, AT [, GC, CG, CG, CG, CG]
CTCGCGTTTGCATAACCGTACGGGCGGAACAGTCGGCGGTGCCTCCCAGG -> CCGTACGG
Punktacja
To jest kod golfowy, więc wygrywa rozwiązanie w najmniejszej liczbie bajtów.