"""Утилиты для работы с игральными костями""" from typing import Dict, List, Tuple from collections import defaultdict import itertools class DiceCombinations: """Предрасчет комбинаций для игральных костей""" @staticmethod def get_two_dice_combinations() -> Dict[int, int]: """ Получение количества комбинаций для сумм двух костей Возвращает: словарь {сумма: количество_комбинаций} """ combinations = defaultdict(int) for die1 in range(1, 7): for die2 in range(1, 7): combinations[die1 + die2] += 1 return dict(combinations) @staticmethod def get_three_dice_combinations() -> Dict[int, int]: """ Получение количества комбинаций для сумм трех костей Возвращает: словарь {сумма: количество_комбинаций} """ combinations = defaultdict(int) for die1 in range(1, 7): for die2 in range(1, 7): for die3 in range(1, 7): combinations[die1 + die2 + die3] += 1 return dict(combinations) @staticmethod def get_all_dice_combinations(max_dice: int = 3) -> Dict[int, Dict[int, int]]: """ Получение всех комбинаций для костей Аргументы: max_dice: максимальное количество костей Возвращает: словарь {количество_костей: {сумма: количество_комбинаций}} """ result = {} for num_dice in range(1, max_dice + 1): combinations = defaultdict(int) for dice in itertools.product(range(1, 7), repeat=num_dice): combinations[sum(dice)] += 1 result[num_dice] = dict(combinations) return result