diff options
| author | Louis Burda <quent.burda@gmail.com> | 2023-04-08 12:40:30 -0400 |
|---|---|---|
| committer | Louis Burda <quent.burda@gmail.com> | 2023-04-09 10:21:36 -0400 |
| commit | 9282e95e8844afe856ba76ceb6d2c3010df8bb1a (patch) | |
| tree | e35affc89b20324371381e079f7cb5f8a06aa81b /src/05 | |
| parent | 2b5d4232879dc74491dabf54a0ddc958d66ebcec (diff) | |
| download | aoc2020-zig-master.tar.gz aoc2020-zig-master.zip | |
Diffstat (limited to 'src/05')
| -rw-r--r-- | src/05/input | 839 | ||||
| -rw-r--r-- | src/05/main.zig | 52 | ||||
| -rw-r--r-- | src/05/part1 | 53 | ||||
| -rw-r--r-- | src/05/part2 | 14 |
4 files changed, 958 insertions, 0 deletions
diff --git a/src/05/input b/src/05/input new file mode 100644 index 0000000..6cd6f33 --- /dev/null +++ b/src/05/input @@ -0,0 +1,839 @@ +BFFBFBFLRL +BFBFBBBLRR +BFBFBFBLRR +BFBFFFFRLR +BBFFBBFRRR +FBBBFFFRLL +FFBFBFFLLL +BBFBFFFRLL +FBBBFFBLRR +FFFFBFFRRL +BFBFBFBRLL +FFBFFBBLLL +BFFBBFFRLR +FBBFFFFLRR +FBFBFFBRRR +FFBFFBBRRR +FBBBFFFRRL +FFBBBBFRRL +BFFBBBBLLL +BFBBFBBLLR +FBBFBFFLLR +FBBFBFFLRR +BFFFFBFLLL +FBBBBBBRRR +FBFFBBFLLR +BBFBFFBRLR +FFFFFBBLLR +FBBFBBBRLL +FFFFBBFRRR +FFFFBFBLRL +FFFBFBFLLR +FFBFBBBLRR +BFFBBBFRLR +FFFBFBBLLL +FBFBBBFLRR +BBFFFBFLLL +FFFFFBBLRR +FFBFBFFRLL +BFFFBBFRLR +BFBBBFBLLR +FFFBBFFLRL +BFBBBFBLLL +FBFBBFBRLR +BBFFBFFRRR +BFFFFBBLRR +FBBBBBFLRL +FBFBBBBRRR +FBFBBFFLLL +BFBBBFBRLL +FFBBFBBLRR +FFBFBBBRRR +FFFFFBFLRL +BFFBBBFLRR +BFBBFBFLLR +FFBFBBBLRL +FBBBBFBLLL +BFBBBFFLRR +FBBFFBBLRR +BFFBBFBLRR +FBBBBBFLLL +FFFFBBBRLR +FBFBBBFLLR +BFBFFBFRLR +BFFBFFBRRR +FBBFFFFLRL +BFBFBBFLRL +BBFBFFFRLR +FBFFFFBLRR +BFFFBFFRLL +FBFFBFBLLR +FFFBFFFRLR +FFFBFFFRLL +BFFBFBBLLL +FFBBFBBLRL +BFBBBBFLRL +BFBBBBFLRR +BFBFFFFRRL +BFBBBFBRLR +BBFFBBBLLR +FBBFBBFRLR +FBFBFBFLLR +BFBFFBBRRR +FFFFBBFLLR +FBFFBFFLLL +BFFFFFBRLR +FBFBBBFLRL +BFFFBBFLLR +FBFBFBBRRR +FBFFBFBLRL +BBFFFBBLLL +FBFFFBFRRL +BBFFFFBRLR +BBFFBFBRRL +BFFBBBBRLR +FBFFFBBLRL +FBBFBBFLLR +FFBBBBBLLL +FBBBBBFLLR +FFBFFBFRLR +BFFBBFBLRL +FFBBBBFRLR +BFFBFBBRRL +FBFBBBFLLL +BBFBFFBRRR +FBFBBFFLLR +BFFFFFBRLL +FBBBBFBLLR +FFBBBFBLRR +FBBBBFBRLR +FBBBBBBRRL +FBBFFFBRRL +FBFBFFFLRR +FBBFFFBRLR +BFFBFBFRRL +FFBFBBFRLL +FBFBFFFRRR +BFFFFBFRRR +FFFFFBFRRL +BBFFBFFLRL +FBBBBBBLLR +BFFFBFFRRR +FFFFFBFRLL +FBBFBFBLLL +FFFFBBFLRR +BFBBFFFRLR +FFBFFBBLRR +FBFFBFBLRR +FFBBBFBLRL +FFFBBFBRLR +BFBFFBBLLR +FFFBBFBLLL +BBFFFBBLRL +FBFBFFFRLR +BBFFBFFRLR +FFFBFBFRLR +FFBBBBFLLR +BBFFBFFLRR +FFFFFBFRLR +BFBFBBFRRR +BBFFFBFRRL +BFFBFBFLLR +FFFBBBBLLL +BFFFBBFLLL +BBFFFBBRRL +BFFFFBFRLL +BFBFBBBLLR +BBFBFFBRRL +FBFFBBFLLL +FBFBFFFRRL +FBBFBBBLRR +BFBBFFBRLL +FBFBBBBRLR +FFFBBFFLRR +FBBFFBFRRL +BFFBBBBLRR +FFFFBBFRLR +FBFBBBFRRR +BFFBFFFRLL +BFFFFFFRRL +FBFFFFBRLR +BFFFFBBRRL +FBBBBBFRLR +FBBBBFBLRR +FFFBBFBRLL +FBBFBBFRRL +FFFBBBBRRL +FBBFFBBRRL +BFFBBFFLLR +FFFBFFBRRL +FBFFBFFLLR +FFFFFFBRLL +FFBBFBBRLR +FFBBFBFLRR +FFFBFFBRRR +FFBFFBBLLR +BFBFBFBLLR +FFBBBBFRRR +BFBBBFBLRL +BFFFBBFRRL +FBFBBBFRLL +BBFFFFBRRR +FBBFBFBRLR +BFBBBFFRRL +FBBBBFBRRL +FBBBFFBLRL +FBFFFBBRRL +BFBBFFBRRL +FBFBBFFLRL +FBFBBBBLRL +FFBBBFBRRL +FBBBBBBLRL +FFFFBBFRLL +FBFBBFBRLL +BFBFBBFLLR +FBFFFBBRLR +BFBFBBBRRR +FBBBBBBLRR +BFFBFFBRRL +FFBBBBBRLR +BFFFBBFLRL +FBFBBBBRLL +FFFFFBFRRR +BFBBBBFRLR +FFBFFBFRRL +FBBBBBBRLR +FBFFFBBLRR +FFFBFFBRLR +BFBFFBFLLR +FFFFFBBRRL +FBBBBBFRRL +FFFFBBBRRR +BFBBFFFRLL +BBFFBFBLLR +FFFFBFFLRR +FBFFFBFLLL +FBBFFBFRLR +BBFBFFBLLR +BBFBFFFLRL +BFFFBBBRLR +BFFBFFBLRL +BFBFBFFLRL +FBBFFBBRLR +FBFBFBBRLL +FFBFFFFLLL +FFFFBFBLLL +FBBFFBBLLR +FFFFBBBLRR +FFFFFBBRRR +BBFFFFFRLL +FBFBBFBRRR +FBBFFFFRRR +FFFFBFBRLR +BFFFFBBLLR +FFFBBBFRLL +BFFBBBBRRR +FBFFBBFRLL +BFBBFBFLRL +FBFBFBBLLL +FFBFFFFRRL +FBFBBBFRRL +FBBBBBBRLL +BFFFBFBRRR +BFBFBFBRRR +FBFFFBBRLL +BFFFFBBLLL +FFFBFFFRRL +FBBBBFFRRL +BFFFFFFLRR +BFBFBFFLRR +BFFFFBBRLL +FBBFFFFRRL +BFBBFBBRRR +FFFBFFBLLR +BFFBFFFRLR +FFBFFFBLLR +BFBFBFBLLL +BFFBFFFLRR +FFBBFFBLRR +FBBFFBFRLL +FFBFBFBRRL +FBFFFFFLLR +FBFFBBFRLR +FBFBBBFRLR +FFBBFFFLRR +FBBFFFFLLL +FFFBFFFLRL +BFFBBFBLLR +BFFFFFBLLL +BBFBFFBLLL +BFFBFBBLRR +BBFFFFBRLL +FBFFBFFLRL +FBBFFFFLLR +FFFBBFFRLR +FFFBBFBLRL +BFFBBBBLLR +BFBBBFBRRL +FFBBBFFLRR +FBBFFBBRLL +FFFBFBBRRR +BFFBFFFLRL +BFFFBFFLLR +FFFBFBFLLL +FFBFBFFRRL +FFFBFFFRRR +BFBFFFFLRL +BFFFFFBRRL +FFFBFBBLRL +FBFFBFFRRL +FFFFBFFLLR +FFBBBBFRLL +FBBBBFFLRR +FFFFBFFLLL +BFBBBBFRRL +FBFBBFFLRR +FFBBFBFRLL +FFFBFBBRLL +BFFFFFFLRL +BBFFFFBLRL +BFFFFFFRLR +FBFFFBFRLR +FBFFFFFLRL +BFBFBFFRLL +FFBBFBFLRL +FFFBBBFLLR +FBBFFFBRRR +FFFFFBFLRR +FBFFFBBLLR +FFFFBFBLRR +FBBFBBBLLR +FBBBFFBLLL +BBFFBFFRRL +BFBBFBBLLL +FBFFBFFRRR +FBFFFFBRLL +FFBBBFBRRR +FBBFFBBLLL +BBFFBBBRLL +FBFFFBFLRR +FBBBFFBRLR +FFBBBBBLLR +FBFFFFBLRL +BFFFBFBRLL +FFFFFBBLRL +BFBBFFBLLL +BBFFBBFLRR +BBFFBFFLLL +FBFBFFBRRL +BFFBBFFRRL +BFFBBFBRRR +FFBBBFBRLL +FBBFBFBRRL +FBFBBFBLLL +BFFFBBBLLL +FFFBBBFLRL +BFBBFFFLRL +FFFBFFBLLL +FFBBFBBRRR +FBBBBFFLLL +BBFBFFFRRR +FFBFFBFLRR +BFFBBFBLLL +BFFFBFBLLR +FFBBFBFRRR +BBFFFBBLRR +FFFFBFFRLL +BFBBBFFRLL +BFBFBFFRRL +BFBFFBBLRR +FBBFFFFRLL +FFFBFBBLLR +BBFFBBBLRR +FFBFBFBRLR +BBFFBBFLRL +BBFFFBBLLR +BFFFBBFLRR +FBBBBFFRLL +FBBFFFBLRR +BFBFBFBRLR +FBFBBFFRLR +FFFFBFFLRL +FBBBFBBLLR +FBFFFFFRLR +FBBFBBFLRR +BFBFBFFRLR +FFBFFBFLLR +FFFFBBBRLL +FBBBFBBRLL +FFFBFBFLRL +BFBBFFFLLR +BFFBFFBLRR +BFFFBFFRLR +FBBFFBFLLL +FBFBBBBRRL +FBBBBBFRLL +FBFFBBBRLR +FFBFFFBRRL +FFBFFBFLLL +BFBFBBFRLR +BFFFBFFLRL +FFBBBBBRRL +FBBFFBBLRL +FBFFFBBRRR +FBBFBFFLRL +BFFBFBFLRR +FFBBBFFRRR +BFBFFBBRLR +FBFBFBFRRL +FFBFBBBLLL +FBBFFFBLLL +FFFBBFBRRL +FFFFBBBRRL +FBBBFBFLLR +FBBBBBFRRR +FBFBBBBLLL +FFFBFBBLRR +FFBBFBBLLL +FBBFBBFLLL +FBFFFFBRRR +FBBBFFFLRR +FFFBFBBRLR +FBFFFFFRRR +BFBBFBFLLL +BFFFBBFRRR +BFFFBFBLRR +FBFFBFBRLR +BFBFFFBRLR +BFBBBBBLRL +BBFFBFBRRR +FFBFFFFRLL +FFFFFBFLLR +FBBBFBFRRR +BFBFFFBRRR +FBFBFFBLRL +FBFFBFBLLL +FBBFFFBLRL +BFFBFBBRLL +FFFBFFBLRR +BFBBFBFLRR +FBBFBBFRLL +FFBFBFFLLR +FFBBFBFRLR +FBFBFBBLRR +FFFBFBBRRL +FBFBFFFLLR +BFFBBFFLRR +FFBFFBBLRL +FFFFBFBRLL +BFBBBFFRRR +BFBFFFFRRR +FBFBBFBRRL +BFBBFFFLRR +BFBBFFBLRR +BFBFFFFLRR +FBFBFFFLLL +FFFBBBBRRR +FBBBBFFLRL +FBFBFFBLLL +BBFBFFBLRL +FFBFFBBRRL +BBFFFFBRRL +FBFFBBBLRR +FBFBFFFRLL +BFBBBFFLLL +FBBBFFBRRL +BBFFBFFLLR +FBFFFFFRRL +BFFBFFBRLR +BFBFBBFLRR +FFBFFFBLRL +FFBFBBBLLR +FFFBBBBLLR +FFBBFBFRRL +FFBFFFFRLR +FFBFFFBRRR +FBBFFBFLRR +BBFBFFFLRR +FFBFBFBLLL +BFBBFFFRRR +FBBBFFFLLR +FBFFBFFLRR +BBFFFFBLLR +FBFFFBFLRL +FFFBBFBLRR +FBBBBFBLRL +FFFFFFBRRR +BFBBFBFRLR +FFFBFBFRRL +FFBBFFFLRL +FFFFBBBLLL +FBBFBFFRRR +BFFBFBFLLL +BFFFFFFRLL +BFBBBBBRLR +FBBBFBFLRR +BFBBBFFLLR +BFBBBBBRRL +FFBBBFFLLL +BFBFBFFLLR +FBFBFBFRLR +FBBFBBFRRR +BFFBBFFRRR +FFFFFFBRLR +FBBFBFBLRL +FFBFFBFRRR +FFBFFFBLLL +FBBFBBBRLR +BFBFBBBRLR +BBFBFFBLRR +FBFFBFBRRL +FBFBFBBLRL +FFBBBFBRLR +BFBFFBBRRL +FFBBFFBRRL +FBFFFFFRLL +BFBBBBFRLL +BBFFFFBLRR +FBBBFBFRRL +FBFBFFBRLR +FFFFBFBRRR +FBFFBBFLRR +BFFFBFBRLR +BFBBFBFRLL +FBBBFFFRRR +FFBFBBFRRL +FBBBFFFLLL +FBBFBFBLLR +FFFFBFFRRR +FFFFBBFLLL +BFFBFBFRLL +FFBFBFBLLR +BFFBFFFRRR +BBFBFFFLLL +FBFFFFFLLL +FFFBBBBRLL +FFBBFBBLLR +FBFFFFBLLL +BFBBBBFLLR +FFFBBFBRRR +BBFBFBFLLL +BFBBFFFRRL +BFBFFBBLRL +FBFBBFFRRL +FFFBBBBRLR +FBFFFFBLLR +FFFBBBFLLL +BFBBFFBRLR +FFBFBBFLLR +BBFBFFBRLL +FBFBBFBLLR +BFBFFFBLRL +FFFFBBFLRL +BBFFFBFRLL +FBBBFFBRLL +BFFFBFFRRL +BFBFBBFRRL +FBFBFBBRLR +FFFFFBBRLL +BFBFFFBRRL +BFFFFBBRLR +FBFFBBBRLL +FFBFFBBRLR +BFFBFBBRRR +BBFFFBFLRL +FBFFFBFLLR +FBBFFFFRLR +BFFFBFBLRL +FFBFBBFLLL +BFFFFFBLLR +FFBBFBBRRL +FBFBBBBLLR +BFFBBFBRLL +BBFFBBFLLL +FFBFFBBRLL +FFBBBFBLLR +BBFBFBFLRL +BFFFBBBLRL +FBBFBBBLRL +FBBFBFFRRL +BFBFFBBRLL +FFBBBBBLRL +FFBBBBFLLL +BFBBBFBLRR +FFFBFBFRRR +BFBBBBBLLR +FFBBFFBLLL +BFBBBBFLLL +FBBBFBFRLR +FFBFFFFLLR +BBFFBBBRRL +BFFBBFFRLL +BFFBBBBLRL +BFBFBFFRRR +FFBFBBFRLR +BBFFBBFRLR +BFFFBBBLLR +BFBFFBFRRL +FFFFFBFLLL +FBFFBBBRRL +BFBFBBFLLL +BFFFFFBLRL +FBBBFBBLLL +FFBBFFBRRR +FFFBBFFLLR +BFBFFBFLRL +FFBFFFBRLR +FBFFFBFRLL +BFFFFFFLLR +BFFBBBFRRR +FFBFBFFRLR +BBFFBFBRLL +FFFBFBFRLL +BBFFFBFRLR +BFFBFFBLLL +FFBFBBFRRR +BFBFFBFRLL +FBBBBFFRLR +FFBFBFBRLL +BFFBFBBLLR +FBFFBFFRLL +FFBFBBBRRL +FBFBBFBLRR +FBBFFBFRRR +FFBFBFFRRR +BBFFFFFLRL +FBBBFFBLLR +FBFBFBFRLL +BBFFFFFRLR +FBBBBFBRRR +BBFFFFFRRR +FFFBFFFLLR +BFBFBBBLRL +FBFBBBBLRR +BBFFFBFLLR +BFBBFBBLRL +BFFBFBFRLR +BFFBBFBRRL +BFFBFFBRLL +FFBFFFBRLL +FFBBFFFRLL +FBFBFFFLRL +FBBFBBBLLL +BFFBFFFLLL +FBFFFFFLRR +BFBFBBBRLL +FBFFBBBLLL +FFFBBFFRLL +FFBFFFFRRR +FFBBBBFLRL +FFBFFBFRLL +FFBBFFFRRR +BFBBBBBLLL +FFFBBFFLLL +BFBBBFFRLR +FBFFBBBLRL +BFBBFFBLRL +FBBFBFFLLL +FFFBFFFLLL +FBBBFBBRRL +FFFBFBFLRR +BFBBFFBLLR +FFBFBFBRRR +BFBFBBBLLL +FBFBFBBRRL +BFFFBBBRLL +FBFBFFBRLL +FBFFBBFRRL +BFFFBBBRRR +FFFFBFFRLR +BFBBFBFRRR +BFBBBBBRLL +FBBBFBBRLR +FFBFFFBLRR +BBFFFFFLLL +FFBFBFFLRL +BFBFFBFRRR +BBFFBBFRLL +FFBBBFBLLL +BFFFFFBLRR +FBBBBBBLLL +BFFBFFFLLR +FFBFBFFLRR +BFBBBBBLRR +FBBFBFBRLL +BFBBBBFRRR +BBFFFFBLLL +BFFBFFBLLR +FBFBFBBLLR +BFFFFFBRRR +FBBFBFFRLR +FBFFBBFLRL +FBFFBBBLLR +FFBBFFBRLR +FFBFFFFLRL +FBBBFBBRRR +FFBFBBBRLL +BFBFFFBLLR +BFBFFBFLLL +FFFBBFFRRL +FBBFFBBRRR +FFFFBBBLLR +BFBFFFBRLL +BFBFFFFLLL +BFFBFFFRRL +FBBFFBFLLR +FBFFBBBRRR +FFFFBFBRRL +BFFFFBFLLR +FFFBFFFLRR +BFBBFBFRRL +FFFFBFBLLR +FBBFBFBLRR +FFFBBBFRRR +FFFBBBBLRL +FBFFFFBRRL +BFBBFFBRRR +FFBFFFFLRR +FFBBFFFRLR +BFBFFFBLRR +FFBBFBFLLR +FFBBFFFLLL +BFFFBFBRRL +FFBBBFFRLR +FBFBFBFRRR +FFFFFBBLLL +BBFFBBFLLR +FBFBFBFLRR +BBFFFFFRRL +BFBBFBBLRR +FBBBBBFLRR +BFFBBFFLRL +BBFBFFFRRL +FBFFBFFRLR +FBFBFFBLRR +FBBBFBFLRL +FFFBBBBLRR +BBFFFBBRRR +FFBBBBFLRR +BBFFBBBRRR +FBFBFBFLRL +BBFFBBBLRL +BFBBFBBRLR +FBBBFBFLLL +BFFBFBBLRL +BFFFFFFRRR +BFFBBBFLLL +FFBFBBFLRR +FFFBFFBRLL +FBBFFFBLLR +FFBBBFFLRL +BFBFBFBLRL +BFBFFFBLLL +FFBBBFFRRL +BBFFBBBRLR +BFBFFFFLLR +BFFFBBBRRL +BBFFBFBRLR +BFFFBFBLLL +BFFFBFFLLL +BFBFFBFLRR +BFFBBFBRLR +BBFFBBFRRL +BFBBFBBRLL +FFBBBBBRRR +BFBBBFBRRR +FBFFBBFRRR +BBFFBFBLLL +BFFFFBBRRR +FBBFBBBRRL +BFFBBBFLLR +BFBFBFBRRL +FFBBFFFRRL +BFFBBFFLLL +FBBBBFFRRR +BBFFFBFLRR +BBFFFFFLRR +FBFFFBBLLL +FBBBFFFRLR +FBBBFFFLRL +BFFBBBFLRL +FFBFBBBRLR +FFBFFBFLRL +FBFBFBFLLL +FBBBBFFLLR +BFFFFFFLLL +FFFBBBFLRR +FBBBFBBLRL +FBBBBFBRLL +BFBBBFFLRL +BBFFBFFRLL +BBFFFFFLLR +FBBFBFBRRR +FBFBBFFRRR +BFFBBBFRLL +BFFFFBFRLR +FFBFBFBLRL +FFFFBBFRRL +FFFFFFBRRL +FFFBFFBLRL +BFFBBBBRLL +FBFBBFBLRL +BBFFFBBRLL +FBFFBFBRLL +FFBBBBBRLL +FFBFBBFLRL +FFFFFBBRLR +FFBBFBFLLL +FFFFFFBLRR +BBFFFBFRRR +FBBFFFBRLL +FFFFBBBLRL +BFFFFBFLRR +BBFBFBFLLR +BFFFFBFRRL +BFBBFFFLLL +FBFFBFBRRR +BFFFBBFRLL +BFFFFBBLRL +FFFBBBFRRL +FBFFFBFRRR +FFBBBFFRLL +BFBFFBBLLL +BFBFBBBRRL +BFFFFBFLRL +FBBFBBBRRR +FBBFBBFLRL +FBBBFBBLRR +FBBBFFBRRR +BBFFBFBLRR +FFBBBFFLLR +BFBFBFFLLL +FFBBFFBLLR +FBFBBFFRLL +FBBFFBFLRL +FFBFBFBLRR +FFFBBFBLLR +FFBBFFBLRL +BFBBBBBRRR +BFBFBBFRLL +FFBBFFFLLR +FFBBFFBRLL +FFFBBBFRLR +BFFFBFFLRR +BFFBFBBRLR +BBFFBBBLLL +FBFBFFBLLR +FFFBBFFRRR +BBFBFFFLLR +FBBFBFFRLL +FFBBFBBRLL +FBBBFBFRLL +BFBBFBBRRL +BFBFFFFRLL +BFFFBBBLRR +FFBBBBBLRR +BBFFFBBRLR +BFFBBBFRRL +BBFFBFBLRL +BFFBBBBRRL diff --git a/src/05/main.zig b/src/05/main.zig new file mode 100644 index 0000000..30f491f --- /dev/null +++ b/src/05/main.zig @@ -0,0 +1,52 @@ +const std = @import("std"); +const aoc = @import("aoc"); + +const row_count = 128; +const col_count = 8; + +// Input is coded in a way that we can do an implicit binary search by replacing +// identifiers for the lower half with "0" and for the upper half with "1" +// See commit <f1b717029cf3262c1fa2760124af258924d668da> for actual binary search + +fn code2Id(input: []const u8) !u32 { + var value: u32 = 0; + for (input) |c| + value = value * 2 + @boolToInt(c == 'B' or c == 'R'); + return value; +} + +fn part1(allocator: std.mem.Allocator, input: []u8, args: [][]u8) !?[]u8 { + _ = args; + + var lineit = std.mem.tokenize(u8, input, "\n"); + var answer: u32 = 0; + while (lineit.next()) |line| { + const id = try code2Id(line[0..10]); + answer = std.math.max(answer, id); + } + + return try std.fmt.allocPrint(allocator, "{d}", .{answer}); +} + +fn part2(allocator: std.mem.Allocator, input: []u8, args: [][]u8) !?[]u8 { + _ = args; + + var lineit = std.mem.tokenize(u8, input, "\n"); + var seats = [_]u1{0} ** (row_count * col_count); + var min: u32 = std.math.inf_u32; + while (lineit.next()) |line| { + const id = try code2Id(line); + min = std.math.min(min, id); + seats[id] = 1; + } + + for (seats[min..]) |_, i| { + if (seats[min + i] == 0) { + return try std.fmt.allocPrint(allocator, "{d}", .{min + i}); + } + } + + return null; +} + +pub const main = aoc.main(part1, part2, .{ "850", "599" }); 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 + + diff --git a/src/05/part2 b/src/05/part2 new file mode 100644 index 0000000..f34c2db --- /dev/null +++ b/src/05/part2 @@ -0,0 +1,14 @@ +--- Part Two --- + +[1m[37mDing