Kaynağa Gözat

Improve 2017 day 17 solution

Taddeus Kroes 4 yıl önce
ebeveyn
işleme
d91680def4
1 değiştirilmiş dosya ile 12 ekleme ve 8 silme
  1. 12 8
      2017/17_spinlock.py

+ 12 - 8
2017/17_spinlock.py

@@ -4,14 +4,18 @@ from collections import deque
 def spin(inserts, steps):
     buf = deque([0])
     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
 
-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))