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)
Exemple #2
0
        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)