Een Spelling Bee is een woordpuzzel waarbij een aantal verschillende letters gegeven zijn. Eén van die letters is als "verplicht" gemarkeerd. Het doel is om zoveel mogelijk bestaande woorden te vinden die met de gegeven letters kunnen gespeld worden. De woorden moeten niet alle letters uit de puzzel gebruiken, mogen dezelfde letter ook meerdere keren gebruiken, maar moeten minstens de verplichte letter bevatten.
De puzzels verschillen niet enkel in welke letters er gegeven zijn, maar ook in het aantal gegeven letters, het minimaal aantal letters waaruit woorden moeten bestaan om als oplossing in aanmerking te komen en de woordenlijst die gebruikt wordt om te bepalen of woorden effectief bestaan. Dit zijn bijvoorbeeld drie puzzels met respectievelijk 7, 9 en 13 gegeven letters, waarbij de gele cel telkens aangeeft wat de verplichte letter is.
Doorgaans zit er in elke puzzel ook minstens één pangram verborgen: een woord dat alle letters van de puzzel minstens één keer bevat. Dat is het geval voor bovenstaande puzzels: hopelessness is een pangram voor de linker puzzel, multiprocessing is een pangram voor de rechter puzzel en de middelste puzzel heeft met microorganism en microorganisms zelfs twee pangrammen.
Schrijf functies waarmee alle oplossingen of alle pangrammen van een gegeven puzzel kunnen bepaald worden. Deze functies mogen ervan uitgaan dat alle woorden en puzzels die eraan doorgegeven worden strings (str) zijn die enkel uit letters bestaan (zowel hoofdletters als kleine letters), zonder dat ze dit expliciet moeten controleren. Bij een puzzel staat elke hoofdletter voor een verplichte letter en elke kleine letter voor een optionele letter (die niet verplicht is). Gevraagd wordt:
Schrijf een functie isspelbaar waaraan twee woorden $$w_1$$ en $$w_2$$ (str) moeten doorgegeven worden. De functie mag ervan uitgaan dat alle letters van woord $$w_2$$ verschillend zijn, zonder dat dit expliciet moet gecontroleerd worden. De functie moet een Booleaanse waarde (bool) teruggeven die aangeeft of woord $$w_1$$ kan gespeld worden met de letters van woord $$w_2$$. Dat is het geval als alle letters van woord $$w_1$$ ook voorkomen in woord $$w_2$$, zonder onderscheid te maken tussen hoofdletters en de kleine letters.
Schrijf een functie ispangram waaraan twee woorden $$w_1$$ en $$w_2$$ (str) moeten doorgegeven worden. De functie mag ervan uitgaan dat alle letters van woord $$w_2$$ verschillend zijn, zonder dat dit expliciet moet gecontroleerd worden. De functie moet een Booleaanse waarde (bool) teruggeven die aangeeft of woord $$w_1$$ een pangram is van woord $$w_2$$. Dat is het geval als woord $$w_1$$ kan gespeld worden met de letters van woord $$w_2$$ en het alle letters van woord $$w_2$$ ook minstens één keer bevat. Daarbij wordt geen onderscheid gemaakt tussen hoofdletters en kleine letters.
Schrijf een functie oplossingen waaraan twee argumenten moeten doorgegeven worden: i) de locatie (str) van een tekstbestand met een reeks woorden die elk op een afzonderlijke regel staan en ii) een puzzel $$p$$ (str). De functie heeft ook nog een derde optionele parameter minimum waaraan een positief natuurlijk getal $$m$$ (int) kan doorgegeven worden (standaardwaarde: 4). Als niet alle letters van puzzel $$p$$ verschillend zijn (zonder onderscheid te maken tussen hoofdletters en kleine letters) of als puzzel $$p$$ niet bestaat uit kleine letters en één hoofdletter, dan moet de functie een AssertionError opwerpen met de boodschap ongeldige puzzel. Anders moet de functie een verzameling (set) teruggeven met alle woorden uit het gegeven tekstbestand die oplossingen zijn van puzzel $$p$$. Dat zijn woorden die i) kunnen gespeld worden met de letters van puzzel $$p$$, ii) de verplichte letter van puzzel $$p$$ bevatten en iii) minimaal $$m$$ letters lang zijn.
Schrijf een functie pangrammen waaraan twee argumenten moeten doorgegeven worden: i) de locatie (str) van een tekstbestand met een reeks woorden die elk op een afzonderlijke regel staan en ii) een puzzel $$p$$ (str). Als niet alle letters van puzzel $$p$$ verschillend zijn (zonder onderscheid te maken tussen hoofdletters en kleine letters) of als puzzel $$p$$ niet bestaat uit kleine letters en één hoofdletter, dan moet de functie een AssertionError opwerpen met de boodschap ongeldige puzzel. Anders moet de functie een verzameling (set) teruggeven met alle woorden uit het gegeven tekstbestand die naast oplossingen ook pangrammen zijn van puzzel $$p$$.
In onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand woorden.txt1 zich in de huidige directory bevindt.
>>> isspelbaar('houseplant', 'oesHpln')
False
>>> isspelbaar('phone', 'oesHpln')
True
>>> isspelbaar('epsilon', 'oesHpln')
False
>>> isspelbaar('loophole', 'oesHpln')
True
>>> ispangram('helplessness', 'oesHpln')
False
>>> ispangram('hopelessness', 'oesHpln')
True
>>> oplossingen('woorden.txt2', 'oesHpln')
{'hones', 'hellos', 'hopelessness', 'shone', 'hopes', 'shoon', 'hellholes', 'heels', 'nosh', 'shoos', 'hello', 'hoop', 'hell', 'loopholes', 'shells', 'hoes', 'loophole', 'noshes', 'hopeless', 'phones', 'sloshes', 'hens', 'shes', 'helplessness', 'holes', 'shell', 'hops', 'peepholes', 'hose', 'pooh', 'hope', 'posh', 'phone', 'hellhole', 'shleps', 'shlepps', 'shoe', 'shlep', 'shops', 'poohs', 'shop', 'shoes', 'slosh', 'sheep', 'hole', 'helpless', 'hoops', 'helps', 'hoses', 'help', 'shlepp', 'shoo', 'hone', 'peephole', 'sheen', 'heel'}
>>> oplossingen('woorden.txt3', 'oesHpln', minimum=10)
{'hopelessness', 'helplessness'}
>>> oplossingen('woorden.txt4', 'ocgrNminas') # twee keer letter N
Traceback (most recent call last):
AssertionError: ongeldige puzzel
>>> oplossingen('woorden.txt5', 'LpuomsietrgnC') # twee hoofdletters
Traceback (most recent call last):
AssertionError: ongeldige puzzel
>>> pangrammen('woorden.txt6', 'oesHpln')
{'hopelessness'}
>>> pangrammen('woorden.txt7', 'ocgrNmias')
{'microorganism', 'microorganisms'}
>>> pangrammen('woorden.txt8', 'Lpuomsietrgnc')
{'multiprocessing'}
Een spelling bee is een spellingswedstrijd waarin deelnemers een brede waaier aan woorden moeten spellen, meestal met variërende moeilijkheidsgraad. De deelnemers moeten de spelling van de woorden uit hun hoofd leren zoals die in woordenboeken staat, en moeten deze spelling nazeggen.
Spellingswedstrijden werden in de jaren 1800 wijdverspreid in de Verenigde Staten, als een manier om leerlingen te motiveren om gestandaardiseerd te leren spellen. De Scripps National Spelling Bee9 — de jaarlijkse nationale spellingswedstrijd van de Verenigde Staten — werd in 1925 opgericht en is nu zo beroemd dat de winnaar (en het woord waarmee hij of zij won) de landelijke krantenkoppen en nieuwsprogramma's kan halen. Zijn de woorden in de loop der jaren moeilijker geworden? Oordeel zelf:
1920–1929: gladiolus (1925), abrogate (1926), luxuriance (1927), albumen (1928), asceticism (1929)
1930–1939: fracas (1930), foulard (1931), knack (1932), torsion (1933), deteriorating (1934), intelligible (1935), interning (1936), promiscuous (1937), sanitarium (1938), canonical (1939)
1940–1949: therapy (1940), initials (1941), sacrilegious (1942), semaphore (1946), chlorophyll (1947), psychiatry (1948), dulcimer (1949)
1950–1959: meerschaum / meticulosity (1950), insouciant (1951), vignette (1952), soubrette (1953), transept (1954), crustaceology (1955), condominium (1956), schappe (1957), syllepsis (1958), catamaran (1959)
1960–1969: eudaemonic (1960), smaragdine (1961), esquamulose (1962), equipage (1963), sycophant (1964), eczema (1965), ratoon (1966), chihuahua (1967), abalone (1968), interlocutory (1969)
1970–1979: croissant (1970), shalloon (1971), macerate (1972), vouchsafe (1973), hydrophyte (1974), incisor (1975), narcolepsy (1976), cambist (1977), deification (1978), maculature (1979)
1980–1989: elucubrate (1980), sarcophagus (1981), psoriasis (1982), Purim (1983), luge (1984), milieu (1985), odontalgia (1986), staphylococci (1987), elegiacal (1988), spoliator (1989)
1990–1999: fibranne (1990), antipyretic (1991), lyceum (1992), kamikaze (1993), antediluvian (1994), xanthosis (1995), vivisepulture (1996), euonym (1997), chiaroscurist (1998), logorrhea (1999)
2000–2009: demarche (2000), succedaneum (2001), prospicience (2002), pococurante (2003), autochthonous (2004), appoggiatura (2005), Ursprache (2006), serrefine (2007), guerdon (2008), Laodicean (2009)
2010–2019: stromuhr (2010), cymotrichous (2011), guetapens (2012), knaidel (2013), stichomythia / feuilleton (2014), scherenschnitte / nunatak (2015), Feldenkrais / gesellschaft (2016), marocain (2017), koinonia (2018), auslaut / erysipelas / bougainvillea / aiguillette / pendeloque / palama / cernuous / odylic (2019)
2020–2024: Murraya (2021), moorhen (2022), psammophile (2023), abseil (2024)