elif d in rotations: if d == 'F': instructions.append(v) else: instructions.append(rotations[d] * R(v)) return instructions def part1(data_input): values = preprocess(data_input) pos = np.array([0, 0]) v = np.array([1, 0]) xs, ys = follow_all_by_instructions(pos, v, values) return int( np.round(np.absolute(xs[-1] - xs[0]) + np.absolute(ys[-1] - ys[0]))) def part2(data_input): values = preprocess(data_input) pos = np.array([0, 0]) v = np.array([10, 1]) xs, ys = follow_all_by_waypoint(pos, v, values) plt.plot(xs, ys) plt.show() return int( np.round(np.absolute(xs[-1] - xs[0]) + np.absolute(ys[-1] - ys[0]))) if __name__ == '__main__': main('input.txt', part1, part2)
offset = np.mod(a_i_inv * (o_0 - o_i), a_0) new_a.append(period) new_o.append(offset) return calc(new_a, new_o) def find_time_marie_method(a, k): t = a[0] i = 1 step = a[0] while i < len(a): print(i) delta = (t - k[i]) % a[i] pos = (t+k[i]-delta) % step n = (inv(pos, step) * delta) % step t += step*n step = step*a[i] i += 1 return t def q(n, a, k, start=0): if n == len(a) - 1: return start a_n_inv = inv(a[n], a[n + 1]) return a_n_inv * k[n] + a[n + 1] * q(n + 1, a, k, start=start) if __name__ == '__main__': main('test-input.txt', part1, part2)