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.

puzzel (7 letters)
Een Spelling Bee puzzel met 7 letters. De gele cel bevat de letter die verplicht in alle oplossingen moet voorkomen. Het woord hopelessness is een pangram voor deze puzzel.
puzzel (9 letters)
Een Spelling Bee puzzel met 9 letters. De gele cel bevat de letter die verplicht in alle oplossingen moet voorkomen. De woorden microorganism en microorganisms zijn twee pangrammen voor deze puzzel.
puzzel (13 letters)
Een Spelling Bee puzzel met 13 letters. De gele cel bevat de letter die verplicht in alle oplossingen moet voorkomen. Het woord multiprocessing is een pangram voor deze puzzel.

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.

Opgave

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:

Voorbeeld

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

Epiloog

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.

spelling bee competitie
Een spellingswedstrijd op een basisschool, met een speller die een publiek en een jurylid toespreekt, met daarachter een aantal andere deelnemers.

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)