#!/usr/bin/env python3 from functools import reduce from itertools import count import re, sys import math import numpy as np def tpl(l): return int(l) def dprint(*args): sep = False for arg in args: if sep: print('--------') sep = True for a, b in arg.items(): print('%10s: %s' % (a, ','.join(b))) print() fn = sys.argv[1] if len(sys.argv) > 1 else 'input%s' % 25 with open(fn) as f: lines = [l.strip() for l in f.readlines()] card, door = [tpl(l) for l in lines] cl, dl = 0, 0 lol = 20201227 sub = 1 for loop in count(1): sub = (sub * 7) % lol if sub == card: cl = loop break print(cl) sub = 1 for loop in count(1): sub = (sub * 7) % lol if sub == door: dl = loop break print(dl) print() sub = 1 for i in range(cl): sub = (sub * door) % lol print(sub) print() sub = 1 for i in range(dl): sub = (sub * card) % lol print(sub)