1
- import numbers
2
1
from collections import namedtuple
3
- from functools import reduce
4
2
from typing import List
5
3
6
4
MIN_SCORE = 4
@@ -20,13 +18,9 @@ def calculate_score(scores: List[int]) -> int:
20
18
Returns int of the sum of the scores.
21
19
"""
22
20
#accumulated score
23
- acscore = 0
24
- for score in scores :
25
- if score not in DICE_VALUES :
26
- raise ValueError
27
- if score >= MIN_SCORE :
28
- acscore += score
29
- return acscore
21
+ if not all (i in DICE_VALUES for i in scores ):
22
+ raise ValueError ("Includes invalid dice roll(s)" )
23
+ return sum (i for i in scores if i >= MIN_SCORE )
30
24
31
25
def get_winner (players ):
32
26
"""Given a list of Player namedtuples return the player
@@ -46,20 +40,7 @@ def get_winner(players):
46
40
output:
47
41
Player(name='player 3', scores=[4, 5, 1, 2])
48
42
"""
49
- lencheck = set ()
50
- scores = dict ()
51
- for player in players :
52
- lencheck .add (len (player .scores ))
53
- if len (lencheck ) > 1 :
54
- raise ValueError
55
- scores .update ({player .name : calculate_score (player .scores )})
56
- HighestscorePlayername = sorted (scores .items (),key = lambda x :x [1 ])[- 1 ][0 ]
57
- for player in players :
58
- if player .name == HighestscorePlayername :
59
- return player
60
-
61
- print (get_winner ([
62
- Player (name = 'player 1' , scores = [1 , 3 , 2 , 5 ]),
63
- Player (name = 'player 2' , scores = [1 , 1 , 1 , 1 ]),
64
- Player (name = 'player 3' , scores = [4 , 5 , 1 , 2 ]), # max 9
65
- ]))
43
+ lencheck = {len (player .scores ) for player in players }
44
+ if len (lencheck ) > 1 :
45
+ raise ValueError ("Players with different amount of score" )
46
+ return max (players , key = lambda x : calculate_score (x .scores ))
0 commit comments