In de genetica wordt onderscheid gemaakt tussen twee soorten mutaties (de vervanging van één nucleotide door een andere nucleotide). Bij transities wordt een purine nucleotide (twee ringen) vervangen door een andere purine (AG), of wordt een pyramidine nucleotide (één ring) vervangen door een andere pyramidine (CT). Alle andere mutaties waarbij een pyrine wordt vervangen door een pyramidine, of vice versa, worden transversies genoemd.

mutaties
Alle mogelijke mutaties van nucleotiden.

Ondanks het feit dat er in theorie slechts vier transities en acht transversies mogelijk zijn, is de kans op een transitie in de praktijk veel groter dan die van een transversie omdat het vervangen van een enkele ringstructuur door een andere enkele ringstructuur veel waarschijnlijker is dan het vervangen van een dubbele ring door een enkele ring. Bovendien leiden transities ook minder snel tot een aminozuursubstitutie, waardoor ze ook vaker overleven als stille substituties binnen een populatie.

Opgave

In deze opgave stellen we DNA sequenties voor als strings die enkel bestaat uit de letters A, C, G en T. Deze letters stellen de verschillende nucleotiden voor. De nucleotiden mogen ook met kleine letters geschreven worden. Gegeven twee even lange DNA sequenties $$s_1$$ en $$s_2$$, dan definiëren we de transitie/transversieverhouding $$R(s_1, s_2)$$ als de verhouding van het aantal transities ten opzicht van het aantal transversies, waarbij telkens de nucleotiden op overeenkomstige posities van de twee sequenties met elkaar vergeleken worden.

De transitie/transversieverhouding tussen twee homologe DNA sequenties ligt meestal rond de 2, maar is typisch een stuk hoger binnen eiwitcoderende gebieden omdat transversies daar doorgaans de aminozuursamenstelling wijzigen en dus mogelijk aanleiding geven tot fatale mutaties in het vertaalde eiwit. Puntmutaties die geen aanleiding geven tot een wijziging in het aminozuur (wat een stuk waarschijnlijker is voor transities) worden stille substituties genoemd. Gevraagd wordt:

Geen enkele van deze drie functies mag onderscheid maken tussen hoofdletters en kleine letters in de argumenten die eraan doorgegeven worden.

Voorbeeld

>>> transitie('G', 'A')
True
>>> transitie('t', 'g')
False
>>> transitie('C', 'c')
False

>>> transversie('G', 'A')
False
>>> transversie('t', 'g')
True
>>> transversie('C', 'c')
False

>>> verhouding('ATTAGCATTATCATC', 'AAATAGGATATATGG')
0.2222222222222222

>>> seq1 = 'GCAACGCACAACGAAAACCCTTAGGGACTGGATTATTTCGTGATCGTTGTAGTTATTGGAAGTACGGGCATCAACCCAGTT'
>>> seq2 = 'ttatctgacaaagaaagccgtcaacggctggataatttcgcgatcgtgctggttactggcggtacgagtgttcctttgggt'
>>> verhouding(seq1, seq2)
1.2142857142857142