Voor wie moeite heeft met kloklezen is er de Qlocktwo1 — een design van Biegert & Funk. Deze bijzonder vormgegeven klok geeft de tijd niet weer in cijfers maar in woorden, waarbij de tijdsweergave slechts om de vijf minuten verandert: om 7:30 geeft de klok de tijd weer als HET IS HALF ACHT.

Qlocktwo
Het unieke concept van de Qlocktwo geeft de tijd niet weer in cijfers maar in woorden: om 7:30 geeft de klok de tijd weer als HET IS HALF ACHT.

Qlocktwo bestaat uit een reeks letters die gerangschikt zijn in een rechthoekig rooster. Hierbij nummeren we de rijen van het rooster van boven naar onder, en de kolommen van links naar rechts, telkens vanaf nul.

Qlocktwo
De Qlocktwo bestaat uit een reeks letters die gerangschikt zijn in een rechthoekig rooster. We nummeren de rijen van het rooster van boven naar onder, en de kolommen van links naar rechts, telkens vanaf nul.

Een tijdstip $$u:m$$ ($$0 \leq u < 24$$ en $$0 \leq m < 60$$, waarbij $$m$$ een veelvoud is van 5) op een 24-uursklok wordt op de Qlocktwo in woorden weergegeven volgens de omschrijvingen in onderstaande tabel.

$$m$$ omschrijving
0 HET IS $$t_u$$ UUR
5 HET IS VIJF OVER $$t_u$$
10 HET IS TIEN OVER $$t_u$$
15 HET IS KWART OVER $$t_u$$
20 HET IS TIEN VOOR HALF $$t_{u + 1}$$
25 HET IS VIJF VOOR HALF $$t_{u + 1}$$
30 HET IS HALF $$t_{u + 1}$$
35 HET IS VIJF OVER HALF $$t_{u + 1}$$
40 HET IS TIEN OVER HALF $$t_{u + 1}$$
45 HET IS KWART VOOR $$t_{u + 1}$$
50 HET IS TIEN VOOR $$t_{u + 1}$$
55 HET IS VIJF VOOR $$t_{u + 1}$$

Hierbij is $$t_u$$ de omschrijving in woorden van uur $$u$$ op een 12-uursklok (waarbij $$t_0$$ en $$t_{12}$$ worden omschreven als TWAALF). Elk woord van de tijdsweergave wordt gevormd door opeenvolgende letters op één rij in het rooster, en loopt dus nooit over twee of meer rijen. Hieronder tonen we een geldig (groen) en ongeldig (rood) voorkomen van het woord NA op de Qlocktwo.

Qlocktwo
Geldig (groen) en ongeldig (rood) voorkomen van het woord NA op de Qlocktwo. Elk woord van de weergave wordt horizontaal op één enkele rij uitgelezen.

Sommige woorden kunnen meerdere keren in het rooster voorkomen. Zo komt het woord OVER tweemaal voor in de weergave uit onderstaande figuur (midden). Voor de plaatsing van de opeenvolgende woorden van de tijdsweergave op de Qlocktwo kiezen we telkens het eerstvolgende voorkomen van een woord als we het rooster van letters van links naar rechts en van boven naar onder doorlopen. De woorden mogen elkaar nooit overlappen en als twee opeenvolgende woorden van de tijdsweergave op dezelfde rij van het rooster staan, dan moet er bovendien minstens één letter tussen staan (zoals tussen HET, IS en VIJF in onderstaande figuur, links).

Qlocktwo
Plaatsing van de woorden op de Qlocktwo.

De tijdsweergave HET IS VIJF OVER NEGEN gebruikt daardoor het eerste voorkomen van het woord OVER in bovenstaande figuur (blauw), terwijl de tijdsweergave HET IS KWART OVER TWAALF gebruik moet maken van het tweede voorkomen van het woord OVER (oranje).

Opgave

Definieer een klasse Qlocktwo waarmee klokken kunnen voorgesteld worden die — zoals de Qlocktwo — de tijd in woorden weergeven op een rechthoekig rooster van letters. Bij het instantiëren van een object van de klasse Qlocktwo moet een string (String) doorgegeven worden met de letters uit het rooster van de klok, waarbij letters van het rooster worden doorlopen van links naar rechts, en van boven naar onder. Standaard wordt uitgegaan van een vierkant rooster, maar er kan ook een natuurlijk getal als tweede argument doorgegeven worden dat het aantal kolommen van het rooster aangeeft. Als er geen geldige argumenten doorgegeven worden bij het instantiëren van een object van de klasse Qlocktwo, dan moet een AssertionError opgeworpen worden met de boodschap ongeldig rooster. Voorts moet de klasse Qlocktwo minstens de volgende methoden ondersteunen:

Voorbeeld

> const klok = new Qlocktwo("HETKISAVIJFTIENATZVOOROVERMEKWARTHALFSPMOVERVOORTHGEENSTWEEAMCDRIEVIERVIJFZESZEVENONEGENACHTTIENELFTWAALFPMUUR", 11);
> klok.toString()
HETKISAVIJF
TIENATZVOOR
OVERMEKWART
HALFSPMOVER
VOORTHGEENS
TWEEAMCDRIE
VIERVIJFZES
ZEVENONEGEN
ACHTTIENELF
TWAALFPMUUR
> klok.posities("na")
[[1, 3]]
> klok.posities("OVER")
[[2, 0], [3, 7]]
> klok.posities("OVER", [2, 1])
[[3, 7]]
> klok.weergave("07:30")
"HET IS HALF ACHT"
> klok.weergave("07:30:15")
AssertionError: ongeldig tijdstip
> klok.weergave("30:07")
AssertionError: ongeldig tijdstip
> klok.weergave("11:24")
AssertionError: ongeldig tijdstip
> console.log(klok.visueel("07:30"))
HET-IS-----
-----------
-----------
HALF-------
-----------
-----------
-----------
-----------
ACHT-------
-----------
> klok.visueel("07:30")
"HET-IS-----\n-----------\n-----------\nHALF-------\n-----------\n-----------\n-----------\n-----------\nACHT-------\n-----------"

> new Qlocktwo("ABCDEF")
AssertionError: ongeldig rooster

> new Qlocktwo("ABCDEF", 4)
AssertionError: ongeldig rooster

> const klok2 = new Qlocktwo("ABCDEFGHI");
> klok2.posities("AB", [3, 3])
AssertionError: ongeldige positie
> klok2.visueel("07:30")
AssertionError: onmogelijke weergave