| 1 | 1 | # Score categories. |
| 2 | 2 | # Change the values as you see fit. |
| 3 | | YACHT = None |
| 4 | | ONES = None |
| 5 | | TWOS = None |
| 6 | | THREES = None |
| 7 | | FOURS = None |
| 8 | | FIVES = None |
| 9 | | SIXES = None |
| 10 | | FULL_HOUSE = None |
| 11 | | FOUR_OF_A_KIND = None |
| 12 | | LITTLE_STRAIGHT = None |
| 13 | | BIG_STRAIGHT = None |
| 14 | | CHOICE = None |
| 3 | YACHT = lambda dice: 50 if len(set(dice)) == 1 else 0 |
| 4 | ONES = lambda dice: dice.count(1) * 1 |
| 5 | TWOS = lambda dice: dice.count(2) * 2 |
| 6 | THREES = lambda dice: dice.count(3) * 3 |
| 7 | FOURS = lambda dice: dice.count(4) * 4 |
| 8 | FIVES = lambda dice: dice.count(5) * 5 |
| 9 | SIXES = lambda dice: dice.count(6) * 6 |
| 10 | FULL_HOUSE = lambda dice: sum(dice) if sorted([dice.count(x) for x in set(dice)]) == [2, 3] else 0 |
| 11 | FOUR_OF_A_KIND = lambda dice: sum(x * 4 for x in set(dice) if dice.count(x) >= 4) |
| 12 | LITTLE_STRAIGHT = lambda dice: 30 if sorted(dice) == [1, 2, 3, 4, 5] else 0 |
| 13 | BIG_STRAIGHT = lambda dice: 30 if sorted(dice) == [2, 3, 4, 5, 6] else 0 |
| 14 | CHOICE = lambda dice: sum(dice) |
| 15 | 15 | |
| 16 | 16 | |
| 17 | 17 | def score(dice, category): |
| 18 | | pass |
| 18 | # Edge Case: Invalid number of dice |
| 19 | if len(dice) != 5: |
| 20 | raise ValueError("Exactly five dice are required") |
| 21 | |
| 22 | # Edge Case: Invalid dice values (not between 1 and 6) |
| 23 | if any(d < 1 or d > 6 for d in dice): |
| 24 | raise ValueError("Dice values must be between 1 and 6 inclusively") |
| 25 | |
| 26 | # Edge Case: Invalid category |
| 27 | if category is None: |
| 28 | raise ValueError("Category cannot be None") |
| 29 | |
| 30 | return category(dice) |
| 31 | |
| 32 | # Handled Edge Cases: Invalid number of dice, Invalid dice values, Invalid category |