Kasper — het huisspook — heeft in de ruïnes van de burcht een oud fototoestel gevonden. Daarmee heeft hij alles vastgelegd wat hij bij het rondspoken graag laat verdwijnen … en hij wil zelf ook wel eens in het niets oplossen! Maar er is iets vreemd aan de hand met de foto's: gek genoeg blijken de voorwerpen vaak de verkeerde kleur te hebben. Soms is de groene fles wit, dan weer blauw. De foto's zijn zo verwarrend dat hij niet meer weet wat hij moet wegtoveren. Wie kan het juiste voorwerp noemen en laten verdwijnen?

vlotte geesten
Kasper — het huisspook — heeft in de ruïnes van de burcht een oud fototoestel gevonden. Daarmee heeft hij alles vastgelegd wat hij bij het rondspoken graag laat verdwijnen … en hij wil zelf ook wel eens in het niets oplossen! Maar er is iets vreemd aan de hand met de foto's: gek genoeg blijken de voorwerpen vaak de verkeerde kleur te hebben. Soms is de groene fles wit, dan weer blauw. De foto's zijn zo verwarrend dat hij niet meer weet wat hij moet wegtoveren. Wie kan het juiste voorwerp noemen en laten verdwijnen?

Geesten staan centraal in het gezelschapsspel vlotte geesten, maar het is vooral ook een spel voor de vlotte geest. Het wordt gespeeld met 2 tot 8 spelers (vanaf 8 jaar), 5 fysieke voorwerpen en 60 speelkaarten (die foto's van de voorwerpen voorstellen). Elk voorwerp heeft twee unieke eigenschappen: een unieke kleur en een unieke vorm. Er is een rode stoel, een blauw boek, een groene fles, een grijze muis en een wit spook.

voorwerpen
Elk voorwerp heeft twee unieke eigenschappen: een unieke kleur en een unieke vorm. Er is een rode stoel, een blauw boek, een groene fles, een grijze muis en een wit spook.

Elke speelkaart bevat de weergave van 2 voorwerpen. Een voorwerp op een speelkaart heeft niet noodzakelijk dezelfde kleur als het corresponderende fysieke voorwerp.

speelkaarten
Elke speelkaart bevat de weergave van 2 voorwerpen. Een voorwerp op een speelkaart heeft niet noodzakelijk dezelfde kleur als het corresponderende fysieke voorwerp.

Bij aanvang van het spel worden de 5 fysieke voorwerpen op tafel gezet, zodat alle spelers er goed bij kunnen. De speelkaarten worden geschud en als een gedekte stapel op tafel gelegd. De startspeler (bijvoorbeeld de jongste speler of de speler die het laatst in een burcht of kasteel geweest is) draait de bovenste speelkaart zodanig om dat alle spelers de kaart tegelijkertijd zien. Iedere speler probeert nu zo snel mogelijk het fysieke voorwerp van tafel te grijpen dat op deze speelkaart in de juiste kleur is afgebeeld. Voor de speelkaarten hieronder zijn dat respectievelijk het blauwe boek (links), de grijze muis (midden) en de groene fles (rechts).

grijp afgebeelde voorwerp
Iedere speler probeert zo snel mogelijk het fysieke voorwerp van tafel te grijpen dat in de juiste kleur is afgebeeld op een speelkaart. Voor deze speelkaarten zijn dat respectievelijk het blauwe boek (links), de grijze muis (midden) en de groene fles (rechts).

Als geen van de twee voorwerpen op de speelkaart in de juiste kleur is afgebeeld, dan moeten de spelers het fysieke voorwerp van tafel te grijpen dat qua vorm niet op de kaart is afgebeeld en waarvan de kleur ook niet op de kaart te zien is. De linker speelkaart hieronder toont bijvoorbeeld een blauw spook en een grijze stoel. Deze fysieke voorwerpen staan niet als dusdanig op tafel. Daarom moeten de spelers de groene fles grijpen, omdat zowel de fles als de kleur groen niet op de speelkaart te zien zijn. Om dezelfde reden moeten de spelers ook voor de rechter speelkaart hieronder de groene fles grijpen.

grijp niet-afgebeelde voorwerp
Als geen van de twee voorwerpen op de speelkaart in de juiste kleur is afgebeeld, dan moeten de spelers het fysieke voorwerp van tafel te grijpen dat qua vorm niet op de kaart is afgebeeld en waarvan de kleur ook niet op de kaart te zien is. De linker speelkaart toont bijvoorbeeld een blauw spook en een grijze stoel. Deze fysieke voorwerpen staan niet als dusdanig op tafel. Daarom moeten de spelers de groene fles grijpen, omdat zowel de fles als de kleur groen niet op de speelkaart te zien zijn. Om dezelfde reden moeten de spelers ook voor de rechter speelkaart de groene fles grijpen.

Wie als eerste het juiste fysieke voorwerp op tafel heeft gegrepen, legt als beloning de omgedraaide kaart voor zich op tafel en draait daarna de volgende kaart van de gedekte stapel om.

Belangrijk

Per ronde mag een speler niet meer dan 1 voorwerp grijpen. Wie een verkeerd voorwerp heeft gegrepen, moet 1 van zijn kaarten (voor zover hij die heeft) aan de winnaar van de ronde geven. Het is dus goed mogelijk dat de winnaar van de ronde naast de omgedraaide kaart nog meer kaarten wint.

Het spel is afgelopen als de gedekte stapel kaarten is opgebruikt. De speler die de meeste kaarten voor zich heeft, is de winnaar.

Opgave

We stellen een voorwerp voor als een tuple (tuple) met twee strings (str) die elk een eigenschap van het voorwerp beschrijven: de eerste eigenschap beschrijft de kleur van het voorwerp, en de tweede de vorm van het voorwerp.

We stellen een collectie voorwerpen voor als een lijst (list), een tuple (tuple) of een verzameling (set) met unieke voorwerpen. Deze uniciteit moet zowel gelden voor de voorwerpen als geheel, als voor hun individuele eigenschappen. Het is dus niet toegelaten dat de collectie twee identieke voorwerpen bevat, of twee voorwerpen met dezelfde eigenschap (dezelfde kleur of dezelfde vorm). De collectie mag ook geen objecten bevatten die geen voorwerp voorstellen.

Voor het spelletje vlotte geesten stellen we de fysieke voorwerpen op tafel voor als een collectie met 5 voorwerpen. Deze voorwerpen mogen verschillend zijn van de originele voorwerpen uit het spelletje vlotte geesten: er mag bijvoorbeeld een blauw spook of een roze flamingo op tafel staan.

Een speelkaart uit het spelletje vlotte geesten stellen we voor als een collectie met 2 voorwerpen. Elk voorwerp op een speelkaart moet qua vorm corresponderen met de vorm van een fysiek voorwerp op tafel, en moet ook qua kleur corresponderen met de kleur van een fysiek voorwerp op tafel. Dat hoeft voor die twee eigenschappen echter niet hetzelfde fysieke voorwerp te zijn. Een voorwerp op een speelkaart kan dus de vorm en de kleur combineren van twee fysieke voorwerpen op tafel. Maar als er een roze flamingo op een speelkaart staat, dan moet er ook een roze voorwerp op tafel staan, en moet er ook een flamingo op tafel staan. Bovendien moet juist één van de volgende voorwaarden voldaan zijn:

Het juiste voorwerp dat je voor een bepaalde speelkaart van tafel moet grijpen volgens de regels van het spelletje vlotte geesten, is net dat fysieke voorwerp uit de voorwaarde hierboven die voldaan is.

Gevraagd wordt:

Voorbeeld

>>> tafel = [('rood', 'stoel'), ('blauw', 'boek'), ('groen', 'fles'), ('grijs', 'muis'), ('wit', 'spook')]
>>> kaart1 = [('blauw', 'boek'), ('groen', 'stoel')]
>>> kaart2 = (('wit', 'fles'), ('grijs', 'muis'))
>>> kaart3 = {('rood', 'spook'), ('groen', 'fles')}
>>> kaart4 = [('blauw', 'spook'), ('grijs', 'stoel')]
>>> kaart5 = (('wit', 'muis'), ('rood', 'boek'))

>>> isvoorwerp(('blauw', 'boek'))
True
>>> isvoorwerp(['groen', 'spook'])
False
>>> isvoorwerp(('wit', 'lang', 'fles'))
False
>>> isvoorwerp((666, 'stoel'))
False

>>> iscollectie(tafel)
True
>>> iscollectie(kaart1)
True
>>> iscollectie(kaart2)
True
>>> iscollectie(frozenset(tafel))
False
>>> iscollectie([666] + tafel)
False
>>> iscollectie([('wit', 'spook'), ('wit', 'spook')])
False
>>> iscollectie([('wit', 'spook'), ('wit', 'stoel')])
False
>>> iscollectie([('wit', 'stoel'), ('rood', 'stoel')])
False

>>> istafel(tafel)
True
>>> istafel(kaart1)
False

>>> iskaart(kaart1, tafel)
True
>>> iskaart(kaart2, tafel)
True
>>> iskaart([('blauw', 'boek'), ('groen', 'stoel'), ('wit', 'fles')], tafel)
False
>>> iskaart([('blauw', 'boek'), ('groen', 'kikker')], tafel)
False
>>> iskaart(tafel, kaart1)
Traceback (most recent call last):
AssertionError: ongeldige tafel

>>> grijp(tafel, kaart1)
('blauw', 'boek')
>>> grijp(tafel, kaart2)
('grijs', 'muis')
>>> grijp(tafel, kaart3)
('groen', 'fles')
>>> grijp(tafel, kaart4)
('groen', 'fles')
>>> grijp(tafel, kaart5)
('groen', 'fles')
>>> grijp(kaart1, tafel)
Traceback (most recent call last):
AssertionError: ongeldige tafel
>>> grijp(tafel, [('blauw', 'boek'), ('groen', 'kikker')])
Traceback (most recent call last):
AssertionError: ongeldige kaart