File size: 1,514 Bytes
d2213a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
"""Утилиты для работы с бросанием монет"""

from typing import Dict, List
import math


class CoinCombinations:
    """Предрасчет комбинаций для бросания монет"""

    @staticmethod
    def binomial_coefficient(n: int, k: int) -> int:
        """
        Вычисление биномиального коэффициента C(n,k)

        Аргументы:
            n: общее количество бросков
            k: количество орлов

        Возвращает:
            int: количество комбинаций
        """
        if k > n or k < 0:
            return 0

        return math.comb(n, k)

    @staticmethod
    def get_coin_combinations(max_flips: int = 5) -> Dict[int, Dict[int, int]]:
        """
        Получение всех комбинаций для бросания монет

        Аргументы:
            max_flips: максимальное количество бросков

        Возвращает:
            словарь {количество_бросков: {орлов: количество_комбинаций}}
        """
        result = {}

        for num_flips in range(1, max_flips + 1):
            combinations = {}

            for heads in range(num_flips + 1):
                combinations[heads] = CoinCombinations.binomial_coefficient(num_flips, heads)

            result[num_flips] = combinations

        return result