From 642432cef87263e19facf84f25c0eb1bdbbf6a91 Mon Sep 17 00:00:00 2001 From: felixm Date: Sat, 13 Apr 2024 18:31:32 -0400 Subject: [PATCH] Solve problem 151. --- python/e151.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 python/e151.py diff --git a/python/e151.py b/python/e151.py new file mode 100644 index 0000000..34a289f --- /dev/null +++ b/python/e151.py @@ -0,0 +1,31 @@ +from fractions import Fraction +from functools import lru_cache + + +@lru_cache +def expected_singles(sheets): + count = 0 + if len(sheets) == 1 and sheets[0] == 5: + return 0 + elif len(sheets) == 1: + count += 1 + + weight = Fraction(1, len(sheets)) + for sheet in sheets: + nsheets = list(sheets) + nsheets.remove(sheet) + for nsheet in range(sheet, 5): + nsheets.append(nsheet + 1) + count += weight * expected_singles(tuple(sorted(nsheets))) + return count + + +def euler_151(): + return round(float(expected_singles(tuple([2, 3, 4, 5]))), 6) + + +if __name__ == "__main__": + solution = euler_151() + print("e151.py: " + str(solution)) + assert(solution == 0.464399) +