Dit is een puzzel

puzzel
Deze puzzel bestaat uit een rechthoekig rooster met horizontale en verticale pijlen.

en er zijn ook enkele tips

  1. Actrice die de rol van Betty vertolkte in een feestelijk getitelde komische film (gebaseerd op een toneelstuk vernoemd naar een drankje).

  2. Album van een alternatieve rockband dat werd uitgebracht in 2008 en gelivestreamed in 2021, met een opname die werd uitgebracht onder een andere naam (vaak gebruikt om iemand te beschrijven wiens macht oppervlakkig is).

  3. Gevierde voetballer met een lichaamsdeel op ///those.bitters.landed.

  4. Auteur van kinderboeken wiens boek uit 1957 gaat over een groen wezen dat kerstcadeau's en kerstdecoratie steelt.

  5. Ingenieur die in de jaren vijftig een prestigieuze prijs won, een paar jaar na Kermit en Orville.

  6. Europees land waar een bijzonder kerstdrankje de verkoop van frisdrank domineert in december.

  7. Voormalige coach van Le Mans die Frankrijk vertegenwoordigde in Zwitserland, een paar dagen voor hij 24 werd.

  8. Duitse stad waarvan de burgemeester dezelfde achternaam en beginletter van de voornaam heeft als een beroemde wiskundige.

  9. K-popnummer met bijna 1.8 miljard views op YouTube, van een groep waarvan de naam $$(0, 0, 0)$$ en $$(255, 192, 203)$$ combineert.

  10. Computerspel uit het midden van de jaren '80 waarvan de inlegkaart een rijmpje bevat van tien regels die eindigen met de volgende woorden: take, make, dare, lair, will, fill, fast, past, slow, go.

  11. Mythische leerling die naar verluidt een textielmachine zou gebroken hebben op het einde van de 18e eeuw.

  12. Noorse ijshockeyverdediger die een stokbrekende tackle uitvoerde in mei 2021.

  13. Popnummer met een video waarin de zangeres een hartje tekent op een beslagen spiegel, een lichtblauwe telefoon aanraakt, en gaat staan op het oppervlak van een zwembad.

  14. Drielettergrepige songtitel die Lennon, Duffy en Milburn met elkaar verbindt.

  15. Titel van zowel een Canadese mockumentary als een aflevering van Star Trek: Discovery.

  16. Britse stad met een 8 voet groot standbeeld van een stripfiguur (en zijn sidekick) in de hoofdstraat.

  17. Massaal bespotte film met in de hoofdrollen JT (RF), GA (RS) en BA (IB).

Wie blijft er over?

Het zal misschien opgevallen zijn dat de zeventien (Engelstalige) antwoorden enkel bestaan uit de acht "richtingaangevende" letters N, S, E, W, U, D, R en L — de vier windrichtingen en de vier toetsenbordrichtingen in het Engels — waarbij interpunctie in de antwoorden genegeerd wordt. Dit zijn immers de antwoorden voor de zeventien tips:

  1. Ellen Drew1 — die Betty Casey speelde in Christmas in July2, de verfilming van Preston Sturge's toneelstuk A Cup of Coffee uit 1931.

  2. New Surrender3 — de naam van Anberlin4's album uit 2008, dat in 2021 werd gelivestreamed en uitgebracht onder de naam Paper Tigers5.

  3. Uwe Seeler6 — wiens rechtervoet7 (of liever een groot standbeeld daarvan) op het aangegeven what3words-adres8 staat.

  4. Dr. Seuss9 — auteur van How the Grinch Stole Christmas!10.

  5. Wendell E. Reed11 — winnaar van de Wright Brothers-medaille12 in 1955, een paar jaar na Kermit Van Every (1948) en Orville Albert Wheelon (1951).

  6. Sweden13 — thuisbasis van het populaire kerstfrisdrankje Julmust14.

  7. Rene Dereuddre15 — trainer van Le Mans FC tussen 1964 en 1976, en lid van het Franse team16 dat deelnam aan de FIFA Word Cup 1954 in Zwitserland.

  8. Dresden17 — wiens burgemeester Dirk Hilbert18 dezelfde achternaam en eerste letter van de voornaam deelt met de wiskundige David Hilbert19.

  9. Ddu-Du Ddu-Du20 — populair K-popnummer van de groep Blackpink21; de drietallen in de tip zijn de respectievelijke RGB-kleurcodes voor zwart22 (black) en roze23 (pink).

  10. Underwurlde24 — met specifiek rijmpje op de inlegkaart25 onder het woord BEWARE.

  11. Ned Ludd26 — persoon naar wie de Luddieten27 hun naam zouden aangenomen hebben.

  12. Erlend Lesund28 — wiens tackle29 op Rodrigo Abos in mei 2021 de stick van de Let brak.

  13. New Rules30 — met zangeres Dua Lipa31 die de beschreven handelingen uitvoert rond 0:37, 0:51 en 2:30 in de video32.

  14. Well Well Well — naam van liedje 833 op John Lennon/Plastic Ono Band van John Lennon, liedje 434 (en eerste single) op Endlessly van Duffy en liedje 135 op het gelijknamige debuutalbum van de groep Milburn uit Sheffield, Engeland.

  15. New Eden — titel van de mockumentary36 gemaakt door Evany Rosen en Kayla Loretta, en van seizoen 2, aflevering 237 van Star Trek: Discovery.

  16. Dundee38 — waar een groot bronzen beeld van Desperate Dan en zijn sidekick Dawg39 in de hoofdstraat staat, met in de buurt Minnie the Minx die op de loer ligt.

  17. Runner Runner40 — met Justin Timberlake als Richie Furst, Gemma Arterton als Rebecca Shafran en Ben Affleck als Ivan Block.

Elk antwoord wordt woordzoekersgewijs in het rooster met pijlen ingevuld, volgens de conventie dat een pijl die naar boven wijst correspondeert met een letter N (North) of U (Up), een pijl die naar beneden wijst met een letter S (South) of D (Down), een pijl die naar rechts wijst met een letter E (East) of R (Right), en een pijl die naar links wijst met een letter W (West) of L (Left). Overeenkomstig het NSEWUDLR-thema wordt elk antwoord horizontaal of verticaal geschreven (voorwaarts of achterwaarts), en niet diagonaal. Hieronder staat het "afgewerkte" rooster waarin de zeventien antwoorden ingevuld werden, waarbij oranje antwoorden achterwaarts geschreven zijn (d.w.z. van rechts naar links voor een horizontaal geschreven antwoord en van onder naar boven voor een verticaal geschreven antwoord) en groene antwoorden in de gebruikelijke leesrichting (d.w.z. van links naar rechts of van boven naar onder).

oplossing
De pijlen in het rooster corresponderen met woorden die opgebouwd zijn uit "richtingaangevende" letters. De pijlen in de resterende vakjes van dit rooster corresponderen met de naam van de Amerikaanse fotograaf en fotojournalist RUSSELL WERNER LEE.

Alle vakjes van het rooster worden dus bedekt door de letters van de zeventien antwoorden, met uitzondering van de zestien donkergrijs gekleurde vakjes. De pijlen in deze resterende vakjes corresponderen met de naam van de Amerikaanse fotograaf en fotojournalist RUSSELL WERNER LEE41.

Tenslotte geven we ook nog mee dat UREN REDENEREN een toepasselijke titel is voor deze opgave. Niet alleen omdat die net zoals de antwoorden enkel bestaat uit de "richtingaangevende" letters N, S, E, W, U, D, R en L, maar ook als verwijzing naar de tijd die je verliest door deze puzzel met de hand te proberen oplossen.

Opgave

Een puzzelrooster wordt beschreven in een tekstbestand met een rechthoekig $$m \times n$$ rooster van pijlen. Het bestand bevat $$m$$ regels die elk $$n$$ pijlen bevatten: , , en . Dit is bijvoorbeeld de inhoud van het bestand met het puzzelrooster uit de inleiding.

→↓→→↓↓→↑↓↓↑→↓→↓↓
↓↓↓↑←↓→↑→↑↓↓→←←↓
←→↑→↓→←→↑↓←→↓→↑↑
→→↑→↑↑↑→→→↑↑↑→→↓
↑←→→→↓↑→→→↑↓←→↑↑
←→←↓↑↑↓→→←→→↑→→↓
→→→←→↑↓→←←→→→→↓↓
→↓↑←→←←←→←←←→←←↑
↓→←↓↑↑↓→←↓↑→←→→↓
↑←→→←←→↑↓→→←←→→↑
↑↑↓→→↓↓↑→→→↓→↑→→

Tip

Een tekstbestand met een puzzelrooster gebruikt de UTF-8 tekencodering. Dit is ondertussen de standaard tekencodering op de meeste computers (ook op die van Dodona). Als je toch problemen zou ondervinden bij het inlezen van bestanden, dan kan je de tekstcodering ook expliciet meegeven bij het openen van de bestanden: encoding='utf-8'.

De rijen van het rooster worden van boven naar onder genummerd en de kolommen van links naar rechts, telkens vanaf nul. Daardoor kan een positie in het rooster voorgesteld worden als een tuple $$(r, k)$$ met $$r$$ ($$0 \leq r < m$$) het rijnummer en $$k$$ ($$0 \leq k < n$$) het kolomnummer.

De vier mogelijke leesrichtingen worden ook voorgesteld door dezelfde pijlen (str; tussen ronde haakjes) die in het rooster staan: horizontaal van links naar rechts (), horizontaal van rechts naar links (), verticaal van boven naar onder () en verticaal van onder naar boven ().

Definieer een klasse Puzzel waarmee puzzels met een gegeven puzzelrooster kunnen voorgesteld worden, en waarin woorden kunnen geplaatst worden die horizontaal of verticaal (voorwaarts of achterwaarts) samenvallen met de pijlen in het rooster. De locatie (str) van een tekstbestand met het puzzelrooster moet doorgegeven worden bij het aanmaken van een puzzel (Puzzel).

Als er een puzzel $$p$$ (Puzzel) wordt doorgegeven aan de ingebouwde functie str, dan moet die een stringvoorstelling (str) teruggeven die dezelfde vorm aanneemt als de inhoud van het tekstbestand waarmee de puzzel $$p$$ aangemaakt werd. Daarbij vervangen de letters van alle woorden die reeds in het rooster van puzzel $$p$$ geplaatst werden de pijlen op de overeenkomstige posities.

Voorts moeten op een puzzel $$p$$ (Puzzel) minstens de volgende methoden kunnen aangroepen worden:

Voorbeeld

Bij onderstaande voorbeeldsessie gaan we ervan uit dat de huidige directory het tekstbestand rooster.txt42 bevat.

>>> puzzel = Puzzel('rooster.txt43')
>>> print(puzzel)
→↓→→↓↓→↑↓↓↑→↓→↓↓
↓↓↓↑←↓→↑→↑↓↓→←←↓
←→↑→↓→←→↑↓←→↓→↑↑
→→↑→↑↑↑→→→↑↑↑→→↓
↑←→→→↓↑→→→↑↓←→↑↑
←→←↓↑↑↓→→←→→↑→→↓
→→→←→↑↓→←←→→→→↓↓
→↓↑←→←←←→←←←→←←↑
↓→←↓↑↑↓→←↓↑→←→→↓
↑←→→←←→↑↓→→←←→→↑
↑↑↓→→↓↓↑→→→↓→↑→→
>>> puzzel.normaliseer('Wendell E. Reed')
'WENDELLEREED'
>>> puzzel.pijlen('Wendell E. Reed')
'←→↑↓→←←→→→→↓'
>>> puzzel.isgeldig('Wendell E. Reed', rij=6, kolom=3, richting='→')
True
>>> puzzel.posities('Wendell E. Reed')
{(6, 3, '→')}
>>> print(puzzel.plaats('Wendell E. Reed', rij=6, kolom=3, richting='→'))
→↓→→↓↓→↑↓↓↑→↓→↓↓
↓↓↓↑←↓→↑→↑↓↓→←←↓
←→↑→↓→←→↑↓←→↓→↑↑
→→↑→↑↑↑→→→↑↑↑→→↓
↑←→→→↓↑→→→↑↓←→↑↑
←→←↓↑↑↓→→←→→↑→→↓
→→→WENDELLEREED↓
→↓↑←→←←←→←←←→←←↑
↓→←↓↑↑↓→←↓↑→←→→↓
↑←→→←←→↑↓→→←←→→↑
↑↑↓→→↓↓↑→→→↓→↑→→
>>> puzzel.normaliseer('Rene Dereuddre')
'RENEDEREUDDRE'
>>> puzzel.pijlen('Rene Dereuddre')
'→→↑→↓→→→↑↓↓→→'
>>> puzzel.isgeldig('Rene Dereuddre', rij=10, kolom=15, richting='←')
True
>>> puzzel.posities('Rene Dereuddre')
{(10, 15, '←')}
>>> print(puzzel.plaats('Rene Dereuddre', rij=10, kolom=15, richting='←'))
→↓→→↓↓→↑↓↓↑→↓→↓↓
↓↓↓↑←↓→↑→↑↓↓→←←↓
←→↑→↓→←→↑↓←→↓→↑↑
→→↑→↑↑↑→→→↑↑↑→→↓
↑←→→→↓↑→→→↑↓←→↑↑
←→←↓↑↑↓→→←→→↑→→↓
→→→WENDELLEREED↓
→↓↑←→←←←→←←←→←←↑
↓→←↓↑↑↓→←↓↑→←→→↓
↑←→→←←→↑↓→→←←→→↑
↑↑↓ERDDUEREDENER
>>> puzzel.normaliseer('New Rules')
'NEWRULES'
>>> puzzel.pijlen('New Rules')
'↑→←→↑←→↓'
>>> puzzel.isgeldig('New Rules', rij=3, kolom=2, richting='↓')
True
>>> puzzel.posities('New Rules')
{(3, 2, '↓')}
>>> print(puzzel.plaats('New Rules', rij=3, kolom=2, richting='↓'))
→↓→→↓↓→↑↓↓↑→↓→↓↓
↓↓↓↑←↓→↑→↑↓↓→←←↓
←→↑→↓→←→↑↓←→↓→↑↑
→→N→↑↑↑→→→↑↑↑→→↓
↑←E→→↓↑→→→↑↓←→↑↑
←→W↓↑↑↓→→←→→↑→→↓
→→RWENDELLEREED↓
→↓U←→←←←→←←←→←←↑
↓→L↓↑↑↓→←↓↑→←→→↓
↑←E→←←→↑↓→→←←→→↑
↑↑SERDDUEREDENER
>>> puzzel.normaliseer('Underwurlde')
'UNDERWURLDE'
>>> puzzel.pijlen('Underwurlde')
'↑↑↓→→←↑→←↓→'
>>> puzzel.isgeldig('Underwurlde', rij=10, kolom=0, richting='↑')
True
>>> puzzel.posities('Underwurlde')
{(10, 0, '↑')}
>>> print(puzzel.plaats('Underwurlde', rij=10, kolom=0, richting='↑'))
E↓→→↓↓→↑↓↓↑→↓→↓↓
D↓↓↑←↓→↑→↑↓↓→←←↓
L→↑→↓→←→↑↓←→↓→↑↑
R→N→↑↑↑→→→↑↑↑→→↓
U←E→→↓↑→→→↑↓←→↑↑
W→W↓↑↑↓→→←→→↑→→↓
R→RWENDELLEREED↓
E↓U←→←←←→←←←→←←↑
D→L↓↑↑↓→←↓↑→←→→↓
N←E→←←→↑↓→→←←→→↑
U↑SERDDUEREDENER
>>> puzzel.posities('Eden')
{(0, 11, '↓'), (0, 13, '←'), (2, 5, '←'), (2, 11, '→')}
>>> puzzel.isgeldig('Eden', rij=3, kolom=5, richting='→')
False
>>> puzzel.plaats('Eden', rij=3, kolom=5, richting='→')
Traceback (most recent call last):
AssertionError: ongeldige positie
>>> print(puzzel)
E↓→→↓↓→↑↓↓↑→↓→↓↓
D↓↓↑←↓→↑→↑↓↓→←←↓
L→↑→↓→←→↑↓←→↓→↑↑
R→N→↑↑↑→→→↑↑↑→→↓
U←E→→↓↑→→→↑↓←→↑↑
W→W↓↑↑↓→→←→→↑→→↓
R→RWENDELLEREED↓
E↓U←→←←←→←←←→←←↑
D→L↓↑↑↓→←↓↑→←→→↓
N←E→←←→↑↓→→←←→→↑
U↑SERDDUEREDENER