Het spelletje buzzword bingo (ook bekend onder de naam bullshit bingo) kreeg vooral bekendheid toen het in 1994 werd gebruikt in een strip van Dilbert.

Dilbert buzzword bingo

Buzzword bingo wordt vaak gespeeld om de tijd te doden tijdens saaie lessen, vergaderingen of andere bijeenkomsten waarin naar het oordeel van de luisteraars te veel geleuterd wordt. Het idee is dat elke deelnemer voorafgaand aan een les of vergadering een lijstje maakt van stopwoorden of buzzwords waarvan hij verwacht dat de spreker die zal gebruiken. Deze woorden worden op een bingokaart ingevuld in een vierkant rooster met $$n$$ rijen en $$n$$ kolommen ($$n \in \mathbb{N}$$). Voor een les genetica zou je bijvoorbeeld de volgende de kaart kunnen opstellen.

buzzword bingo

Als een deelnemer de spreker een woord hoort zeggen dat hij op zijn kaart heeft staan, dan mag het woord geschrapt worden. Wie als eerste alle woorden op een rij of een kolom van zijn kaart geschrapt heeft, en daarna heel hard "Bingo!" roept, heeft het spelletje gewonnen.

Opgave

Schrijf een klasse BuzzBingo waarmee objecten kunnen aangemaakt worden die een bingokaart voorstellen waarmee een spelletje buzzword bingo kan gespeeld worden. De objecten van de klasse BuzzBingo moeten minstens de volgende methoden ondersteunen.

Voorbeeld

>>> bingo = BuzzBingo(4, [
...    'cell', 'bacteria', 'PCR', 'virus', 
...    'allele', 'chromosome', 'DNA', 'meiosis', 
...    'protein', 'phenotype', 'gene', 'mutation',
...    'genome', 'recessive', 'RNA', 'mitosis'
... ])
>>> bingo
----
----
----
----
>>> bingo.gewonnen()
False

>>> bingo.schrapWoord('phenotype')
(2, 1)
>>> print(bingo)
----
----
-x--
----
>>> bingo.gewonnen()
False

>>> bingo.schrapWoord('dominant')
Traceback (most recent call last):
AssertionError: dominant staat niet op de kaart

>>> bingo.schrapWoord('phenotype')
Traceback (most recent call last):
AssertionError: phenotype is reeds geschrapt

>>> bingo.schrapWoorden(['PCR', 'chromosome', 'protein'])
[(0, 2), (1, 1), (2, 0)]
>>> bingo
--x-
-x--
xx--
----
>>> bingo.gewonnen()
False

>>> bingo.schrapWoorden(('recessive', 'bacteria', 'mitosis'))
[(3, 1), (0, 1), (3, 3)]
>>> print(bingo)
-xx-
-x--
xx--
-x-x
>>> bingo.gewonnen()
True

>>> bingo = BuzzBingo(2, ('cell', 'bacteria', 'PCR'))
Traceback (most recent call last):
AssertionError: ongeldige kaart
>>> bingo = BuzzBingo(2, ['cell', 'bacteria', 'PCR', 'virus', 'allele'])
Traceback (most recent call last):
AssertionError: ongeldige kaart