Comme vous le savez peut-être, dans l' ADN, il existe quatre bases: l'adénine ( A
), la cytosine ( C
), la guanine ( G
) et la thymine ( T
). Se A
lie généralement à T
et se C
lie à G
, formant les "échelons" de la structure à double hélice d'ADN .
Nous définissons le complément d'une base comme étant la base à laquelle elle se lie - c'est-à-dire le complément de A
is T
, le complément de T
is A
, le complément de C
is G
et le complément de G
is C
. Nous pouvons également définir le complément d'une chaîne d'ADN comme étant la chaîne avec chaque base complémentée, par exemple le complément de GATATC
isCTATAG
.
Du fait de la structure double brin de l'ADN, les bases d'un brin sont complémentaires des bases de l'autre brin. Cependant, l'ADN a une direction et la transcription de l'ADN se produit dans des directions opposées sur les deux brins. C'est pourquoi les biologistes moléculaires s'intéressent souvent au complément inverse d'une chaîne d'ADN - littéralement à l'inverse du complément de la chaîne.
Pour étendre notre exemple précédent, le complément inverse de GATATC
est CTATAG
vers l'arrière, donc GATATC
. Comme vous l'avez peut-être remarqué, dans cet exemple, le complément inverse est égal à la chaîne d'origine - nous appelons une telle chaîne un palindrome inverse . *
Étant donné une chaîne d'ADN, pouvez-vous trouver la plus longue sous-chaîne qui est un palindrome inversé?
* J'utilise le terme "palindrome inversé", tiré de Rosalind , pour me différencier de la signification habituelle de palindrome.
Contribution
L'entrée sera une chaîne unique composée uniquement des caractères ACGT
en majuscules. Vous pouvez écrire une fonction ou un programme complet pour ce défi.
Production
Vous pouvez choisir de sortir via l'impression ou le retour (ce dernier choix n'est disponible que dans le cas d'une fonction).
Votre programme doit générer la sous-chaîne palindromique inverse la plus longue de la chaîne d'entrée, s'il existe une solution unique. Si plusieurs solutions existent, vous pouvez soit en sortir une seule, soit toutes (votre choix). Les doublons sont corrects si vous choisissez de les sortir tous.
L'entrée est garantie d'avoir une solution d'au moins longueur 2.
Exemple travaillé
ATGGATCCG -> GGATCC
Le complément inverse de GGATCC
est lui-même ( GGATCC --complement--> CCTAGG --reverse--> GGATCC
), tout GGATCC
comme un palindrome inversé.GATC
est également un palindome inversé, mais ce n'est pas le plus long.
Cas de test
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
Notation
C'est le golf de code, donc la solution dans le moins d'octets gagne.