Het menselijk lichaam bestaat uit 10 miljard cellen en in de kern van elk van deze cellen zit een complexe set van instructies die we het menselijke genoom noemen. De instructies zitten opgeslagen in een DNA-keten die is opgedeeld in 23 chromosoomparen. DNA kan voorgesteld worden door een string die enkel de letters (basen) A, C, G, T en - bevat. Hierbij stelt het koppelteken een onbekende base voor. Het menselijke genoom bestaat in totaal uit meer dan 3 miljard basen.

dubbele helix
dubbele helix

Omdat het menselijk genoom uit heel wat herhalingen bestaat, wordt een DNA-keten meestal in gecomprimeerde vorm opgeslagen. Bij het comprimeren vervangt men een reeks van vier of meer opeenvolgende gelijke lettertekens door een code die bestaat uit drie lettertekens: i) een koppelteken (-), ii) een hoofdletter (A tot Z) die 1 tot 26 herhalingen aangeeft, en iii) het herhaalde letterteken zelf. Herhalingsreeksen langer dan 26 worden vervangen door meerdere coderingen, waarbij alle coderingen behalve de laatste een herhaalde reeks met lengte 26 voorstellen. Elk voorkomen van een koppelteken in de oorspronkelijke DNA-keten wordt gecodeerd als een reeks van lengte 1. Zo wordt de DNA-keten ACCC-GTTTTTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA bijvoorbeeld gecodeerd als ACCC-A-G-ET-ZA-DA.

Opgave

  1. Schrijf een functie DNAcompressie die de gecomprimeerde vorm van een gegeven DNA-keten als resultaat teruggeeft. De gegeven DNA-keten moet als parameter aan de functie doorgegeven worden. Zo moet de functie DNAcompressie voor de gegeven string ACCC-GTTTTTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA, de string ACCC-A-G-ET-ZA-DA als resultaat teruggeven.

  2. Schrijf een functie DNAdecompressie die voor een gegeven gecomprimeerde DNA-keten, de oorspronkelijke DNA-keten als resultaat teruggeeft. De gegeven gecomprimeerde DNA-keten moet als parameter aan de functie doorgegeven worden. Zo moet de functie DNAdecompressie voor de gegeven string ACCC-A-G-ET-ZA-DA, de string ACCC-GTTTTTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA als resultaat teruggeven.

Voorbeeld

>>> DNAcompressie('ACCC-GTTTTTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
'ACCC-A-G-ET-ZA-DA'
>>> DNAdecompressie('ACCC-A-G-ET-ZA-DA')
'ACCC-GTTTTTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'