Welke andere woordenreeks zit er in deze woordenreeks verstopt?
steeneiken, bosbes, lagere, lidmaat, latent, reebruin
Dit is de woordenreeks die we zochten
eikenbos, beslag, erelid, maatlat, entree, bruinsteen
Je bekomt deze reeks door elk woord in twee delen te splitsen.
De verstopte woorden krijg je dan door telkens het tweede deel van een woord samen te voegen met het eerste deel van het volgende woord. Het laatste verstopte woord krijg je door het tweede deel van het laatste woord samen te voegen met het eerste deel van het eerste woord.
Een samenraapsel is een woord dat samengesteld is uit twee delen die elk uit één of meer letters bestaan. De twee delen van een samenraapsel kunnen van elkaar onderscheiden worden omdat één deel in hoofdletters geschreven wordt en het andere in kleine letters: steenEIKEN of STEENeiken.
Door een reeks samenraapsels te recombineren ontstaat een nieuwe reeks woorden: het eerste woord is de samenstelling van het tweede deel van het eerste samenraapsel en het eerste deel van het tweede samenraapsel, het tweede woord is de samenstelling van het tweede deel van het tweede samenraapsel en het eerste deel van het derde samenraapsel, … en het laatste woord is de samenstelling van het tweede deel van het laatste samenraapsel en het eerste deel van het eerste samenraapsel.
We zeggen dat samenraapsel $$s$$ opgevolgd wordt door samenraapsel $$t$$ — of dat $$t$$ een opvolger is van $$s$$ — als het eerste deel van $$t$$ gelijk is aan het tweede deel van $$s$$. Bij het vergelijken van delen wordt geen onderscheid gemaakt tussen hoofdletters en kleine letters.
Als we de woorden die onstaan uit de recombinatie van een reeks samenraapsels ook noteren als samenraapsel van de delen waaruit ze samengesteld zijn, dan zien we een reeks opvolgers ontstaat. Als we bijvoorbeeld de reeks samenraapsels
steenEIKEN, bosBES, lagERE, lidMAAT, latENT, reeBRUIN
recombineren tot de nieuwe reeks samenraapsels
EIKENbos, BESlag, ERElid, MAATlat, ENTree, BRUINsteen
dan zien we dat steenEIKEN opgevolgd wordt door EIKENbos, EIKENbos door bosBES, bosBES door BESlag, ... en dat reeBRUIN opgevolgd wordt door BRUINsteen.
Gevraagd wordt:
Schrijf een functie splitsen waaraan een samenraapsel $$s$$ (str) moet doorgegeven worden. De functie moet een tuple met de twee delen (str) van samenraapsel $$s$$ teruggeven.
Schrijf een functie recombineren waaraan een reeks $$\mathcal{S}$$ (list of tuple) met samenraapsels (str) moet doorgegeven worden. De functie moet de lijst (list) met woorden (str) teruggeven die ontstaat door de samenraapsels uit $$\mathcal{S}$$ te recombineren.
Schrijf een functie opvolgers waaraan een samenraapsel $$s$$ (str) en een reeks $$\mathcal{S}$$ (list of tuple) met samenraapsels (str) moeten doorgegeven worden. De functie moet een lijst (list) met alle opvolgers van $$s$$ in $$\mathcal{S}$$ teruggeven, waarbij de opvolgers hun volgorde uit $$\mathcal{S}$$ aanhouden.
Schrijf een functie schranken waaraan een reeks $$\mathcal{S}$$ (list of tuple) met één of meer samenraapsels (str) moet doorgegeven worden. De functie moet een tuple met twee lijsten (list) teruggeven waarover alle samenraapsels uit $$\mathcal{S}$$ op de volgende manier verdeeld worden. Het samenraapsel uit $$\mathcal{S}$$ dat alfabetisch eerst komt (zonder onderscheid te maken tussen hoofdletters en kleine letters) gaat in de eerste lijst. Daarna wordt de unieke opvolger uit $$\mathcal{S}$$ van het vorige samenraapsel (te beginnen met het samenraapsel dat alfabetisch eerst komt) telkens op het einde van de andere lijst geplaatst. Deze procedure gaat verder totdat alle samenraapsels uit $$\mathcal{S}$$ in één van de twee lijsten geplaatst werden. Als een samenraapsel geen unieke opvolger in $$\mathcal{S}$$ heeft bij het uitvoeren van deze procedure, dan moet een AssertionError opgeworpen worden met de boodschap ongeldige reeks.
>>> splitsen('steenEIKEN')
('steen', 'EIKEN')
>>> splitsen('LOOPTocht')
('LOOPT', 'ocht')
>>> recombineren(['steenEIKEN', 'bosBES', 'lagERE', 'lidMAAT', 'latENT', 'reeBRUIN'])
['EIKENbos', 'BESlag', 'ERElid', 'MAATlat', 'ENTree', 'BRUINsteen']
>>> recombineren(('LOOPTocht', 'ENDuro', 'LOOGden', 'KERven', 'TENgel', 'OVENvast'))
['ochtEND', 'uroLOOG', 'denKER', 'venTEN', 'gelOVEN', 'vastLOOPT']
>>> opvolgers('steenEIKEN', ['ERElid', 'MAATlat', 'steenEIKEN', 'BESlag', 'BRUINsteen', 'ENTree', 'bosBES', 'latENT', 'EIKENbos', 'lidMAAT', 'lagERE', 'reeBRUIN'])
['EIKENbos']
>>> opvolgers('streekBIER', ('gelOVEN', 'uroLOOG', 'OVENvast', 'denKER', 'ENDuro', 'KERven', 'vastLOOPT', 'TENgel', 'LOOPTocht', 'ochtEND', 'venTEN', 'LOOGden'))
[]
>>> opvolgers('voetBAL', ['balJUW', 'kuBUS', 'bamiBAL', 'BALkon', 'streekBIER', 'balSAMICO', 'BALLONvaarder', 'honkBALLER'])
['balJUW', 'BALkon', 'balSAMICO']
>>> schranken(['ERElid', 'MAATlat', 'steenEIKEN', 'BESlag', 'BRUINsteen', 'ENTree', 'bosBES', 'latENT', 'EIKENbos', 'lidMAAT', 'lagERE', 'reeBRUIN'])
(['BESlag', 'ERElid', 'MAATlat', 'ENTree', 'BRUINsteen', 'EIKENbos'], ['lagERE', 'lidMAAT', 'latENT', 'reeBRUIN', 'steenEIKEN', 'bosBES'])
>>> schranken(('gelOVEN', 'uroLOOG', 'OVENvast', 'denKER', 'ENDuro', 'KERven', 'vastLOOPT', 'TENgel', 'LOOPTocht', 'ochtEND', 'venTEN', 'LOOGden'))
(['denKER', 'venTEN', 'gelOVEN', 'vastLOOPT', 'ochtEND', 'uroLOOG'], ['KERven', 'TENgel', 'OVENvast', 'LOOPTocht', 'ENDuro', 'LOOGden'])