De decatlon of tienkamp is een gecombineerd atletieknummer dat bestaat uit tien verschillende disciplines. De term vindt zijn oorsprong in de samenstelling van de Griekse woorden δέκα (déka, wat "tien" betekent) en ἄθλος (áthlos, of ἄθλον, áthlon, wat "daad, prestatie" betekent). Een tienkamp wordt doorgaans enkel door mannelijk atleten bestreden, terwijl vrouwelijke atleten elkaar bekampen in een heptatlon of zevenkamp.

decathlon
De tienkamp combineert vier loopnummers, drie sprongnummers en drie werpnummers.

De atletieknummers van een tienkamp worden afgewerkt over twee opeenvolgende dagen en de winnaars worden bepaald op basis van de prestaties over alle disciplines heen. De prestaties worden beoordeeld volgens een puntensysteem voor elke individuele discipline, en niet volgens de rangschikking voor de individuele nummers. Hierbij worden voor elke discipline drie parameters $$a$$, $$b$$ en $$c \in \mathbb{R}^{+}$$ vastgelegd, en wordt de score voor een prestatie $$p$$ voor die discipline berekend op basis van de volgende formules:

Hierbij staat $$\left \lfloor{x}\right \rfloor \in \mathbb{N}$$ voor het geheel deel van $$x \in \mathbb{R}^{+}$$ en wordt de prestatie $$p$$ voor een bepaalde discipline uitgedrukt in seconden (loopnummers), meters (werpnummers) of centimeters (sprongnummers). Voor de olympische tienkamp wordt bijvoorbeeld gebruikgemaakt van de volgende parameters:

discipline $$a$$ $$b$$ $$c$$
100 m 25.4347 18 1.81
verspringen 0.14354 220 1.4
kogelstoten 51.39 1.5 1.05
hoogspringen 0.8465 75 1.42
400 m 1.53775 82 1.81
110 m horden 5.74352 28.5 1.92
discuswerpen 12.91 4 1.1
polsstokspringen 0.2797 100 1.35
speerwerpen 10.14 7 1.08
1500 m 0.03768 480 1.85

De traditie wil dat de atleet die de olympische tienkamp wint voor vier jaar de titel van "Beste Atleet ter Wereld1" mag dragen. Aan de basis hiervoor lag de uitspraak van koning Gustav V van Zweden bij de overwinning van Jim Thorpe in de tienkamp tijdens de olympische spelen van 1912 in Stockholm: "You, sir, are the world's greatest athlete". De huidige wereldrecordhouder in de tienkamp is de Amerikaan Ashton Eaton, die 9045 punten behaalde bij het IAAF Wereldkampioenschap in 2015.

Opgave

In deze opgave werken we met twee soorten tekstbestanden, die regels bevatten met velden die van elkaar gescheiden worden door komma's (,). Tekstbestanden met parameters voor disciplines beschrijven de parameters die gebruikt worden voor de berekening van de score voor een bepaalde discipline. Elke regel bevat de naam van een discipline, de parameters $$a$$, $$b$$ en $$c \in \mathbb{R}^{+}$$, en een veld met daarin de tekst ja indien het een loopnummer betreft en de tekst neen indien het een sprong- of werpnummer betreft. Voor de disciplines van de tienkamp ziet het tekstbestand er bijvoorbeeld als volgt uit.

100 m,25.4347,18,1.81,ja
verspringen,0.14354,220,1.4,neen
kogelstoten,51.39,1.5,1.05,neen
hoogspringen,0.8465,75,1.42,neen
400 m,1.53775,82,1.81,ja
110 m horden,5.74352,28.5,1.92,ja
discuswerpen,12.91,4,1.1,neen
polsstokspringen,0.2797,100,1.35,neen
speerwerpen,10.14,7,1.08,neen
1500 m,0.03768,480,1.85,ja

Tekstbestanden met prestaties voor disciplines beschrijven de prestaties die een atleet geleverd heeft voor een aantal disciplines van een meerkamp (bijvoorbeeld een decatlon of een heptatlon). Elke regel bevat de naam van een discipline en de prestatie van de atleet voor die discipline. De prestaties worden uitgedrukt in seconden (loopnummers), meters (werpnummers) of centimeters (sprongnummers). Voor een reeks extreem goede prestaties voor de disciplines van de tienkamp (alle huidige wereldrecords van de individuele nummers) ziet het tekstbestand er bijvoorbeeld als volgt uit.

100 m,9.58
verspringen,895
kogelstoten,23.12
hoogspringen,245
400 m,43.18
110 m horden,12.87
discuswerpen,74.08
polsstokspringen,614
speerwerpen,98.48
1500 m,206.00

Gevraagd wordt:

Voorbeeld

Bij onderstaande voorbeeldsessie gaan we ervan uit dat de tekstbestanden parameters.txt2 en prestaties.txt3 zich in de huidige directory bevinden.

>>> params = parameters('parameters.txt')
>>> params['100 m']
(25.4347, 18.0, 1.81, True)
>>> params['polsstokspringen']
(0.2797, 100.0, 1.35, False)

>>> score('100 m', 9.58, params)
1202
>>> score('polsstokspringen', 614, params)
1277
>>> score('diepzeeduiken', 614, params)
Traceback (most recent call last):
AssertionError: ongeldige discipline

>>> eindscore('prestaties.txt', 'parameters.txt')
12544