13.py
1 from lib import * 2 3 input = read_input(2017, 13) 4 5 lines = input.splitlines() 6 7 8 R = {} 9 S = {} 10 for line in lines: 11 a, b = map(int, line.split(": ")) 12 R[a] = b 13 S[a] = 0 14 15 n = max(S) 16 out = 0 17 for i in range(n): 18 if i in S and S[i] == 0: 19 out += i * R[i] 20 21 for k, v in S.items(): 22 S[k] = (v + 1) % (R[k] * 2 - 2) 23 24 print(out) 25 26 27 def step(R, S): 28 for k, v in S.items(): 29 S[k] = (v + 1) % (R[k] * 2 - 2) 30 31 32 R = {} 33 SC = {} 34 for line in lines: 35 a, b = map(int, line.split(": ")) 36 R[a] = b 37 SC[a] = 0 38 39 n = max(SC) 40 41 42 def test(): 43 S = SC.copy() 44 for i in range(n + 1): 45 if i in S and S[i] == 0: 46 return False 47 step(R, S) 48 return True 49 50 51 k = 0 52 while not test(): 53 k += 1 54 step(R, SC) 55 56 print(k)