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) == 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))