diff options
Diffstat (limited to 'src/05/part1')
| -rw-r--r-- | src/05/part1 | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/05/part1 b/src/05/part1 new file mode 100644 index 0000000..83d0f49 --- /dev/null +++ b/src/05/part1 @@ -0,0 +1,53 @@ +--- Day 5: Binary Boarding --- + +You board your plane only to discover a new problem: you dropped your boarding pass! You aren't sure +which seat is yours, and all of the flight attendants are busy with the flood of people that +suddenly made it through passport control. + +You write a quick program to use your phone's camera to scan all of the nearby boarding passes (your +puzzle input); perhaps you can find your seat through process of elimination. + +Instead of zones or groups, this airline uses [1m[37mbinary space partitioning[0m to seat people. +A seat might be specified like FBFBBFFRLR, where F means "front", B means "back", L means "left", +and R means "right". + +The first 7 characters will either be F or B; these specify exactly one of the [1m[37m128 rows[0m +on the plane (numbered 0 through 127). Each letter tells you which half of a region the given seat +is in. Start with the whole list of rows; the first letter indicates whether the seat is in the +[1m[37mfront[0m (0 through 63) or the [1m[37mback[0m (64 through 127). The next letter +indicates which half of that region the seat is in, and so on until you're left with exactly one +row. + +For example, consider just the first seven characters of FBFBBFFRLR: + +- Start by considering the whole range, rows 0 through 127. - F means to take the [1m[37mlower +half[0m, keeping rows 0 through 63. - B means to take the [1m[37mupper half[0m, keeping rows 32 +through 63. - F means to take the [1m[37mlower half[0m, keeping rows 32 through 47. - B means to +take the [1m[37mupper half[0m, keeping rows 40 through 47. - B keeps rows 44 through 47. - F +keeps rows 44 through 45. - The final F keeps the lower of the two, [1m[37mrow 44[0m. + +The last three characters will be either L or R; these specify exactly one of the [1m[37m8 +columns[0m of seats on the plane (numbered 0 through 7). The same process as above proceeds again, +this time with only three steps. L means to keep the [1m[37mlower half[0m, while R means to keep +the [1m[37mupper half[0m. + +For example, consider just the last 3 characters of FBFBBFFRLR: + +- Start by considering the whole range, columns 0 through 7. - R means to take the [1m[37mupper +half[0m, keeping columns 4 through 7. - L means to take the [1m[37mlower half[0m, keeping +columns 4 through 5. - The final R keeps the upper of the two, [1m[37mcolumn 5[0m. + +So, decoding FBFBBFFRLR reveals that it is the seat at [1m[37mrow 44, column 5[0m. + +Every seat also has a unique [1m[37mseat ID[0m: multiply the row by 8, then add the column. In +this example, the seat has ID 44 * 8 + 5 = [1m[37m357[0m. + +Here are some other boarding passes: + +- BFFFBBFRRR: row 70, column 7, seat ID 567. - FFFBBBFRRR: row 14, column 7, seat ID 119. - +BBFFBBFRLL: row 102, column 4, seat ID 820. + +As a sanity check, look through your list of boarding passes. [1m[37mWhat is the highest seat ID +on a boarding pass?[0m + + |
