|
@@ -4,14 +4,18 @@ from collections import deque
|
|
|
def spin(inserts, steps):
|
|
def spin(inserts, steps):
|
|
|
buf = deque([0])
|
|
buf = deque([0])
|
|
|
for i in range(1, inserts + 1):
|
|
for i in range(1, inserts + 1):
|
|
|
- buf.rotate(-(steps % len(buf) + 1))
|
|
|
|
|
- buf.appendleft(i)
|
|
|
|
|
|
|
+ buf.rotate(-steps % len(buf))
|
|
|
|
|
+ buf.append(i)
|
|
|
return buf
|
|
return buf
|
|
|
|
|
|
|
|
-def after_zero(buf):
|
|
|
|
|
- while buf.popleft() != 0:
|
|
|
|
|
- pass
|
|
|
|
|
- return buf[0]
|
|
|
|
|
|
|
+def spin_at(target, inserts, steps):
|
|
|
|
|
+ pos = last = 0
|
|
|
|
|
+ for i in range(1, inserts + 1):
|
|
|
|
|
+ pos = (pos + steps) % i + 1
|
|
|
|
|
+ if pos == target:
|
|
|
|
|
+ last = i
|
|
|
|
|
+ return last
|
|
|
|
|
|
|
|
-print(spin(2017, 386)[1])
|
|
|
|
|
-print(after_zero(spin(50000000, 386)))
|
|
|
|
|
|
|
+steps = 386
|
|
|
|
|
+print(spin(2017, steps)[0])
|
|
|
|
|
+print(spin_at(1, 50000000, steps))
|