31 lines
908 B
Python
31 lines
908 B
Python
|
|
def read_input(filename: str) -> tuple[int, int]:
|
|
with open(filename, "r") as f:
|
|
cards_pub, doors_pub = f.read().splitlines()
|
|
return int(cards_pub), int(doors_pub)
|
|
|
|
def reverse_loop_size(public_key: int, subject_number: int) -> int:
|
|
key = 1
|
|
loop_size = 0
|
|
while key != public_key:
|
|
loop_size += 1
|
|
key *= subject_number
|
|
key %= 20201227
|
|
return loop_size
|
|
|
|
def transform_key(subject_number: int, loop_size: int) -> int:
|
|
key = 1
|
|
for _ in range(loop_size):
|
|
key *= subject_number
|
|
key %= 20201227
|
|
return key
|
|
|
|
def part1(cards_pub: int, doors_pub: int) -> int:
|
|
subject_number = 7
|
|
card_loop_size = reverse_loop_size(cards_pub, subject_number)
|
|
return transform_key(doors_pub, card_loop_size)
|
|
|
|
if __name__ == "__main__":
|
|
cards_pub, doors_pub = read_input("input.txt")
|
|
print("part1: ", part1(cards_pub, doors_pub))
|