Heteropolymeren of copolymeren zijn polymeren die opgebouwd zijn uit verschillende monomeren. Dit in tegenstelling tot homopolymeren die uit één enkel monomeer zijn opgebouwd. Onder de commercieel beschikbare copolymeren vinden we acrylonitril-butadieen-styreen (ABS) plastiek, styreen-butadieen rubber (SBR), nitril-butadieen rubber en ethyleenvinylacetaat.

styrene-butadiene
Chemische structuur van styrene-butadiene.

Omdat copolymeren bestaan uit minstens twee soorten samenstellende eenheden (structuureenheden), kunnen ze ingedeeld worden volgens de manier waarop deze eenheden gerangschikt zijn. Periodieke copolymeren zijn bijvoorbeeld copolymeren waarbij de structuureenheden gerangschikt zijn volgens een repeterende reeks. Als de structuureenheden aangeduid worden door hoofdletters, dan kunnen periodieke copolymeren in verkorte notatie geschreven worden als $$(ABC)_n$$. Hierbij stelt $$ABC$$ de periode voor, en geeft $$n \in \mathbb{N}$$ ($$n \geq 2$$) aan dat het periodiek copolymeer bestaat uit $$n$$ herhalingen van de periode.

Opgave

In deze opgave worden copolymeren voorgesteld als strings die bestaan uit hoofdletters. Elke hoofdletter staat daarbij voor één van de structuureenheden waaruit het copolymeer is opgebouwd. Je opdracht bestaat erin om voor een gegeven copolymeer na te gaan of het periodiek is. Indien dat het geval is, dan moet je ook de verkorte notatie van het copolymeer opstellen. Hiervoor ga je als volgt te werk:

Voorbeeld

>>> copolymeer('(AB)_18')
'ABABABABABABABABABABABABABABABABABAB'
>>> copolymeer('(ABBA)_9')
'ABBAABBAABBAABBAABBAABBAABBAABBAABBA'
>>> copolymeer('(ABABBAAAABBB)_3')
'ABABBAAAABBBABABBAAAABBBABABBAAAABBB'
>>> copolymeer('ABABBAAAABBBABABBAAAABBBBBABBAAAABBB')
'ABABBAAAABBBABABBAAAABBBBBABBAAAABBB'

>>> is_periodiek('ABABABABABABABABABABABABABABABABABAB', 'AB')
True
>>> is_periodiek('ABABABABABABABABABABABABABABABABABAB', 'ABA')
False
>>> is_periodiek('ABABABABABABABABABABABABABABABABABAB', 'ABAB')
True
>>> is_periodiek('ABABBAAAABBBABABBAAAABBBABABBAAAABBB', 'ABABBAAAABBB')
True

>>> periode('ABABABABABABABABABABABABABABABABABAB')
'AB'
>>> periode('ABABABABABABABABABABABABABABABABABAB', minimale_herhaling=10)
'AB'
>>> periode('ABABABABABABABABABABABABABABABABABAB', 20)
''
>>> periode('ABBAABBAABBAABBAABBAABBAABBAABBAABBA')
'ABBA'
>>> periode('ABABBAAAABBBABABBAAAABBBABABBAAAABBB')
'ABABBAAAABBB'
>>> periode('ABABBAAAABBBABABBAAAABBBBBABBAAAABBB')
'ABABBAAAABBBABABBAAAABBBBBABBAAAABBB'
>>> periode('ABABBAAAABBBABABBAAAABBBBBABBAAAABBB', 2)
''

>>> afkorting('ABABABABABABABABABABABABABABABABABAB')
'(AB)_18'
>>> afkorting('ABBAABBAABBAABBAABBAABBAABBAABBAABBA')
'(ABBA)_9'
>>> afkorting('ABABBAAAABBBABABBAAAABBBABABBAAAABBB')
'(ABABBAAAABBB)_3'
>>> afkorting('ABABBAAAABBBABABBAAAABBBBBABBAAAABBB')
'ABABBAAAABBBABABBAAAABBBBBABBAAAABBB'