day 23
This commit is contained in:
parent
e530373823
commit
9ba38eac9e
45
2020/23/23.py
Normal file
45
2020/23/23.py
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
def read_file():
|
||||||
|
with open("input.txt","r") as f:
|
||||||
|
return list(map(int,list(f.read())))
|
||||||
|
|
||||||
|
def play(cups, rounds):
|
||||||
|
current = cups[0]
|
||||||
|
next_cup = {c:n for c, n in zip(cups, cups[1:] + [cups[0]])}
|
||||||
|
for _ in range(rounds):
|
||||||
|
# pickup next 3 cups
|
||||||
|
c1 = next_cup[current]
|
||||||
|
c2 = next_cup[c1]
|
||||||
|
c3 = next_cup[c2]
|
||||||
|
# select a destination cup (-1 until found, wraps around)
|
||||||
|
destination = current - 1 if current > 1 else len(cups)
|
||||||
|
while destination in [c1, c2, c3]:
|
||||||
|
destination = destination - 1 if destination > 1 else len(cups)
|
||||||
|
# add cups back
|
||||||
|
next_cup[current] = next_cup[c3]
|
||||||
|
next_cup[c3] = next_cup[destination]
|
||||||
|
next_cup[destination] = c1
|
||||||
|
# select a new current cup (next)
|
||||||
|
current = next_cup[current]
|
||||||
|
# rebuild cups from next_cup
|
||||||
|
cup = 1
|
||||||
|
new_cups = []
|
||||||
|
for _ in range(len(cups)):
|
||||||
|
cup = next_cup[cup]
|
||||||
|
new_cups.append(cup)
|
||||||
|
return new_cups
|
||||||
|
|
||||||
|
def part1(cups):
|
||||||
|
cups = play(cups, 100)
|
||||||
|
return "".join(str(c) for c in cups[:-1])
|
||||||
|
|
||||||
|
def part2(cups):
|
||||||
|
cups += list(range(10,1_000_001))
|
||||||
|
cups = play(cups,10_000_000)
|
||||||
|
return cups[0] * cups[1]
|
||||||
|
|
||||||
|
def main():
|
||||||
|
cups = read_file()
|
||||||
|
print(part1(cups), part2(cups))
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
1
2020/23/input.txt
Normal file
1
2020/23/input.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
653427918
|
Loading…
Reference in a new issue