43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
|
from math import floor,ceil
|
||
|
|
||
|
input_file = "input.txt"
|
||
|
|
||
|
seats = []
|
||
|
|
||
|
with open(input_file) as boardings:
|
||
|
line = boardings.readline()
|
||
|
while line and line != "\n":
|
||
|
row_start = 0
|
||
|
row_end = 127
|
||
|
column_start = 0
|
||
|
column_end = 7
|
||
|
|
||
|
for character in line:
|
||
|
if character == "F":
|
||
|
row_end = floor((row_start+row_end)/2)
|
||
|
elif character == "B":
|
||
|
row_start = ceil((row_start+row_end)/2)
|
||
|
elif character == "L":
|
||
|
column_end = floor((column_start+column_end)/2)
|
||
|
elif character == "R":
|
||
|
column_start = ceil((column_start+column_end)/2)
|
||
|
else: # End of line
|
||
|
seats.append(row_end*8+column_end)
|
||
|
|
||
|
line = boardings.readline()
|
||
|
|
||
|
print(f"Highest seat ID : {max(seats)}")
|
||
|
|
||
|
|
||
|
seats.sort()
|
||
|
possible_seats = list(range(seats[0], seats[-1]+1))
|
||
|
|
||
|
# There might be missing seats at the front or the back of the plane
|
||
|
# thus, if we sort and create a range between the smallest and largest ID
|
||
|
# and iterate over both, the number missing in the full range would be our seat.
|
||
|
|
||
|
for i in range(len(seats)):
|
||
|
if seats[i] != possible_seats[i]:
|
||
|
print(f"Your seat is {possible_seats[i]}")
|
||
|
break
|