aoc-2020-zig

git clone https://git.sinitax.com/sinitax/aoc-2020-zig
Log | Files | Refs | README | sfeed.txt

commit bffd1c1d6a3b5f65ba78ca34d77e23b37e3a53a3
parent d7bec1fe5e6d30890a9de21a4bc012c78bb8a226
Author: Louis Burda <quent.burda@gmail.com>
Date:   Sat,  5 Dec 2020 10:55:50 +0100

Day 5

Diffstat:
Mdata/template.zig | 8++++----
Mlib/aoc.zig | 2++
Asrc/day5/input | 839+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/day5/main.zig | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/day5/part1 | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/day5/part2 | 14++++++++++++++
6 files changed, 970 insertions(+), 4 deletions(-)

diff --git a/data/template.zig b/data/template.zig @@ -3,13 +3,13 @@ const aoc = @import("aoc"); const Entry = u16; -fn free_entries(allocator: *std.mem.Allocator, entries: std.ArrayList(Entry)) void { +fn freeEntries(allocator: *std.mem.Allocator, entries: std.ArrayList(Entry)) void { entries.deinit(); } fn parse(allocator: *std.mem.Allocator, input: []u8) !std.ArrayList(Entry) { var entries = std.ArrayList(int).init(allocator); - errdefer free_entries(allocator, entries); + errdefer freeEntries(allocator, entries); // ... @@ -18,7 +18,7 @@ fn parse(allocator: *std.mem.Allocator, input: []u8) !std.ArrayList(Entry) { fn part1(allocator: *std.mem.Allocator, input: []u8, args: [][]u8) !void { const entries = try parse(allocator, input); - defer free_entries(allocator, entries); + defer freeEntries(allocator, entries); var answer: u32 = 0; @@ -27,7 +27,7 @@ fn part1(allocator: *std.mem.Allocator, input: []u8, args: [][]u8) !void { fn part2(allocator: *std.mem.Allocator, input: []u8, args: [][]u8) !void { const entries = try parse(allocator, input); - defer free_entries(allocator, entries); + defer freeEntries(allocator, entries); var answer: u32 = 0; diff --git a/lib/aoc.zig b/lib/aoc.zig @@ -1,6 +1,8 @@ const std = @import("std"); pub const input = @import("input.zig"); +pub const Error = error{InvalidInput}; + const part_type = fn (alloc: *std.mem.Allocator, input: []u8, args: [][]u8) anyerror!void; pub fn gen_main(comptime part1: part_type, comptime part2: part_type) fn () anyerror!void { const impl = struct { diff --git a/src/day5/input b/src/day5/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/day5/main.zig b/src/day5/main.zig @@ -0,0 +1,58 @@ +const std = @import("std"); +const aoc = @import("aoc"); + +const Range = struct { min: u16, max: u16 }; + +const row_count = 128; +const col_count = 8; + +fn binarySearch(code: []const u8, max: u16, comptime front_id: u8, comptime back_id: u8) !u16 { + var possible = Range{ .min = 0, .max = max - 1 }; + for (code) |b| { + _ = switch (b) { + front_id => possible.max = @floatToInt(u16, // + std.math.floor(@intToFloat(f32, possible.min + possible.max) / 2.0)), + back_id => possible.min = @floatToInt(u16, // + std.math.ceil(@intToFloat(f32, possible.min + possible.max) / 2.0)), + else => return aoc.Error.InvalidInput, + }; + } + if (possible.min != possible.max) + return aoc.Error.InvalidInput; + return possible.min; +} + +fn part1(allocator: *std.mem.Allocator, input: []u8, args: [][]u8) !void { + var lineit = std.mem.tokenize(input, "\n"); + var answer: ?u32 = null; + while (lineit.next()) |line| { + const row = try binarySearch(line[0..7], row_count, 'F', 'B'); + const col = try binarySearch(line[7..10], col_count, 'L', 'R'); + const id = row * 8 + col; + if (answer == null or id > answer.?) + answer = id; + } + std.debug.print("{}\n", .{answer.?}); +} + +fn part2(allocator: *std.mem.Allocator, input: []u8, args: [][]u8) !void { + var lineit = std.mem.tokenize(input, "\n"); + var seats = [_]u1{0} ** (row_count * col_count); + while (lineit.next()) |line| { + const row = try binarySearch(line[0..7], row_count, 'F', 'B'); + const col = try binarySearch(line[7..10], col_count, 'L', 'R'); + const id = row * 8 + col; + seats[id] = 1; + } + + for (seats) |b, i| { + if ((i == 0 or seats[i - 1] == 1) and + (i == seats.len - 1 or seats[i + 1] == 1) and seats[i] == 0) + { + std.debug.print("{}\n", .{i}); + break; + } + } +} + +pub const main = aoc.gen_main(part1, part2); diff --git a/src/day5/part1 b/src/day5/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 binary space partitioning 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 128 rows +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 +front (0 through 63) or the back (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 lower +half, keeping rows 0 through 63. - B means to take the upper half, keeping rows 32 +through 63. - F means to take the lower half, keeping rows 32 through 47. - B means to +take the upper half, 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, row 44. + +The last three characters will be either L or R; these specify exactly one of the 8 +columns 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 lower half, while R means to keep +the upper half. + +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 upper +half, keeping columns 4 through 7. - L means to take the lower half, keeping +columns 4 through 5. - The final R keeps the upper of the two, column 5. + +So, decoding FBFBBFFRLR reveals that it is the seat at row 44, column 5. + +Every seat also has a unique seat ID: multiply the row by 8, then add the column. In +this example, the seat has ID 44 * 8 + 5 = 357. + +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. What is the highest seat ID +on a boarding pass? + + diff --git a/src/day5/part2 b/src/day5/part2 @@ -0,0 +1,14 @@ +--- Part Two --- + +Ding! The "fasten seat belt" signs have turned on. Time to find your seat. + +It's a completely full flight, so your seat should be the only missing boarding pass in your list. +However, there's a catch: some of the seats at the very front and back of the plane don't exist on +this aircraft, so they'll be missing from your list as well. + +Your seat wasn't at the very front or back, though; the seats with IDs +1 and -1 from yours will be +in your list. + +What is the ID of your seat? + +