Op 6 december 2018 tweette1 prof. dr. James Propp (University of Massachusetts Lowell, Boston, VSA) het volgende raadsel de wereld in:
Het geniale eraan is dat de manier waarop het raadsel geformuleerd werd eigenlijk ook het antwoord weggeeft. Het is namelijk een e-lipogram.
Een lipogram is een tekst waarin de auteur met opzet één of meer letters niet gebruikt. Zo is een e-lipogram een tekst waarin de letter e niet voorkomt en een an-lipogram een tekst waarin de letters a en n niet voorkomen. De moeilijkheid bij het schrijven van een lipogram wordt groter naarmate de niet-gebruikte letters frequenter voorkomen in de taal en de tekst langer wordt.
Schrijf een functie voorkomens waaraan de locatie van een tekstbestand (str) moet doorgegeven worden. De functie moet een dictionary (dict) teruggeven die elke letter (str) in het gegeven tekstbestand afbeeldt op het aantal keer (int) dat de letter in het bestand voorkomt. Bij het tellen van het aantal voorkomens van de letters mag geen onderscheid gemaakt worden tussen hoofdletters en kleine letters. De sleutels van de dictionary moeten als kleine letter voorgesteld worden, en enkel de letters die in het tekstbestand voorkomen mogen als sleutel gebruikt worden.
Schrijf een functie ontbrekende_letters waaraan de locatie van een tekstbestand (str) moet doorgegeven worden. De functie moet een verzameling (set) teruggeven met alle letters (str) die niet in het gegeven tekstbestand voorkomen. Bij het bepalen van de ontbrekende letters mag geen onderscheid gemaakt worden tussen hoofdletters en kleine letters. De ontbrekende letters moeten als kleine letter voorgesteld worden in de verzameling die door de functie wordt teruggegeven.
Schrijf een functie maak_lipogram waaraan twee argumenten moeten doorgegeven worden: i) een collectie (str, list, tuple of set) van letters (str) en ii) de locatie van een tekstbestand (str). De functie moet de inhoud van het gegeven tekstbestand uitschrijven, waarbij alle letters uit de gegeven collectie weggelaten werden. Bij het weglaten van de letters uit de gegeven collectie mag geen onderscheid gemaakt worden tussen hoofdletters en kleine letters. De functie heeft nog een derde optionele parameter waaraan de locatie van een tekstbestand (str) kan doorgegeven worden. Als er expliciet een waarde wordt doorgegeven aan de derde parameter dan moet de functie de inhoud met de weggelaten letters niet uitschrijven, maar wegschrijven naar dit tekstbestand. Als het tekstbestand nog niet bestond dan moet het nieuw aangemaakt worden. Als het tekstbestand wel al bestond dan moet het overschreven worden.
In onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand lipo.txt2 zich in de huidige directory bevindt.
>>> voorkomens('lipo.txt3')
{'i': 21, 'm': 5, 't': 22, 'h': 8, 'n': 16, 'k': 3, 'g': 4, 'o': 12, 'f': 2, 'a': 19, 'r': 7, 'l': 6, 'q': 1, 'u': 9, 'y': 3, 'p': 1, 'c': 4, 's': 8, 'd': 6, 'w': 4, 'b': 2}
>>> ontbrekende_letters('lipo.txt4')
{'e', 'j', 'v', 'x', 'z'}
>>> maak_lipogram('aeiou', 'lipo.txt5')
'm thnkng f n rrtnl
qntty mprtnt n clcls
(t's hrd t dscss ntrl
lgrthms wtht t).
Wht cnstnt m thnkng f,
nd why m tlkng bt t
n ths dd rndbt wy?
>>> maak_lipogram({'a', 'e', 'i', 'o', 'u'}, 'lipo.txt6', 'kopie.txt7')
Het laatste statement maakt een nieuw tekstbestand kopie.txt8 aan, met dezelfde inhoud zoals wordt uitgeschreven door het voorlaatste statement.
Een gevangene heeft maar een beperkte voorraad papier en wil ruimte besparen door geen letters te gebruiken die boven of onder de regel uitkomen (b, d, f, g, h, j, k, l, p, q, t of y). Hoe lang kan hij dat volhouden?
Vrij lang, zo blijkt. Dit is een poging van de Britse schrijver Ian Monk9:
a russian con's economic missive
we were once seven con men, we are now seven cons. as communism was over we saw easier success in american consumerism, i.e. crime. in a moscow inn, we swore: — seven is one, so one is seven … soon we came across a scam. our main man wove us a nice wee earner: — we own a zinc mine. since our russian economic crisis came in, our income's never risen. we can cram ice in our mine's veins, raise rumours re our ice mine's immense resources, con morons we are mere zeros. as soon as career men see our ice, we win 'em over. once we've won 'em over, we receive numerous ecus or euros. as soon as we've our monies, we serve 'em arsenic in wine. we can even recommence on numerous occasions. … our scam was a success. our asses never saw sense. we were euros in. we saw our main man serve our vicious wine mix … a near miss .. our arsenic was mere mouse venom. some asses were survivors: — summon a coroner, someone swore. — or a nurse. — or some rozzers. so we ran. we swam across a river. as soon as no one was near us, we wove our monies in wee canvas cases we wore in our arses. we ran on. in vain … someone saw us on vanavara's main avenue. a commissioner, nine rozzers, seven airmen, six cia men overcame us. we were sworn in. we are now in moscow in irons in room nine. as soon as someone receives or sos, come … run … save us … since no one's ever come across our economies, our ransoms are even now in our arses.