Como sabrán, en el ADN hay cuatro bases: adenina ( A
), citosina ( C
), guanina ( G
) y timina ( T
). Típicamente se A
une T
y se C
une con G
, formando los "peldaños" de la estructura de doble hélice del ADN .
Definimos el complemento de una base como la base a la que se une, es decir, el complemento de A
is T
, el complemento de T
is A
, el complemento de C
is G
y el complemento de G
is C
. También podemos definir que el complemento de una cadena de ADN sea la cadena con cada base complementada, por ejemplo, el complemento de GATATC
is CTATAG
.
Debido a la estructura bicatenaria del ADN, las bases en una cadena son complementarias de las bases en la otra cadena. Sin embargo, el ADN tiene una dirección, y la transcripción del ADN ocurre en direcciones opuestas en las dos cadenas. Por lo tanto, los biólogos moleculares a menudo están interesados en el complemento inverso de una cadena de ADN, literalmente, el reverso del complemento de la cadena.
Para ampliar nuestro ejemplo anterior, el complemento inverso de GATATC
es CTATAG
hacia atrás, entonces GATATC
. Como habrás notado, en este ejemplo el complemento inverso es igual a la cadena original: llamamos a esta cadena un palíndromo inverso . *
Dada una cadena de ADN, ¿puedes encontrar la subcadena más larga que es un palíndromo inverso?
* Uso el término "palíndromo inverso", tomado de Rosalind , para diferenciarlo del significado habitual de palíndromo.
Entrada
La entrada será una sola cadena que constará solo de los caracteres ACGT
en mayúscula. Puede escribir una función o un programa completo para este desafío.
Salida
Puede elegir imprimir mediante impresión o devolución (la última opción solo está disponible en el caso de una función).
Su programa debería generar la subcadena palindrómica inversa más larga de la cadena de entrada, si hay una solución única. Si existen varias soluciones, puede generar cualquiera de ellas o todas (su elección). Los duplicados están bien si elige generarlos todos.
Se garantiza que la entrada tendrá una solución de al menos longitud 2.
Ejemplo trabajado
ATGGATCCG -> GGATCC
El complemento inverso de GGATCC
es sí mismo ( GGATCC --complement--> CCTAGG --reverse--> GGATCC
), por lo que GGATCC
es un palíndromo inverso. GATC
También es un palíndomo inverso, pero no es el más largo.
Casos de prueba
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
Puntuación
Este es el código de golf, por lo que la solución en la menor cantidad de bytes gana.