Welk woord komt op het vraagteken?
JAM, KUL, LOK, MIJ
LIER, FOTO, ZUIL, TAXI
GROEI, VERGA, KRUIS
BOENEN, WELDRA, RUSTEN
DOFHEID, STEMPEL, HYDRAAT
VIBRATOR, KLUPPELS, ?
De reeksen kenmerken zich doordat op elke positie de letters telkens een vaste afstand vooruit springen in een cyclisch alfabet (waarbij na de letter Z terug de letter A komt). In de bovenste reeks zien we bijvoorbeeld dat de eerste letter telkens 1 positie vooruitspringt, de tweede letter 20 posities en de derde letter 25 posities.
Van VIBRATOR naar KLUPPELS springen de opeenvolgende letters respectievelijk 15, 3, 19, 24, 15, 11, 23 en 1 posities vooruit. Als we van KLUPPELS over hetzelfde aantal posities vooruit springen, dan vinden we het volgende woord in de laatste reeks: ZONNEPIT. We zouden van dat woord nog eens kunnen proberen om vooruit te springen over hetzelfde aantal posities, maar dan krijgen we het onbestaande woord ORGLTAFU.
Een woord is een string (str) die bestaat uit één of meer hoofdletters. Gevraagd wordt:
Schrijf een functie afstand waaraan twee hoofdletters (str) moeten doorgegeven worden. De functie moet teruggeven hoeveel (int) posities je in een cyclisch alfabet moet vooruit springen om van de eerste naar de tweede letter te springen. We noemen dit de afstand van de eerste naar de tweede letter.
Schrijf een functie afstanden waaraan twee even lange woorden (str) moeten doorgegeven worden. De functie moet een lijst (list) teruggeven met de afstanden (int) van elke letter in het eerste woord naar de letter op de corresponderende positie in het tweede woord.
Schrijf een functie springen waaraan twee argumenten moeten doorgegeven worden: i) een woord $$w$$ (str) dat bestaat uit $$n \in \mathbb{N}_0$$ letters $$l_1l_2l_3\ldots l_n$$ en ii) een reeks $$a = a_1a_2a_3\ldots a_n$$ (list of tuple) van $$n$$ getallen $$a_i \in \mathbb{N}$$ (int; $$i = 1, 2, 3, \ldots, n$$). De functie moet het woord teruggeven dat gevormd wordt door vanaf letter $$l_i$$ over $$a_i$$ posities vooruit te springen in een cyclisch alfabet, voor elke letter $$l_i$$ van woord $$w$$ ($$i = 1, 2, 3, \cdots, n$$). We noemen dit het woord waarnaar we asynchroon springen vanaf woord $$w$$ over afstanden $$a$$.
Schrijf een functie reeks waaraan drie argumenten moeten doorgegeven worden: i) een woord $$w$$ (str) dat bestaat uit $$n \in \mathbb{N}_0$$ letters $$l_1l_2l_3\ldots l_n$$, ii) een reeks $$a = a_1a_2a_3\ldots a_n$$ (list of tuple) van $$n$$ getallen $$a_i \in \mathbb{N}$$ (int; $$i = 1, 2, 3, \ldots, n$$) en iii) de locatie (str) van een tekstbestand met alle bestaande woorden (één woord per regel). De functie moet een lijst (list) met bestaande woorden (str) teruggeven. Als $$w$$ geen bestaand woord is, dan moet de lege lijst teruggegeven worden. Anders beginnen we met een lijst die bestaat uit het woord $$w$$. Zolang er vanaf het laatste woord in de lijst asynchroon kan gesprongen worden over afstanden $$a$$ naar een nieuw bestaand woord, dan moet dit nieuw woord achteraan de lijst toegevoegd worden.
In onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand woorden.txt1 zich in de huidige directory bevindt.
>>> afstand('U', 'W')
2
>>> afstand('Z', 'J')
10
>>> afstand('T', 'T')
0
>>> afstanden('JAM', 'KUL')
[1, 20, 25]
>>> afstanden('LIER', 'FOTO')
[20, 6, 15, 23]
>>> afstanden('GROEI', 'VERGA')
[15, 13, 3, 2, 18]
>>> afstanden('BOENEN', 'WELDRA')
[21, 16, 7, 16, 13, 13]
>>> afstanden('DOFHEID', 'STEMPEL')
[15, 5, 25, 5, 11, 22, 8]
>>> afstanden('VIBRATOR', 'KLUPPELS')
[15, 3, 19, 24, 15, 11, 23, 1]
>>> springen('JAM', [1, 20, 25])
'KUL'
>>> springen('LIER', (20, 6, 15, 23))
'FOTO'
>>> springen('GROEI', [15, 13, 3, 2, 18])
'VERGA'
>>> springen('BOENEN', (21, 16, 7, 16, 13, 13))
'WELDRA'
>>> springen('DOFHEID', [15, 5, 25, 5, 11, 22, 8])
'STEMPEL'
>>> springen('VIBRATOR', (15, 3, 19, 24, 15, 11, 23, 1))
'KLUPPELS'
>>> reeks('JAM', [1, 20, 25], 'woorden.txt2')
['JAM', 'KUL', 'LOK', 'MIJ']
>>> reeks('LIER', (20, 6, 15, 23), 'woorden.txt3')
['LIER', 'FOTO', 'ZUIL', 'TAXI']
>>> reeks('GROEI', [15, 13, 3, 2, 18], 'woorden.txt4')
['GROEI', 'VERGA', 'KRUIS']
>>> reeks('BOENEN', (21, 16, 7, 16, 13, 13), 'woorden.txt5')
['BOENEN', 'WELDRA', 'RUSTEN']
>>> reeks('DOFHEID', [15, 5, 25, 5, 11, 22, 8], 'woorden.txt6')
['DOFHEID', 'STEMPEL', 'HYDRAAT']
>>> reeks ('VIBRATOR', (15, 3, 19, 24, 15, 11, 23, 1), 'woorden.txt7')
['VIBRATOR', 'KLUPPELS', 'ZONNEPIT']