Frans Bergman 4 роки тому
батько
коміт
46f0bd299b
1 змінених файлів з 51 додано та 0 видалено
  1. 51 0
      23.py

+ 51 - 0
23.py

@@ -0,0 +1,51 @@
+from collections import deque
+from time import time
+
+input = "137826495"
+#input = "389125467"
+cups = [int(i) for i in list(input)]
+max_cup = max(cups)
+
+def my_popleft(cups, following):
+    current = cups.popleft()
+    if current in following:
+        cups.extendleft(following[current])
+        del following[current]
+    return current
+
+def run_on_cups(cups, iterations):
+    cup_count = len(cups)
+    max_cup = max(cups)
+    following = {}
+    start = time()
+    print("Start")
+    for i in range(0, iterations):
+        current_cup = my_popleft(cups, following)
+        one = my_popleft(cups, following)
+        two = my_popleft(cups, following)
+        three = my_popleft(cups, following)
+        three_cups = [three, two, one]
+        dest = current_cup
+        while True:
+            dest -= 1
+            if dest == 0:
+                dest = max_cup
+            if dest not in three_cups:
+                break
+        following[dest] = three_cups
+        cups.append(current_cup)
+    print("Time:", time() - start)
+
+    while len(following) > 0:
+        current = my_popleft(cups, following)
+        cups.append(current)
+    return cups
+
+res1 = run_on_cups(deque(cups), 100)
+print("Answer 1:", ''.join([str(i) for i in res1]))
+res2 = run_on_cups(deque(cups + list(range(10, 1000001))), 10000000)
+res2.rotate(- res2.index(1))
+assert res2.popleft() == 1
+a = res2.popleft()
+b = res2.popleft()
+print("Answer 2:", a * b)