You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.1 KiB
Python
49 lines
1.1 KiB
Python
6 years ago
|
num_players = 419
|
||
|
num_marbles = 71052 * 100
|
||
|
|
||
|
class Node:
|
||
|
def __init__(self, val):
|
||
|
self.val = val
|
||
|
self.prev = None
|
||
|
self.next = None
|
||
|
|
||
|
def insert(self, val):
|
||
|
new = Node(val)
|
||
|
new.prev = self
|
||
|
new.next = self.next
|
||
|
if self.next is not None:
|
||
|
self.next.prev = new
|
||
|
self.next = new
|
||
|
return new
|
||
|
|
||
|
def remove(self):
|
||
|
if self.prev is not None:
|
||
|
self.prev.next = self.next
|
||
|
if self.next is not None:
|
||
|
self.next.prev = self.prev
|
||
|
self.next = None
|
||
|
self.prev = None
|
||
|
|
||
|
|
||
|
cur_node = Node(0)
|
||
|
cur_node.next = cur_node
|
||
|
cur_node.prev = cur_node
|
||
|
|
||
|
score = {x: 0 for x in range(1, num_players + 1)}
|
||
|
|
||
|
cur_marble = 1
|
||
|
while cur_marble <= num_marbles:
|
||
|
cur_player = (cur_marble - 1) % num_players + 1
|
||
|
|
||
|
if cur_marble % 23 == 0:
|
||
|
tmp = cur_node.prev.prev.prev.prev.prev.prev.prev
|
||
|
cur_node = tmp.next
|
||
|
tmp.remove()
|
||
|
score[cur_player] += cur_marble + tmp.val
|
||
|
else:
|
||
|
cur_node = cur_node.next.insert(cur_marble)
|
||
|
|
||
|
cur_marble += 1
|
||
|
|
||
|
print(max(score.values()))
|