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

koffiekop
Koffiekop met uitzonderingen op de regel "I before E except after C".

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.

Opgave

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:

Voorbeeld

>>> 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

Bronnen

Epiloog