Helderziende Karl Fulves1 uit New Jersey (VSA) vond het volgende paragnostische trucje uit. Geef een gewone dobbelsteen aan een vriendin en draai je rug naar haar toe. Vraag haar om de dobbelsteen op een tafel te plaatsen. Daarna vraag je haar om de dobbelsteen een kwartslag te draaien:als het bovenste getal even is, dan moet ze de dobbelsteen naar het oosten draaien (bovenkant naar rechts), en als het bovenste getal oneven is, dan moet ze de dobbelsteen naar het noorden draaien (bovenkant van haar weg). Hierdoor komt een ander getal bovenaan te liggen, en kan ze de dobbelsteen opnieuw draaien volgens dezelfde procedure:naar het oosten als de bovenkant even is en naar het noorden als het oneven is.

Nadat ze deze procedure een paar keer heeft toegepast, vraag je haar om verder te doen tot het getal 1 bovenaan komt te liggen, de dobbelsteen dan nog een laatste keer te draaien en zich dan te concentreren op het getal dat bovenaan ligt. Het lijkt logisch dat er voor het laatste getal vier mogelijkheden zijn, maar toch kan je het correct raden. Hoe kan dat?

Na maximaal drie keer draaien herhaalt de dobbelsteen steeds hetzelfde patroon:1 4 5 6 3 2. Nadat je vriendin de dobbelsteen dus minstens drie keer gedraaid heeft, kan je zonder problemen voorspellen dat na de 1 de 4 bovenaan zal komen te liggen. Omdat de volledige cyclus voorspelbaar is, kan je de truc een paar keer na elkaar herhalen om verschillende eindgetallen te bekomen.

Opgave

Definieer een klasse Dobbelsteen waarmee dobbelstenen kunnen voorgesteld worden in JavaScript die op een bepaalde manier voor je op tafel liggen. Deze dobbelstenen moeten een kwartslag kunnen gedraaid worden in een bepaalde richting, volgens het model dat omschreven wordt in onderstaande figuur. Hierbij worden dobbelstenen op een schematische manier voorgesteld, zodat alle zijden van de dobbelsteen zichtbaar gemaakt worden. Het centrale schema stelt bijvoorbeeld een dobbelsteen voor waarbij de 6 bovenaan ligt, de 3 achteraan, de 4 vooraan, de 2 links, de 5 rechts en de 1 onderaan. De vier andere schema’s geven aan hoe de dobbelsteen gaat liggen als je vanuit deze positie de dobbelsteen draait naar het noorden (bovenaan), het zuiden (onderaan), het oosten (rechts) of het westen (links).

Bij het instantiëren van objecten van de klasse Dobbelsteen moeten geen argumenten doorgegeven worden. Na initialisatie is een dobbelsteen immers altijd gepositioneerd zoals de dobbelsteen die centraal in bovenstaande figuur wordt voorgesteld. Voorts moet de klasse Dobbelsteen minstens de volgende methoden ondersteunen:

Voorbeeld

> var dobbel = new Dobbelsteen();
> dobbel.bovenkant();
6
> dobbel.toJson();
'{"boven":6,"onder":1,"links":2,"rechts":5,"voor":4,"achter":3}'
> dobbel.draai('O');
2
> dobbel.toJson();
'{"boven":2,"onder":5,"links":1,"rechts":6,"voor":4,"achter":3}'
> dobbel.draai('W');
6
> dobbel.toJson();
'{"boven":6,"onder":1,"links":2,"rechts":5,"voor":4,"achter":3}'
> dobbel.draai('N');
4
> dobbel.toJson();
'{"boven":4,"onder":3,"links":2,"rechts":5,"voor":1,"achter":6}'
> dobbel.draai('Z');
6
> dobbel.toJson();
'{"boven":6,"onder":1,"links":2,"rechts":5,"voor":4,"achter":3}'
> dobbel.draai('X');
AssertionError: ongeldige richting 
> dobbel.reeks(1);
[2, 1, 4, 5, 6, 3, 2, 1, 4]
> dobbel.toJson();
'{"boven":4,"onder":3,"links":5,"rechts":2,"voor":6,"achter":1}'
> dobbel.reeks(3)
[5, 6, 3, 2]
> dobbel.toJson();
'{"boven":2,"onder":5,"links":1,"rechts":6,"voor":4,"achter":3}'