/ Python / 2017 / 13.py
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)