mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-23 21:11:08 +00:00
Add Project Euler problem 205 solution 1 (#5781)
* updating DIRECTORY.md * Add solution * updating DIRECTORY.md * Fix * Fix Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
This commit is contained in:
parent
ed4c92d98a
commit
0b8d6d70ce
|
@ -865,6 +865,8 @@
|
|||
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_191/sol1.py)
|
||||
* Problem 203
|
||||
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_203/sol1.py)
|
||||
* Problem 205
|
||||
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_205/sol1.py)
|
||||
* Problem 206
|
||||
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_206/sol1.py)
|
||||
* Problem 207
|
||||
|
|
0
project_euler/problem_205/__init__.py
Normal file
0
project_euler/problem_205/__init__.py
Normal file
75
project_euler/problem_205/sol1.py
Normal file
75
project_euler/problem_205/sol1.py
Normal file
|
@ -0,0 +1,75 @@
|
|||
"""
|
||||
Project Euler Problem 205: https://projecteuler.net/problem=205
|
||||
|
||||
Peter has nine four-sided (pyramidal) dice, each with faces numbered 1, 2, 3, 4.
|
||||
Colin has six six-sided (cubic) dice, each with faces numbered 1, 2, 3, 4, 5, 6.
|
||||
|
||||
Peter and Colin roll their dice and compare totals: the highest total wins.
|
||||
The result is a draw if the totals are equal.
|
||||
|
||||
What is the probability that Pyramidal Peter beats Cubic Colin?
|
||||
Give your answer rounded to seven decimal places in the form 0.abcdefg
|
||||
"""
|
||||
|
||||
from itertools import product
|
||||
|
||||
|
||||
def total_frequency_distribution(sides_number: int, dice_number: int) -> list[int]:
|
||||
"""
|
||||
Returns frequency distribution of total
|
||||
|
||||
>>> total_frequency_distribution(sides_number=6, dice_number=1)
|
||||
[0, 1, 1, 1, 1, 1, 1]
|
||||
|
||||
>>> total_frequency_distribution(sides_number=4, dice_number=2)
|
||||
[0, 0, 1, 2, 3, 4, 3, 2, 1]
|
||||
"""
|
||||
|
||||
max_face_number = sides_number
|
||||
max_total = max_face_number * dice_number
|
||||
totals_frequencies = [0] * (max_total + 1)
|
||||
|
||||
min_face_number = 1
|
||||
faces_numbers = range(min_face_number, max_face_number + 1)
|
||||
for dice_numbers in product(faces_numbers, repeat=dice_number):
|
||||
total = sum(dice_numbers)
|
||||
totals_frequencies[total] += 1
|
||||
|
||||
return totals_frequencies
|
||||
|
||||
|
||||
def solution() -> float:
|
||||
"""
|
||||
Returns probability that Pyramidal Peter beats Cubic Colin
|
||||
rounded to seven decimal places in the form 0.abcdefg
|
||||
|
||||
>>> solution()
|
||||
0.5731441
|
||||
"""
|
||||
|
||||
peter_totals_frequencies = total_frequency_distribution(
|
||||
sides_number=4, dice_number=9
|
||||
)
|
||||
colin_totals_frequencies = total_frequency_distribution(
|
||||
sides_number=6, dice_number=6
|
||||
)
|
||||
|
||||
peter_wins_count = 0
|
||||
min_peter_total = 9
|
||||
max_peter_total = 4 * 9
|
||||
min_colin_total = 6
|
||||
for peter_total in range(min_peter_total, max_peter_total + 1):
|
||||
peter_wins_count += peter_totals_frequencies[peter_total] * sum(
|
||||
colin_totals_frequencies[min_colin_total:peter_total]
|
||||
)
|
||||
|
||||
total_games_number = (4 ** 9) * (6 ** 6)
|
||||
peter_win_probability = peter_wins_count / total_games_number
|
||||
|
||||
rounded_peter_win_probability = round(peter_win_probability, ndigits=7)
|
||||
|
||||
return rounded_peter_win_probability
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(f"{solution() = }")
|
Loading…
Reference in New Issue
Block a user