From c0acc480e7c905a4b3cf510f3d01fc5c029557ae Mon Sep 17 00:00:00 2001 From: kamoshi <18511281+kamoshi@users.noreply.github.com> Date: Fri, 25 Dec 2020 19:59:26 +0100 Subject: [PATCH] Create day25.py --- 2020/Python/day25.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 2020/Python/day25.py diff --git a/2020/Python/day25.py b/2020/Python/day25.py new file mode 100644 index 0000000..78a607a --- /dev/null +++ b/2020/Python/day25.py @@ -0,0 +1,38 @@ +from typing import Tuple + + +def parse_pks() -> Tuple[int, int]: + with open("input.txt") as file: + return int(file.readline()), int(file.readline()) + + +def transform_step(value: int, subject: int) -> int: + value *= subject + value %= 20201227 + return value + + +def transform_loop(loop_value: int, subject: int) -> int: + value = 1 + for _ in range(loop_value): + value = transform_step(value, subject) + return value + + +def find_loop_value(subject: int, desired_value: int) -> int: + value = 1 + loop = 0 + while value != desired_value: + value = transform_step(value, subject) + loop += 1 + return loop + + +def solve_p1(public_key1: int, public_key2: int) -> int: + loop_value1 = find_loop_value(subject=7, desired_value=public_key1) + encryption_key = transform_loop(loop_value=loop_value1, subject=public_key2) + return encryption_key + + +PK1, PK2 = parse_pks() +print(solve_p1(public_key1=PK1, public_key2=PK2))