Recombinatie is een algemeen proces waarbij entiteiten die bestaan uit meerdere componenten, fysiek met elkaar interageren en daarbij componenten uitwisselen om chimerische producten of nakomelingen te maken. Hoewel het concept meestal wordt geassocieerd met overervingsstappen die voorkomen bij levende organismen, bestaan er ook parallellen in de chemie, fysica, bouwkunde en vele andere wetenschappelijke disciplines. Een eenvoudig voorbeeld van recombinatie kan voorgesteld worden als: \[ A\bullet B + C\bullet D \longrightarrow A\bullet D + C\bullet B \] waarbij $$A$$, $$B$$, $$C$$ en $$D$$ uitwisselbare componenten voorstellen, het symbool $$\bullet$$ staat voor een connectie of binding tussen de componenten, en $$A\bullet B, C\bullet D, \ldots$$ de volledige entiteiten voorstellen. Het proces van nucleosynthese uit het domein van de chemische fysica kan bijvoorbeeld beschreven worden als de recombinatie van bestaande kernen waaruit nieuwe kernen gevormd worden. In de biologie kunnen nieuwe genotypes ontstaan door recombinatie van bestaande genen of genomen. In al deze gevallen is een kenmerk van recombinatie dat relatief grote blokken van een onderliggend materiaal uitgewisseld worden tussen individuen, in plaats van een alternatief proces waarbij nieuwe entiteiten gevormd worden door minimale bouwstenen één voor één aan elkaar te zetten.

Opgave

Recombinatie kan ook toegepast worden op natuurlijke taal. Als we vertrekken van twee woorden die even lang zijn, dan is recombinatie het proces waarbij overeenkomstige reeksen van één of meer opeenvolgende letters uitgewisseld worden tussen de twee woorden. Heel af en toe resulteert een dergelijke recombinatie in twee bestaande woorden. Stel dat we bijvoorbeeld vertekken van de volgende twee Engelse woorden:

Als we nu de posities van de letters in de woorden van links naar rechts nummeren vanaf 1, dan krijgen we na uitwisseling van de letters op de posities 2, 3 en 5 twee andere bestaande Engelse woorden met de volgende betekenis:

Deze recombinatie van de woorden BURGUL en AENEAS kan  voorgesteld worden als

recombinatie

In deze opgave werken we met woorden die enkel bestaat uit letters. Gevraagd wordt om de volgende twee functies te schrijven, waaraan telkens twee of drie woorden moeten doorgegeven worden. Hierbij moet telkens gelden dat alle opgegeven woorden dezelfde lengte hebben. Indien dit niet het geval is, dan moeten de functies een AssertionError opwerpen met de boodschap woorden moeten even lang zijn. Het opwerpen van deze AssertionError krijgt telkens voorrang op eventuele andere exceptions die expliciet door de functies opgeworpen worden.

Voorbeeld

>>> recombinatie('burgul', 'aeneas', 'bengal')
'aureus'
>>> recombinatie('oleins', 'arcade', 'oreads')
'alcine'
>>> recombinatie('alevin', 'elodea', 'alodia')
'eleven'

>>> recombinatie('nitrogen', 'fluorine', 'tin')
Traceback (most recent call last):
AssertionError: woorden moeten even lang zijn
>>> recombinatie('nitrogen', 'fluorine', 'aluminium')
Traceback (most recent call last):
AssertionError: woorden moeten even lang zijn

>>> recombinatie('nitrogen', 'fluorine', 'ringtone')
Traceback (most recent call last):
AssertionError: ongeldige recombinatie

>>> chimeren('burgul', 'aeneas', '2-3;5')
('bengal', 'aureus')
>>> chimeren('oleins', 'arcade', '2;4-5')
('oreads', 'alcine')
>>> chimeren('alevin', 'elodea', '2-4;6')
('alodia', 'eleven')

>>> chimeren('nitrogen', 'aluminium', '3-7')
Traceback (most recent call last):
AssertionError: woorden moeten even lang zijn

Bronnen