day 17 part 1 python

main
magical 2022-12-16 21:45:25 -08:00
parent a54304686d
commit 40b9f86f4c
2 changed files with 55 additions and 0 deletions

1
day17/input 100644

File diff suppressed because one or more lines are too long

54
day17/sol.py 100644
View File

@ -0,0 +1,54 @@
import itertools
rocks = [
0b00011110,
0b00001000_00011100_00001000,
0b00000100_00000100_00011100,
0b00010000_00010000_00010000_00010000,
0b00011000_00011000,
]
jets = itertools.cycle(">>><<><>><<<>><>>><<<>>><<<><<<>><>><<>>")
jets = itertools.cycle(open("input").read().strip())
rocki = itertools.cycle(rocks)
a = 0b11111111
wall = 0b10000000_10000000_10000000_10000000_10000000
stopped = 0
r = 0
while stopped < 2022:
if r == 0:
# start falling
r = next(rocki)
h = a.bit_length() + 8*3
if h % 8 != 0:
h += 8 - h%8
#for i in reversed(range(0,a.bit_length(),8)):
# print("{:08b}".format((a>>i)&0xff))
#print()
else:
# continue falling?
if r & (a>>(h-8)) == 0:
h -= 8
else:
# stop
a |= (r<<h)
r = 0
stopped += 1
continue
j = next(jets)
if j == '<':
x = (r<<1)
if x & wall == 0:
if x & (a>>h) == 0:
r = x
elif j == '>':
x = (r<<7)
if x & wall == 0:
x >>= 8
if x & (a>>h) == 0:
r = x
import math
print(math.ceil((a>>8).bit_length()/8))