Een digraaf is een opeenvolging van twee lettertekens die samen één gesproken klank weergeven. In het Engels kan de uitspraak echter sterk afwijken van de correcte spelling van de woorden. Dit maakt het bijvoorbeeld moeilijk om te kiezen tussen de digrafen ei of ie. Het ezelsbruggetje
I before E, except after C
suggereert dat de juiste volgorde ie is, behalve als de digraaf voorafgegaan wordt door de letter c. In dat geval moet je ei schrijven. Omwille van zijn eenvoud is het rijmpje alom gekend in Angelsaksische landen. Edward Carney noemt het zelfs
this supreme, and for many people solitary, spelling rule
Toch zijn er heel wat uitzonderingen op "I before E …":
albeit, beige, counterfeit, deity, either, feisty, height, kaleidoscope, leisure, neighbor, obeisance, protein, reveille, seize, veil, weird, zeitgeist
"… except after C":
ancient, concierge, efficient, financier, glacier, juicier, democracies, species
waardoor Will Rogers zich liet ontvallen:
Nothing you can't spell will ever work.
Een Engels woord is een opeenvolging van één of meer letters, koppeltekens (-) en aanhalingstekens ('). Daarbij mag je ervan uitgaan dat er altijd minstens één ander karakter staat tussen twee voorkomens van de digrafen ie en ei in een Engels woord. Engelse woorden zoals boogieing, sortieing of Weierstrass zullen in deze opgave dus nooit voorkomen.
De Engelse woorden van een Engelse zin zijn de langst mogelijke opeenvolgingen van één of meer letters, koppeltekens (-) en aanhalingstekens ('). Zo is eighty-eight één enkel woord, net zoals O'Reilly.
Gevraagd wordt:
Schrijf een functie invullen waaraan twee argumenten moeten doorgegeven worden: i) een Engels woord $$w$$ (str; in kleine letters) waarin elk voorkomen van de digrafen ei en ie werd vervangen door twee vraagtekens (??) en ii) een Booleaanse waarde (bool) die aangeeft of de correct spelling van het woord een uitzondering vormt op de vuistregel "I before E, except after C". Daarbij mag de functie ervan uitgaan dat ofwel alle voorkomens van de digrafen ie en ei uitzonderingen zijn, of dat geen enkel voorkomen ervan een uitzondering is. De functie moet de correcte spelling van woord $$w$$ teruggeven.
Schrijf een functie maskeren waaraan een Engels woord $$w$$ (str; in kleine letters) moet doorgegeven worden. De functie moet het woord $$w$$ teruggeven waarin elk voorkomen van de digrafen ei en ie werd vervangen door twee vraagtekens (??).
Schrijf een functie isuitzondering waaraan de correcte spelling van een Engels woord $$w$$ (str) moet doorgegeven worden. De functie moet een Booleaanse waarde (bool) teruggeven, die aangeeft of woord $$w$$ een uitzondering vormt op de vuistregel "I before E, except after C".
Schrijf een functie uitzonderingen waarin de correcte spelling van een Engelse zin (str) moet doorgegeven worden. De functie moet teruggeven hoeveel (int) Engelse woorden in de zin een uitzondering vormen op de vuistregel "I before E, except after C".
>>> invullen('h??roglyphic', False)
'hieroglyphic'
>>> invullen('inconc??vable', False)
'inconceivable'
>>> invullen('fr??ndl??st', False)
'friendliest'
>>> invullen('programmer', False)
'programmer'
>>> invullen('alb??t', True)
'albeit'
>>> invullen('z??tg??st', True)
'zeitgeist'
>>> invullen('conc??rge', True)
'concierge'
>>> invullen('glac??r', True)
'glacier'
>>> maskeren('hieroglyphic')
'h??roglyphic'
>>> maskeren('inconceivable')
'inconc??vable'
>>> maskeren('friendliest')
'fr??ndl??st'
>>> maskeren('programmer')
'programmer'
>>> maskeren('albeit')
'alb??t'
>>> maskeren('zeitgeist')
'z??tg??st'
>>> maskeren('concierge')
'conc??rge'
>>> maskeren('glacier')
'glac??r'
>>> isuitzondering('hierarchy')
False
>>> isuitzondering('ancient')
True
>>> isuitzondering('ceiling')
False
>>> isuitzondering('fahrenheit')
True
>>> isuitzondering('daily')
False
>>> uitzonderingen('I believe in the power of education.')
0
>>> uitzonderingen('The ancient recipe requires a dash of weird ingredients.')
2
>>> uitzonderingen('The society was fraught with a weird sense of hierarchy.')
2
>>> uitzonderingen('The efficient machine processed the data with great speed.')
1
>>> uitzonderingen('I before E except when your feisty foreign neighbor Keith leisurely receives eight counterfeit beige sleighs from weirdly caffeinated atheist weightlifters')
13
English is easy!
— AlphaFo𝕏 (@Alphafox78) August 24, 20243
Also: 😭 pic.twitter.com/N98jnCl1g22