Welk woord plaatsen we in het midden van de rechter driehoek?
Het gezochte woord is KERSTMIS.
In beide driehoeken zijn alle woorden op de hoekpunten even lang. Het gezochte woord in het midden van de driehoek is even lang als de woorden op de hoekpunten. Het wordt gevonden door te starten bij een hoekpunt (hier telkens het hoekpunt bovenaan met een bredere rand), de hoekpunten in een bepaalde richting af te lopen (hier telkens in wijzerzin) en van de opeenvolgende woorden telkens de letter op de volgende positie te nemen (de eerste letter van het eerste woord, de tweede letter van het tweede woord, enzoverder). We hebben de letters die het gezochte woord vormen in het rood aangeduid.
We moeten ons echter niet beperken tot driehoeken: veelhoeken met meer dan drie hoekpunten zijn ook mogelijk. Bovendien moeten we ook niet noodzakelijk bij het bovenste hoekpunt beginnen. Als we bijvoorbeeld in het vierkant hieronder beginnen bij het onderste hoekpunt en de woorden op de hoekpunten in wijzerzin aflopen, dan bekomen we het woord SNEEUWMAN. Het kan ook zijn dat we de hoekpunten in tegenwijzerzin moeten aflopen. Als we bijvoorbeeld in onderstaande vijfhoek beginnen bij het hoekpunt rechtsonder en de woorden op de hoekpunten in tegenwijzerzin aflopen, dan spellen we het woord ENGELENHAAR.
Schrijf een bash shell script omdehoek dat kan gebruikt worden om een puzzel te ontwerpen waarvan de oplossing bestaat uit een woord van $$m$$ letters. Dat woord kan gevonden worden op basis van $$n$$ woorden van $$m$$ letters die op de hoekpunten van een veelhoek geplaatst worden, zoals uiteengezet in de inleiding. Aan het shell script moeten de volgende drie argumenten doorgegeven worden:
het aantal hoekpunten $$n$$ van de veelhoek
het gezochte woord $$w$$ dat uit $$m$$ letters bestaat
de padnaam van een tekstbestand dat een lijst van woorden bevat, elk op een afzonderlijke regel
Het shell script mag ervan uitgaan dat de argumenten die eraan doorgegeven worden geldig zijn, zonder dat dit expliciet moet gecontroleerd worden.
Het shell script moet naar stdout een reeks woorden uitschrijven die op de hoekpunten kunnen geplaatst worden van een puzzel waarvan woord $$w$$ de oplossing vormt. Elke regel bestaat uit een volgnummer (vanaf 1), gevolgd door een punt (.), een spatie en een woord van $$m$$ letters (in hoofdletters). De eerste regel bevat het startwoord, de tweede regel het tweede woord, enzoverder.
Het shell script moet de woorden die op de hoekpunten kunnen geplaatst worden, opzoeken in de gegeven woordenlijst. Bij het opzoeken mag geen onderscheid gemaakt worden tussen hoofdletters en kleine letters. Het woord $$w$$ mag zelf nooit op een hoekpunt geplaatst worden. Als er in de woordenlijst meerdere woorden voorkomen die op een bepaald hoekpunt kunnen geplaatst worden, dan moet het shell script daaruit willekeurig één woord kiezen. Als er in de woordenlijst geen enkel woord kan gevonden worden dat op een bepaald hoekpunt kan geplaatst worden, dan moet het shell script op de plaats van dat hoekpunt $$m$$ vraagtekens plaatsen.
Als we een driehoekige puzzel ($$n=3$$) willen opstellen waarvan DECEMBER ($$m=8$$) de oplossing vormt, dan zoeken we achtereenvolgens woorden die voldoen aan de patronen D??E??E?, ?E??M??R en ??C??B??. Daarbij mag elke mogelijke letter voorkomen op de plaats van de vraagtekens.
Als we een vierkante puzzel ($$n=4$$) willen opstellen waarvan SNEEUWMAN ($$m=9$$) de oplossing vormt, dan zoeken we achtereenvolgens woorden die voldoen aan de patronen S???U???N, ?N???W???, ??E???M?? en ???E???A?.
Onderstaande voorbeeldsessie geeft aan hoe het shell script omdehoek moet kunnen gebruikt worden. Hierbij gaan we ervan uit dat het tekstbestand woorden.txt1 zich in de huidige directory bevindt.
$ omdehoek 3 DECEMBER woorden.txt2
1. DRIEHOEK
2. KEERMUUR
3. NACHTBUS
$ omdehoek 3 DECEMBER woorden.txt3
1. DEFECTEN
2. GEJAMMER
3. LUCHTBAL
$ omdehoek 3 DECEMBER woorden.txt4
1. DODENCEL
2. DECIMEER
3. MICROBES
$ omdehoek 3 KERSTMIS woorden.txt5
1. KUISHEID
2. RELATIES
3. AFREMMEN
$ omdehoek 4 SNEEUWMAN woorden.txt6
1. SETPUNTEN
2. INKTZWART
3. OVERNEMER
4. WATERSTAD
$ omdehoek 3 ENGELENHAAR woorden.txt7
1. ???????????
2. ???????????
3. SIGARENZAAK
$ omdehoek 5 ENGELENHAAR woorden.txt8
1. ERONDERDOOR
2. ONTSPANNEND
3. BEGINSCHERM
4. DAMESROMANS
5. FAMILIEGRAF