aoc/2020/05/05.py

55 lines
1.2 KiB
Python
Raw Normal View History

2020-12-05 11:54:05 +00:00
def read_file():
with open("input.txt","r") as f:
return f.read().split('\n')
def find_row(rowpart):
row = [*range(128)] # create a list using unpack operator
for c in rowpart:
if c == 'F':
row = row[:len(row)//2] # lower half
elif c == 'B':
row = row[len(row)//2:] # upper half
else:
break
return row[0] # extract from list
def find_col(colpart):
col = [*range(8)] # create a list using unpack operator
for c in colpart:
if c == 'L':
col = col[:len(col)//2] # lower half
elif c == 'R':
col = col[len(col)//2:] # upper half
else:
break
return col[0] # extract from list
def id(seat):
rowpart = seat[:-3]
colpart = seat[7:]
row = find_row(rowpart)
col = find_col(colpart)
return 8*row + col
def part1(seats):
max_id = 0
for seat in seats:
if id(seat) > max_id:
max_id = id(seat)
return max_id
def part2(seats):
ids = sorted(map(id, seats))
prev_id = 0
for seat_id in ids:
if seat_id - prev_id == 2: # gap detected
return seat_id - 1 # so your seat is the one right before
prev_id = seat_id
def main():
seats = read_file()
print(f'{part1(seats)=}')
print(f'{part2(seats)=}')
if __name__ == "__main__":
main()