Come forse saprai, nel DNA ci sono quattro basi: adenina ( A), citosina ( C), guanina ( G) e timina ( T). Tipicamente si Alega Te si Clega G, formando i "pioli" della struttura a doppia elica del DNA .
Definiamo il complemento di una base come base a cui si lega - ovvero il complemento di Ais T, il complemento di Tis A, il complemento di Cis Ge il complemento di Gis C. Possiamo anche definire il complemento di una stringa di DNA come stringa con ciascuna base integrata, ad esempio il complemento di GATATCis CTATAG.
A causa della struttura a doppio filamento del DNA, le basi su un filamento sono complementari alle basi sull'altro filamento. Tuttavia il DNA ha una direzione e la trascrizione del DNA avviene in direzioni opposte sui due filamenti. Quindi i biologi molecolari sono spesso interessati al complemento inverso di una stringa di DNA - letteralmente il contrario del complemento della stringa.
Per estendere il nostro esempio precedente, il complemento inverso di GATATCè CTATAGall'indietro, quindi GATATC. Come avrai notato, in questo esempio il complemento inverso è uguale alla stringa originale - chiamiamo tale stringa un palindromo inverso . *
Data una serie di DNA, riesci a trovare la sottostringa più lunga che è un palindromo inverso?
* Uso il termine "palindromo inverso", tratto da Rosalind , per differenziarlo dal solito significato di palindromo.
Ingresso
L'input sarà una singola stringa composta solo da caratteri ACGT maiuscoli. Puoi scrivere una funzione o un programma completo per questa sfida.
Produzione
È possibile scegliere di stampare tramite stampa o ritorno (quest'ultima scelta è disponibile solo nel caso di una funzione).
Il tuo programma dovrebbe produrre la sottostringa palindromica inversa più lunga della stringa di input, se esiste una soluzione unica. Se esistono più soluzioni, è possibile produrre ciascuna di esse o tutte (a scelta). I duplicati vanno bene se si sceglie di emetterli tutti.
L'ingresso è garantito per avere una soluzione di almeno lunghezza 2.
Esempio lavorato
ATGGATCCG -> GGATCC
Il complemento inverso di GGATCCè stesso ( GGATCC --complement--> CCTAGG --reverse--> GGATCC), quindi GGATCCè un palindromo inverso.GATCè anche un palindome inverso, ma non è il più lungo.
Casi 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
punteggio
Questo è il golf del codice, quindi vince la soluzione nel minor numero di byte.