20
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
with open('input') as file:
|
||||
xs = [int(x) for x in file.read().strip().split('\n')]
|
||||
|
||||
@dataclass
|
||||
class Node:
|
||||
p: 'Node'
|
||||
n: 'Node'
|
||||
d: int
|
||||
def __str__(self):
|
||||
return str(self.d)
|
||||
__repr__ = __str__
|
||||
def move(self, i):
|
||||
if i==0:
|
||||
return
|
||||
if i>0:
|
||||
left1 = self.p
|
||||
left2 = self.n
|
||||
left1.n = left2
|
||||
left2.p = left1
|
||||
right1 = self
|
||||
for _ in range(i%(len(xs)-1)):
|
||||
right1 = right1.n
|
||||
right2 = right1.n
|
||||
right1.n = self
|
||||
right2.p = self
|
||||
self.p = right1
|
||||
self.n = right2
|
||||
else:
|
||||
right1 = self.p
|
||||
right2 = self.n
|
||||
right1.n = right2
|
||||
right2.p = right1
|
||||
left2 = self
|
||||
for _ in range((-i)%(len(xs)-1)):
|
||||
left2 = left2.p
|
||||
left1 = left2.p
|
||||
left1.n = self
|
||||
left2.p = self
|
||||
self.p = left1
|
||||
self.n = left2
|
||||
|
||||
|
||||
nodes = [Node(None, None, x) for x in xs]
|
||||
for l, r in zip(nodes, nodes[1:]):
|
||||
l.n = r
|
||||
r.p = l
|
||||
nodes[0].p = nodes[-1]
|
||||
nodes[-1].n = nodes[0]
|
||||
for x in nodes:
|
||||
x.move(x.d)
|
||||
s = 0
|
||||
zero = nodes[xs.index(0)]
|
||||
for _ in range(3):
|
||||
for _ in range(1000):
|
||||
zero = zero.n
|
||||
s += zero.d
|
||||
print(s)
|
||||
|
||||
nodes = [Node(None, None, x*811589153) for x in xs]
|
||||
for l, r in zip(nodes, nodes[1:]):
|
||||
l.n = r
|
||||
r.p = l
|
||||
nodes[0].p = nodes[-1]
|
||||
nodes[-1].n = nodes[0]
|
||||
for _ in range(10):
|
||||
for x in nodes:
|
||||
x.move(x.d)
|
||||
s = 0
|
||||
zero = nodes[xs.index(0)]
|
||||
for _ in range(3):
|
||||
for _ in range(1000):
|
||||
zero = zero.n
|
||||
s += zero.d
|
||||
print(s)
|
||||
Reference in New Issue
Block a user