Een mutatie is niets anders dan een fout die optreedt tijdens het maken of kopiëren van een nucleïnezuur, in het bijzonder DNA. Omdat nucleïnezuren een vitale rol spelen bij cellulaire functies, hebben mutaties de neiging om een cel grondig dooreen te schudden. Maar hoewel mutaties technisch gezien als fouten kunnen aanzien worden, kunnen ze in zeer zeldzame gevallen een voordeel opleveren voor de cel. De macro-effecten van evolutie zijn dan ook toe te schrijven aan het cumulatieve resultaat van voordelige microscopische mutaties die optreden doorheen een groot aantal generaties.
Stukjes DNA die afkomstig zijn uit het genoom van verschillende organismen of soorten worden homoloog genoemd als ze een recente voorouder hebben. Bij het vergelijken van meerdere homologe DNA-sequenties kan het handig zijn om hun consensussequentie te berekenen. Volgens het biologische principe van parsimony1 — de natuur neigt naar het kortst mogelijke evolutionaire pad — stelt deze sequentie immers de meest waarschijnlijke voorouder van de homologe DNA-sequenties voor.
Een matrix is een rechthoekig rooster van waarden die gerangschikt zijn in rijen en kolommen. Een
Veronderstel dat we beschikken over een reeks DNA-sequenties die allemaal dezelfde lengte
De consensussequentie N
gebruikt als
G C A A A A C G |
|
G C G A A A C T |
|
T A C C T T C A |
|
sequenties | T A T G T T C A |
G C C T T A G G |
|
G A C T T A T A |
|
T C G G A T C C |
|
A 0 3 1 2 3 4 0 3 |
|
profiel | C 0 4 3 1 0 0 5 1 |
G 4 0 2 2 0 0 1 2 |
|
T 3 0 1 2 4 3 1 1 |
|
consensus | G C C N T A C A |
Gevraagd wordt:
Schrijf een functie profiel
waaraan een reeks (Array
) met DNA-sequenties (String
) moet doorgegeven worden. Daarbij wordt een DNA-sequentie voorgesteld als een string (String
) die enkel bestaat uit de hoofdletters A
, C
, G
en T
. Als niet alle DNA-sequenties dezelfde lengte hebben, dan moet de functie een Error
opwerpen met de boodschap sequenties moeten even lang zijn
. Als alle DNA-sequenties wel dezelfde lengte Map
) die elk van de basen A
, C
, G
en T
(String
) afbeeldt op een reeks (Array
) van Number
), waarbij het getal op de
Schrijf een functie consensus
waaraan een profielmatrix (Map
) moet doorgegeven worden. De profielmatrix moet een afbeelding (Map
) zijn die opgebouwd is zoals de waarden die door de functie profiel
teruggegeven worden. De functie consensus
moet de consensussequentie (String
) teruggeven die correspondeert met de gegeven profielmatrix.
> let seqs = ["GCAAAACG", "GCGAAACT", "TACCTTCA", "TATGTTCA", "GCCTTAGG", "GACTTATA", "TCGGATCC"]
> profiel(seqs)
new Map([["A", [0, 3, 1, 2, 3, 4, 0, 3]], ["C", [0, 4, 3, 1, 0, 0, 5, 1]], ["T", [3, 0, 1, 2, 4, 3, 1, 1]], ["G", [4, 0, 2, 2, 0, 0, 1, 2]]])
> consensus(profiel(seqs))
"GCCNTACA"
> seqs = ["GGTATCTTTA", "TTGTCGTCTTAGA", "GGATCCAGAC", "ATTCAATCGA", "TGATCTGGAA", "AGAGTCATGC"]
> profiel(seqs)
Error: sequenties moeten even lang zijn