day 17 part 1 python
parent
a54304686d
commit
40b9f86f4c
File diff suppressed because one or more lines are too long
|
@ -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))
|
Loading…
Reference in New Issue