My Advent of Code solutions in Python.
kevinyap.ca/2019/12/going-fast-in-advent-of-code/
advent-of-code
python
1import fileinput
2from collections import deque
3
4
5def adjacent_elves(num_elves):
6 elves = deque(range(1, num_elves + 1))
7
8 while len(elves) > 1:
9 elves.rotate(-1)
10 elves.popleft()
11
12 return elves[0]
13
14
15def circular_elves(num_elves):
16 left = deque(range(1, (num_elves // 2) + 1))
17 right = deque(range((num_elves // 2) + 1, num_elves + 1))
18
19 while len(left) + len(right) > 1:
20 # Remove the middle Elf in the circle
21 right.popleft()
22
23 # Move an Elf from between deques
24 right.append(left.popleft())
25
26 # Rebalance the deques if uneven
27 if len(right) - len(left) == 2:
28 left.append(right.popleft())
29
30 return right[0]
31
32
33if __name__ == '__main__':
34 num_elves = int(fileinput.input()[0])
35 print "Winning Elf in part 1:", adjacent_elves(num_elves)
36 print "Winning Elf in part 2:", circular_elves(num_elves)