Het genoom van een levend organisme bestaat uit een opeenvolging van genen. Deze genen coderen voor de eiwitten die het functioneren van de cellen sturen waaruit het organisme is opgebouwd. Genen kunnen voorwaarts of achterwaarts georiënteerd zijn en we veronderstellen hier dat ze elkaar niet overlappen. Tussen twee genen kunnen fragmenten liggen die niet coderen voor eiwitten. Deze niet-coderende fragmenten worden soms ook junk DNA genoemd. Genoomfragmenten kunnen op twee manieren voorgesteld worden: grafisch of symbolisch. Een genoomfragment kan grafisch op de volgende manier voorgesteld worden:
Het aantal symbolen dat gebruikt wordt voor de grafische voorstelling van een gen of een niet-coderend fragment staat in verhouding tot de lengte ervan op het genoom. Voor deze opgave mag je ervan uitgaan dat alle genen en niet-coderende fragmenten in de voorstelling van een genoomfragment (zowel grafisch als symbolisch) maximaal lengte 9 hebben.
Een voorwaarts gen wordt voorgesteld door nul of meer opeenvolgende gelijktekens (=) gevolgd door een groter dan teken (>). Zo wordt een voorwaarts gen van lengte vier voorgesteld door de tekenreeks ===> en stelt de tekenreeks > een voorwaarts gen van lengte één voor.
Een achterwaarts gen wordt voorgesteld door een kleiner dan teken (<) gevolgd door nul of meer opeenvolgende gelijktekens (=).
Een niet-coderend fragment wordt voorgesteld door één of meer opeenvolgende koppeltekens (-).
Wanneer een achterwaarts gen onmiddellijk gevolgd wordt door een voorwaarts gen — zonder tussenliggend niet-coderend fragment — en wanneer bovendien minstens één van beide genen minstens lengte twee heeft, dan worden deze genen in de grafische voorstelling van elkaar gescheiden door een verticale streep (|). Op die manier kan ondubbelzinnig bepaald worden welke gelijktekens bij welk gen behoren. De grafische voorstelling <==> kan immers dubbelzinnig geïnterpreteerd worden als <|==>, <=|=> of <==|>. De grafische voorstelling <> kan daarentegen niet dubbelzinnig geïnterpreteerd worden, en stelt een achterwaarts gen van lengte één voor, gevolgd door een voorwaarts gen van lengte één.
Zo is de string ----==>--<===--<==|===>---- de grafische voorstelling van een genoomfragment met een voorwaarts gen, gevolgd door twee opeenvolgende achterwaartse genen, gevolgd door een voorwaarts gen. Alle genen worden hierbij gescheiden door niet-coderende fragmenten, behalve de laatste twee genen. Omdat deze laatste twee genen een voorbeeld vomen van het geval beschreven in het laatste puntje in bovenstaande lijst, moet er in de grafische voorstelling een verticale streep tussen beide genen geplaatst worden.
Bij de symbolische voorstelling van een genoomfragment wordt elk gen of niet-coderend fragment weergegeven als een code die bestaat uit een lettercode gevolgd door een getal. De lettercode geeft aan om welk type van fragment het gaat (zie onderstaande tabel), en het getal drukt de lengte van het fragment uit. Zo staat V4 voor een voorwaarts gen van lengte vier, A1 voor een achterwaarts gen van lengte één, en N3 voor een niet-coderend fragment van lengte drie. De codes van de opeenvolgende fragmenten uit het genoomfragment worden dan na elkaar geplaatst in één enkele string. Zo kan het genoomfragment dat hierboven grafisch werd weergegeven, symbolisch worden voorgesteld als N4V3N2A4N2A3V4N4.
fragment | lettercode | voorbeeld | grafisch |
---|---|---|---|
voorwaarts gen | V | V4 | ===> |
achterwaarts gen | A | A1 | < |
niet-coderend fragment | N | N3 | --- |
Schrijf een functie code2graf, die een gegeven code die gebruikt wordt in de symbolische voorstelling van een genoomfragment omzet naar de corresponderende grafische voorstelling. Er moet dus een code als argument aan de functie doorgegeven worden, en de functie moet de corresponderende grafische voorstelling als resultaat teruggeven. Zo moet de functie bijvoorbeeld voor de gegeven code A3 de string <== als resultaat teruggeven.
Gebruik de functie code2graf om een functie symb2graf te schrijven. Aan deze functie moet de symbolische voorstelling van een genoomfragment als argument doorgegeven worden. De functie moet dan de corresponderende grafische voorstelling van het genoomfragment als resultaat teruggeven. Zo moet de functie voor het argument N4V3N2A4N2A3V4N4 de waarde ----==>--<===--<==|===>---- teruggeven.
Schrijf een functie graf2symb. Aan deze functie moet de grafische voorstelling van een genoomfragment als argument doorgegeven worden. De functie moet dan de corresponderende symbolische voorstelling van het genoomfragment als resultaat teruggeven. Zo moet de functie voor de argument ----==>--<===--<==|===>---- de waarde N4V3N2A4N2A3V4N4 teruggeven.
>>> code2graf('V4')
'===>'
>>> code2graf('A3')
'<=='
>>> symb2graf('N4V3N2A4N2A3V4N4')
'----==>--<===--<==|===>----'
>>> graf2symb('----==>--<===--<==|===>----')
'N4V3N2A4N2A3V4N4'
>>> symb2graf('N4V3N2A4N2A3V4N4')
'----==>--<===--<==|===>----'
>>> graf2symb('----==>--<===--<==|===>----')
'N4V3N2A4N2A3V4N4'
>>> symb2graf('N2V4N2V4N2V4N2')
'--===>--===>--===>--'
>>> graf2symb('--===>--===>--===>--')
'N2V4N2V4N2V4N2'
>>> symb2graf('A1V1A1V1A1V1A1V1')
'<><><><>'
>>> graf2symb('<><><><>')
'A1V1A1V1A1V1A1V1'
>>> symb2graf('A2V2A2V2A2V2A2V2')
'<=|=><=|=><=|=><=|=>'
>>> graf2symb('<=|=><=|=><=|=><=|=>')
'A2V2A2V2A2V2A2V2'
>>> symb2graf('A2V1A1V2A2V1A1V2')
'<=|><|=><=|><|=>'
>>> graf2symb('<=|><|=><=|><|=>')
'A2V1A1V2A2V1A1V2'