Sinds 1998 is curling officieel een olympische wintersport. Aan de vooravond van de Olymische Winterspelen wordt het dus hoog tijd om deze sport — die wat weg heeft van petanque1 op ijs — wat beter te leren kennen.

curling logo
Logo van curling.
curling
Speler die een steen schuift tijdens een curlingwedstrijd.

In curling schuiven twee teams van vier spelers (team rood en team geel) om beurt zware, gepolijste granieten stenen op een ijsvlak naar het huis: een doelgebied dat onderverdeeld is in vier concentrische ringen. Elk team heeft acht stenen die ze om beurt mogen schuiven. De bedoeling is om tijdens een wedstrijd zoveel mogelijk punten te scoren. Een wedstrijd bestaat meestal uit acht of tien ends, die voltooid worden nadat beide teams al hun stenen gespeeld hebben.

Bij het beëindigen van een end worden punten gescoord voor stenen die het dichtst bij de dolly (het middelpunt van het huis) liggen. Voor elke steen die dichter bij de dolly ligt dan de dichtst bij de dolly liggende steen van de tegenpartij scoort men één punt. Enkel stenen die in het huis liggen, worden in rekening gebracht bij het bepalen van de score. Een steen ligt in het huis als hij — ook al is het maar een fractie — overlapt met de cirkel die gevormd wordt door de buitenste rand van de buitenste ring van het huis. Hieronder zie je enkele voorbeelden van scores bij het beëindigen van een end.

curling scores
Enkele voorbeelden van scores die behaald worden in een curlingwedstrijd na het beëindigen van een end.

De kleuren van de ringen hebben geen betekenis. Ze worden alleen gebruikt om makkelijker te kunnen inschatten hoe de stenen zich ten opzichte van de dolly en van elkaar bevinden. In curling komt het immers vaak op fracties aan en is het met het blote oog niet altijd makkelijk om te bepalen welke stenen dichter bij de dolly liggen. Het gebeurt dan ook vaak dat teams tijdens een end strategische beslissingen nemen die gebaseerd zijn op verkeerde inschattingen van de onderlinge posities van de stenen. Er bestaan zeer nauwkeurige en zeer gespecialiseerde apparaten om de afstand van de stenen tot de dolly te bepalen, maar die mogen enkel gebruikt worden als een end beëindigd is. Hierdoor eindigt een end ook nooit op een gelijkspel, behalve als er geen enkele steen in het huis ligt.

Opgave

Bepaal de score van de twee teams, gegeven de posities van de stenen op het einde van een end in een curlingwedstrijd. De posities van de stenen worden voorgesteld als een reeks (een lijst of een tuple) met beschrijvingen van $$r + g$$ stenen, waarbij $$r$$ staat voor het aantal rode stenen ($$0 \leq r \leq 8$$) en $$g$$ voor het aantal gele stenen ($$0 \leq g \leq 8$$).

Elke steen wordt beschreven door een tuple $$(x, y, t)$$, waarbij $$(x, y)$$ de coördinaten zijn van het middelpunt van de steen in een assenstelsel met oorsprong in de dolly ($$x, y \in \mathbb{R}$$) en $$t$$ een string is die de kleur van de steen aangeeft (R voor rood en G voor geel).

afmetingen en cirkelmaten
In de curlingsport draait alles om cirkels.

In curling draait alles om cirkels: om de score te bepalen moet je weten of een cirkelvormige steen al dan niet in het cirkelvormige huis ligt en moet je ook de afstand van een steen tot de dolly kunnen bepalen. We helpen je op weg door wat afmetingen uit de curlingsport op te lijsten, en brengen meteen ook nog wat cirkelmaten in herinnering (zie bovenstaande figuur als referentie):

Gevraagd wordt:

Voorbeeld

>>> isbinnen(70.0, 0.0)
True
>>> isbinnen(70.0, 0.0, inch=False)
False
>>> isbinnen(78.0, 0.0)
False

>>> isgeldig([(20.0, 10.0, 'R'), (25.0, 22.0, 'G'), (42.0, 37.0, 'R')])
True
>>> isgeldig([(20.0, 10.0, 'R'), (25.0, 22.0, 'R'), (42.0, 37.0, 'G')])
True
>>> isgeldig([(20.0, 10.0, 'R'), (25.0, 22.0, 'R'), (42.0, 37.0, 'R')])
True

>>> score([(20.0, 10.0, 'R'), (25.0, 22.0, 'G'), (42.0, 37.0, 'R')])
(1, 0)
>>> score([(20.0, 10.0, 'R'), (25.0, 22.0, 'R'), (42.0, 37.0, 'G')])
(2, 0)
>>> score([(20.0, 10.0, 'R'), (25.0, 22.0, 'R'), (42.0, 37.0, 'R')])
(3, 0)
>>> score([(0.508, 0.254, 'R'), (0.635, 0.5588, 'G'), (1.0668, 0.9398, 'R')], False)
(1, 0)
>>> score([(0.508, 0.254, 'R'), (0.635, 0.5588, 'R'), (1.0668, 0.9398, 'G')], inch=False)
(2, 0)
>>> score([(0.508, 0.254, 'R'), (0.635, 0.5588, 'R'), (1.0668, 0.9398, 'R')], False)
(3, 0)

Alle voorbeelden voor de functie score gebruiken stenen op dezelfde posities (de eerste drie uitgedrukt in inch de laatste drie in meter), maar met een verschillende kleur. Hieronder hebben we deze posities van de stenen grafisch voorgesteld, met hun coördinaten uitgedrukt in inch.

voorbeeldscores
Grafische voorstelling van de posities van de stenen die als voorbeeld gebruikt worden (coördinaten in inch).