Wat is 3/5 leeuw, 1/2 stekelmuis en 1/5 nerts?
Oplossing: leeuw + stekelmuis + nerts = leesteken
We nemen met andere woorden drie van de vijf ($$\frac{3}{5}$$) letters van het woord leeuw, de helft ($$\frac{5}{10} = \frac{1}{2}$$) van de letters van het woord stekelmuis, en één van de vijf ($$\frac{1}{5}$$) letters van het woord nerts. Daarbij nemen we telkens letters aan de voorkant van het woord.
Een woord $$w$$ is een string (str) die bestaat uit nul of meer letters (hoofdletters en kleine letters). We noteren de lengte van het woord $$w$$ als $$||w||$$.
Een woord $$p$$ is een prefix van een woord $$w$$ als er een woord $$s$$ bestaat zodat $$w = ps$$, of met andere woorden als het woord $$w$$ begint met het woord $$p$$.
Een woord $$s$$ is een suffix van een woord $$w$$ als er een woord $$p$$ bestaat zodat $$w = ps$$, of met andere woorden als het woord $$w$$ eindigt met het woord $$s$$.
Een breuk $$b$$ is een object van het gegevenstype Fraction uit in de module fractions1 van de Python Standard Library2. De stringvoorstelling van een breuk met teller $$t$$ en noemer $$n$$ is t/n. Bij de stringvoorstelling van een negatieve breuk staat het minteken voor de teller (bijvoorbeeld -3/4).
Een vraag is een string (str) van de vorm
Wat is woordbreuk1, woordbreuk2, …, woordbreukn-1 en woordbreukn?
waarbij woordbreuki bestaat uit de stringvoorstelling van een breuk $$b_i$$, gevolgd door een spatie en een woord $$w_i$$ voor $$i = 1, 2, \ldots, n$$ en $$n \geq 2$$.
Gevraagd wordt:
Schrijf een functie woordbreuk waaraan een woord $$w$$ en een breuk $$b$$ moeten doorgegeven worden. Als $$b \geq 0$$ dan moet de functie de prefix $$p$$ van $$w$$ teruggeven waarvoor geldt dat $$\frac{||p||}{||w||} = b$$. Anders moet de functie de suffix $$s$$ van $$w$$ teruggeven waarvoor geldt dat $$\frac{||s||}{||w||} = |b|$$. Hierbij staat $$|b|$$ voor de absolute waarde van de breuk $$b$$. Het resultaat van deze functie noemen we de woordbreuk van het woord $$w$$ en de breuk $$b$$.
Schrijf een functie combineer waaraan twee lijsten (list) van lengte $$n \in \mathbb{N}$$ ($$n \geq 2$$) moeten doorgegeven worden: i) een lijst met woorden $$w_1, w_2, \ldots, w_n$$ (str) en ii) een lijst met breuken $$b_1, b_2, \ldots, b_n$$ (Fraction). De functie moet de string (str) teruggeven die ontstaat door de woordbreuken van het woord $$w_i$$ en de breuk $$b_i$$ aaneen te schakelen voor $$i = 1, 2, \ldots, n$$.
Schrijf een functie ontleed waaraan een vraag (str) moet doorgegeven worden. De functie moet een tuple (tuple) met twee elementen teruggeven: i) een lijst (list) met alle woorden $$w_1, w_2, \ldots, w_n$$ (str) uit de vraag en ii) een lijst (list) met alle breuken $$b_1, b_2, \ldots, b_n$$ (Fraction) uit de vraag. Zowel de woorden als de breuken moeten opgelijst worden in de volgorde waarin ze in de vraag voorkomen.
Schrijf een functie antwoord waaraan een vraag (str) moet doorgegeven worden. Als de vraag bestaat uit de woorden $$w_1, w_2, \ldots, w_n$$ en de breuken $$b_1, b_2, \ldots, b_n$$, in die volgorde, dan moet de functie de string (str) teruggeven die ontstaat door de woordbreuken van het woord $$w_i$$ en de breuk $$b_i$$ aaneen te schakelen voor $$i = 1, 2, \ldots, n$$.
Als er bij het aanroepen van de functies woordbreuk, combineer of antwoord een onmogelijke woordbreuk moet bepaald worden (het is bijvoorbeeld niet mogelijk om $$\frac{3}{5}$$ van de letters van het woord spam te selecteren), dan moet een AssertionError opgeworpen worden met de boodschap ongeldige breuk.
>>> woordbreuk('leeuw', Fraction(3, 5))
'lee'
>>> woordbreuk('stekelmuis', Fraction(1, 2))
'steke'
>>> woordbreuk('nerts', Fraction(1, 5))
'n'
>>> woordbreuk('GUANACO', -Fraction(5, 7))
'ANACO'
>>> woordbreuk('HOND', Fraction(-1, 2))
'ND'
>>> woordbreuk('ALPACA', Fraction(1, -6))
'A'
>>> woordbreuk('dwergmuis', Fraction(1, 2))
Traceback (most recent call last):
AssertionError: ongeldige breuk
>>> combineer(['leeuw', 'stekelmuis', 'nerts'], [Fraction(3, 5), Fraction(1, 2), Fraction(1, 5)])
'leesteken'
>>> combineer(['GUANACO', 'HOND', 'ALPACA'], [Fraction(-5, 7), Fraction(-1, 2), Fraction(-1, 6)])
'ANACONDA'
>>> combineer(['dwergmuis', 'paling'], [Fraction(2, 9), Fraction(-5, 6)])
'dwaling'
>>> combineer(['eLand', 'Meikever', 'goudhamsTer'], [Fraction(-4, 5), Fraction(1, 4), Fraction(-3, 11)])
'LandMeTer'
>>> ontleed('Wat is 3/5 leeuw, 1/2 stekelmuis en 1/5 nerts?')
(['leeuw', 'stekelmuis', 'nerts'], [Fraction(3, 5), Fraction(1, 2), Fraction(1, 5)])
>>> ontleed('Wat is -5/7 GUANACO, -1/2 HOND en -1/6 ALPACA?')
(['GUANACO', 'HOND', 'ALPACA'], [Fraction(-5, 7), Fraction(-1, 2), Fraction(-1, 6)])
>>> ontleed('Wat is 2/9 dwergmuis en -5/6 paling?')
(['dwergmuis', 'paling'], [Fraction(2, 9), Fraction(-5, 6)])
>>> ontleed('Wat is -4/5 eLand, 1/4 Meikever en -3/11 goudhamsTer?')
(['eLand', 'Meikever', 'goudhamsTer'], [Fraction(-4, 5), Fraction(1, 4), Fraction(-3, 11)])
>>> antwoord('Wat is 3/5 leeuw, 1/2 stekelmuis en 1/5 nerts?')
'leesteken'
>>> antwoord('Wat is -5/7 GUANACO, -1/2 HOND en -1/6 ALPACA?')
'ANACONDA'
>>> antwoord('Wat is 2/9 dwergmuis en -5/6 paling?')
'dwaling'
>>> antwoord('Wat is -4/5 eLand, 1/4 Meikever en -3/11 goudhamsTer?')
'LandMeTer'
Qua uitzicht lijkt het vogelbekdier alsof Moeder Natuur Frankenstein gespeeld heeft met stukjes vogel, reptiel en zoogdier. Maar ook uit zijn genoom — dat sinds januari 2021 volledig in kaart gebracht werd — blijkt dat het vogelbekdier een vreemde mix heeft van genen uit verschillende klassen van gewervelden.