17_spinlock.py 480 B

123456789101112131415161718192021
  1. #!/usr/bin/env python3
  2. from collections import deque
  3. def spin(inserts, steps):
  4. buf = deque([0])
  5. for i in range(1, inserts + 1):
  6. buf.rotate(-steps % len(buf))
  7. buf.append(i)
  8. return buf
  9. def spin_at(target, inserts, steps):
  10. pos = last = 0
  11. for i in range(1, inserts + 1):
  12. pos = (pos + steps) % i + 1
  13. if pos == target:
  14. last = i
  15. return last
  16. steps = 386
  17. print(spin(2017, steps)[0])
  18. print(spin_at(1, 50000000, steps))