40 lines
769 B
Python
40 lines
769 B
Python
def part_1(data):
|
|
target = 2017
|
|
steps = int(data)
|
|
xs = [0]
|
|
i = 0
|
|
for n in range(1, target + 1):
|
|
i = (i + steps) % len(xs)
|
|
xs.insert(i + 1, n)
|
|
i += 1
|
|
|
|
for j in range(len(xs)):
|
|
if xs[j] == target:
|
|
print(xs[j + 1])
|
|
return
|
|
|
|
|
|
def part_2(data, m=50_000_000):
|
|
steps = int(data)
|
|
len_xs = 1
|
|
last_zero = None
|
|
i = 0
|
|
for n in range(1, m + 1):
|
|
i = (i + steps) % len_xs
|
|
if i == 0:
|
|
last_zero = n
|
|
len_xs += 1
|
|
i += 1
|
|
return last_zero
|
|
|
|
def main():
|
|
data = open(0).read().strip()
|
|
part_1(data)
|
|
assert part_2(data, 1000) == 531
|
|
assert part_2(data, 10000) == 2616
|
|
print(part_2(data))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|