From 7b02df12fd6164abe52549c49c7bc2354b2509c5 Mon Sep 17 00:00:00 2001 From: Justin Wernick Date: Sat, 5 Dec 2020 11:55:46 +0200 Subject: Day 5 --- inputs/day_5.txt | 901 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/bin/day_5.rs | 157 ++++++++++ 2 files changed, 1058 insertions(+) create mode 100644 inputs/day_5.txt create mode 100644 src/bin/day_5.rs diff --git a/inputs/day_5.txt b/inputs/day_5.txt new file mode 100644 index 0000000..11800ca --- /dev/null +++ b/inputs/day_5.txt @@ -0,0 +1,901 @@ +BBFBBBBRRL +FBFFFFBLRL +FBFBBFFRLR +FBFFFBFRLR +FFBBFFFLRR +FFBBBFFRRR +BFBBFBFLRL +BFFFBFFLRR +FBBBFFBLLR +BBFFBBFRRL +BFBBBBBRLR +FBBBBFFLLR +FFBFFFBLLR +FFBBFBFRRR +BBFBFFFRRR +FFBFFBBLLR +FBBFFBBLRL +FFBBBFBLLL +FFBFFBBLRR +FBFFBFBLLR +FFFBBBFLLL +BFBBFBFRLR +BBFBBBFLLL +FBBBFBBRLL +FFBBBBFRRL +BFBBBBFLRR +BBFBBFBLRL +FFBFFFBLRL +BFBBBBBRRR +FFFBFBFLLR +BFBFBBBLLR +FFBFBBBLRL +FFFBFBBLRR +BFFBFFFLLL +BFFFBFBLRL +BFBFFFBRLL +BBFFFFBRLR +FBBFFFBLRR +BFFFFBFLLL +BBBFFFFLLL +BFBFFBBRLL +BBFBFFFRRL +BFBBFFFRLR +BBFBFBFRRL +FBBFFBFRRL +BFBFBFFRRL +FFBFFFFLLR +FBBBFBBLLR +BBFFBFBRLL +BFFBFBBRLL +FBBFFFFRRR +BFFFBBBLRL +FFBBFFBLLL +FFFBBFFRRL +FBFBBBBLRR +FFBBBFFLLL +FBFBFFBRRR +FBBFFBBLLR +FBFFBFFRLL +BFBBBFFRLR +FBFFBBBLRR +FBFFFFBRLR +BBFFBBFLRL +FBFFBBFLRL +FBFBBFFRRR +BFBBBFBLRL +FBFBFFFLLR +FFFFBBBLLR +BFBFFBBLLR +BFFBBBFRLR +BFBBBFFLRR +BBFFFBBLLR +BFFFBBFLRL +FBFFBFBLRL +FBBBFFFRRL +FBFFFFBLLL +BFBFFBBRLR +BFBFBBBLRL +BFFBFBBRLR +FBBFBBBLLR +FFBFBFFRLL +FFFBBBBLRR +BFBFFFFLLL +BBFBFBBLLR +BFFFBBBRLR +FFBFFBFRLR +FBBFBBBLRL +BBFFFBBLLL +FFBFFBBRRR +FBBBBFBLLR +BBFBBFFRLL +BFBBBBFRLR +BBFBFFBRLR +FFBFFFFLLL +BBFBFBFRLL +FFBFFBBRLL +FBBFFFFRLR +FFBBBBBRRR +BBFFBBBLRL +BFFBBFBRLL +BFFFBBFRLL +BFFBFBFLRL +FBFFFFFRRR +BFFBFBBRRL +FBFBBBFLLR +FBFBFBBRLL +BBBFFFFRRR +BFBFBFFLRL +FFFFBFBRLL +FFBBFFBLRL +BBFFBFBLLL +BFFBBBBRLL +BFFBBBBRRR +BFBBBBFRRL +BBBFFFBLRL +FFBBFFFRRR +BFFFFFBRLR +FFFBBFBLLL +BFBFBBFRLR +FBBBFBFLRL +BFBFBFFRLR +BBFBBFFLRL +BFFFBFBLLL +BFFFFBBRLL +FFBFFFFRRL +BFFBFBBLLR +FFFFBBBLLL +FBBFFBBRRL +BFBFFFFLLR +FBFBFBFRLL +FBBBBBBLRR +BBFFFFBLRR +FFFFBFBRRR +FBBBBFBRLL +BBFBFBBLRR +FFBBFBFLLL +BFBBFFBLRL +FFFBBBBRRR +BFBBFFFRLL +BFBBBFBRRR +FFFFBBFRLR +FFBBFBFLRR +FFFFFBBLLR +BBFBBFBRLL +FBFBBBBRLR +BBFFFFBLRL +FBBFFFBLLR +FFBFFBBLLL +FFFBBBFLLR +FFFBBBFRRR +FFBBBFBRRR +FFFBBFFRRR +FFBBFFBLLR +BFBFFBFRRR +FFBFBBFLLR +BFFFFFFRRR +FFBFFBFLRL +BFFBFBBRRR +FBFBFFFRLL +BBBFFFBLLL +BFBBFBFRRL +BFFFFFBLRR +FBBBBBFRRR +FFBBBBFLRR +BBFBBBBLRR +BBFBFBFLLR +FFFFBBFRRR +FFBBBBBLLR +BFFFBFBRLR +FBBBFFBLLL +FFFFFFFRRR +FFFBFBFRRL +BFBBFBBLRR +FBBBBFBLRL +FBBBBFBRRR +BFFFFBFRRR +BFFBBFFLLL +FBBFBFBLRL +BFBBFFFRRL +FBFBFFBRLR +FBFFBFFLRR +BFFFBFBLLR +BFBBFFBRRR +BBFBBFBLLL +BFFBFFFLRR +FFFBBFFRLL +BFBBFFFLLL +BFFFBBBRLL +FBFFBBFRRR +FFBFBFBLLR +FBFFFFBLRR +FFBBFFFLLL +FFFBBBBRRL +BBFBFFFLLL +BBFFBBFLLR +BFBFBBBRRR +FBBBBFBRRL +FBFFFBFLLR +FBFBBBFRRR +BFFFBFBRRL +FBFBBBFLRL +BBFFBFFLRL +BBFBBFFLLR +FFFFBFFRLL +FFFBBBBLRL +FBBBFBFRLL +BBFFFBBLRL +FFFBFFBLRR +BBFBFBBRRL +FFFFBBBRRR +FFBBBBBLRL +FFFFFFBLLL +FBFFFFFRRL +FFFFFBBLRR +BFFFBBBRRL +FBBFFFFLRL +FFFFFBBRLR +FFBFFBFRLL +FFFBBBFRRL +BFBBBFFLRL +FFFFFBFLRR +BFBFBBBRLR +FBFBBBFLLL +BFBFFBFLRL +FFBFBFFRRR +FFBBFFFRLL +BFBFBFFLLL +FBFBFBBRLR +BFFBBBFRRL +FBFFBBBRRR +FBFBFBBLRR +BFBBBBFLLR +FFFBFFFRLR +BFBBFFBRRL +BFFFBFFLRL +BFBFBBFRRR +FBBFFBFLLL +FFFFFFBLRR +FBFFBFBLRR +FFBBBFFLRR +FBBBFFBRLL +BFFFBBBRRR +FFBFFFFRLL +BBFFFBFRRR +BFFBFBBLLL +BFBBFFBRLR +FFBFBBBLRR +FFFBFBBLLL +FFFBBFFLLL +FBBBBBBLRL +BFBFBBBLLL +BFBFFFFRRL +FFBFBBFRRR +FFBFBFBRRL +FFFBBBBRLL +BFFBFFBRLL +BBFFFFBRRL +FFBFBFBLLL +FFBFBFBRLL +FBFBBBFRRL +FBFFBBFRLR +BBBFFFFLRL +FBFBFFFRRL +FFFBFBFRLR +FBFBFBBRRL +BFBBFBBLLL +FFBBBBBRLL +BBFFBFBRRL +FFFBFFFRRR +FBBFBFBLLL +BFFFBFFRLR +FBFBFFBRLL +BBFBBFFLLL +FBBBBFFLRR +FFBBBFFLRL +FBBBFFBRRR +FFBBFBBRLR +FBFBBFFLLR +BFBBBFFLLR +FFFBBFFLRR +FBFFBFFLRL +BFBFBFFLRR +BBFBFFFLLR +FFFBBBBLLR +FFBBFFBRLL +BBBFFFBRLL +FBFFBFBRRL +BFBFFFFRLL +FBFBFBFRLR +BBFFFFFLLL +FFBFBBBLLR +FFBFBFFLRR +FBBBBFBRLR +FFBFBBBRLR +BFFBBBBLRL +FFBBBBBRLR +BFBBBFFRRR +FBFBBFBRLL +FFBFFFBRRL +BBFBFBFLLL +BFBBBFBRLR +BFBBFBFLLR +FBBFBFFRLL +FFBFBBFLRR +BFFBFBFRLL +FFBBFBBLRL +FBFBFBBLRL +BBFFFBFLLR +BFBFBBBLRR +BBFFBBBLLR +BBFFFFBRRR +BFFFFFBLRL +FBBBFBBRRR +BFBFFFBLLL +FFFBBFFLLR +BFFBBFFLLR +BBFBBBBLRL +FBBFBFFLRR +FBFBFFBLLR +BFFFFFFLLL +BFFBBFFRLL +BBFFFFFLLR +FBFFBBFRRL +FBBFFFFLLR +BFBFFBBRRL +FFBFFFBLLL +BFFFFFBLLR +FFBBBFBRRL +FFBBBBFLLR +BFBFFFBLLR +FFFFBFFRLR +BFBBFFBRLL +FFBBBBBLLL +FBBFBFFRRR +BFFFFFFLLR +FFBBBBBLRR +FFFFFBFRRR +BFFFBBBLLL +BFFFBFFRRR +FFBBBFBRLR +BFFBBBBLRR +BFBBBFFRRL +BFBFBFFRRR +BFBBFBBRLR +BFBBBBFRLL +FFBBBBFLLL +FFFBBFBLRR +FBBFBBFRLR +BBFBBFFLRR +FBBFBBBRRL +BFFBFFFRRL +BFFFFBFLRR +FFBFBBFLLL +FFBFBBBLLL +FBFFBFBRRR +FFFBFFBRLL +BFFFFBFLRL +FFFFBFFLLR +BBFBBBBRLL +FBFBBFBRRR +BFFFBBBLRR +FBFFFBFRLL +FFBBBFBLRL +FBFFFBBLRR +FFBBFBFRLR +FBBBBBFLRL +FFFFBFBLRR +BFBFBFBLRR +FFBBFFFLRL +BFFBBBFLLR +FFFFFFBRLR +FFBBBFBLRR +FBFBBFFRLL +BBFBFBFRLR +FBBFFFFLLL +BFBBFBFRRR +BFFBBBFRRR +FBFFFBFLRR +FBBFFBFLRL +BFBBFFFLRR +FFBFFFFLRL +BFFBFFBLLL +FFFBFBBRRR +BBFFBFFLRR +BBBFFFFRRL +FBBBFFBLRL +FBBFFBBLRR +FFBFBFFLLR +FFFBBFFRLR +FBBBFBBRLR +FFFFBBBLRR +BBFFBFBRRR +FBFBBFFLRL +FBBBBFFLLL +FFBFFBBRLR +BBFFFFFLRR +FFBFBFBRLR +FFBFBFBLRL +FBBBFBBLRL +FFFBFBBLRL +FBFBFFFRRR +BFFBFFFRLR +BFBBFFBLLR +BFBFFBFRLL +FBFBFBFRRR +FBFFFFBRLL +FFFFFBBRRR +FBBBFFFLRL +FFFBFFBRLR +BFBFFBFLRR +FBBFBBFRRL +BFBBBBFRRR +BFFFFBBLRR +FBFFFFFLLL +BFBFFFBRRL +FFFBFFBLRL +FFBFFFBLRR +FBBFFBFRLL +BBFBFFBLLL +BBFFBBFLLL +FFBBBFFRLL +BFBBFFFLRL +FBBFBFFLLR +FBFBFFBLLL +FFBBBFFLLR +FBBFFBFLRR +FBBFBBFRRR +BFFFFBBLLL +FFFBFFBLLR +FBFBFFFRLR +FBFBFBBRRR +FBFBBFBRRL +BBFBBFBRRR +FFFFBBBRLL +FBFFBBBLRL +BBBFFFFRLL +FBFFFBFLRL +BFFFFBFLLR +FBFBBFFRRL +BFFBFBBLRR +FBFBBBBRRL +FBFBFBBLLR +FBFFBBFLRR +FFFFBFFLLL +BFBFFFFRRR +BBFFBBBLRR +FBFFFFFLLR +BBFBFFFRLR +BFFFFBBRLR +FBFFFFFLRL +FBBBFBBLRR +BFFBBFBLLL +BFFBFBBLRL +BFFBBBFRLL +FFBFFBFRRR +BFBFBFBRLL +BBFBBFBLLR +FBFBBFBLRL +FBFFFBBRLR +BBFBFFBRLL +BBFFFBFRLR +FBBFFFBLLL +BBFBBBBLLL +BFFFFFFLRR +FBBBBBFRLL +BFFFBFBRRR +BFFFFFFLRL +FBBBBFBLRR +FBFFBBBRLR +FFBBFBFRRL +FFBBFBBRRL +FFFBFBFRRR +FFBBBBFLRL +BFBBFFFRRR +FBFBBBBRLL +FBFFBBFRLL +FFBFFFFRRR +BFFFFBBLLR +FBFBBFBLLR +BBFFBBBRRR +FBBFBBBRLR +BFBFBFFRLL +BFFBBFBLRL +BFFBFFFRRR +FFBBBFBRLL +FBFFBFFRRL +FBBBBFFRRR +FFFBBBFRLL +BBFFFBBRLL +BBFFFBBRLR +FFBBFFFRRL +BBFFBFBLRR +BBFBFFBRRR +BFBBBBBLRR +BFFBBFFLRL +BBFFFFBLLL +FFFFBFBRRL +FBBFFBBRRR +FBBBFFFLRR +FBBFBBFLRR +FBBBFBBLLL +FFFFBBFLRL +FFFFFBBLLL +BFBBBBBLLR +BFBFFFFLRR +FBFFFFBLLR +BBFFBBBRLL +FBFFBFFRRR +FFBBFBFLLR +BBFBBBFLRR +FBBBBBBRLL +FFFFFFBLLR +FFFFFBFRLR +FBFFBFBRLL +BBFFBFFRRR +BFFBFFFLLR +FFBBFBBLRR +BBFFBBBRLR +FFBBFFBRRL +FBBBBFFRRL +BFBFFFFRLR +BFBBBFBLLL +BFBFFFBRRR +FBBBFFFRLR +BFBBFFBLRR +BBFBBFFRLR +BBFFFBBRRR +FFFFBBBRRL +FFBFBBFRLL +FBFFFFBRRL +FBBBFFBRLR +FFBFFFBRRR +FBBBBBBLLL +BFFBFFBLRL +FBFFBBBRLL +BBFBBBFRLR +BFBFBFBRLR +BBFFFFBRLL +FFBBFBBLLR +FFBBFFBRLR +BBFBBBBRLR +BFBBBFBLLR +FFFFBFFRRR +BBFFFBFRRL +FBBFBBBLLL +FFFBFFFLRL +BFFFFBBRRR +FFFBFBFLRL +BBFFBBFRRR +FBBFFFFLRR +FFFBBBFLRL +BFFBBBFLLL +BFBBFFBLLL +FFFFFFBLRL +FBFFBFFLLL +FBBBBBBRRR +FBBFFBBRLR +BFFFBBBLLR +BBFBBBBRRR +BFBFBFFLLR +BFBFFBFRLR +FBBBFFFRRR +FFBFBBFRLR +FFFFFBFRLL +FFBFBBBRRR +BFBFFBBLLL +FBBBBBFRLR +FFBBFBBLLL +BFBFFBBLRL +FBBFBFBRRL +BFFBBBBRRL +FBBFFFBLRL +FBBFBFBLLR +FBBFBBBLRR +BFBBBFBRRL +FBBBFBFLLL +BFFFBFFLLR +FBBBFBFLRR +FFBFFBBLRL +BBFBBBBLLR +BFFFBFFLLL +FBFFFFFLRR +BBFBFBBLRL +BFBFBBFRRL +FBFBFFBLRR +BFFFFFFRRL +BFFFFBFRLR +BFBBFBBRLL +BBFFFFFRLL +FFBBFFFLLR +FFFBFFFLRR +FFFBFFBRRR +BBFBFFBLLR +BFFBFFFRLL +FBFBFFBRRL +BFBBBFFLLL +BBFFBFBLRL +FBFBBFFLRR +FBBFBBBRRR +FFFBBFBRLL +FBBFBFBRRR +BFFFBBFLLL +FBBBFFBLRR +BFBFFBBRRR +FFFFFFBRLL +BBFFFBFLRL +BFBFBFBRRR +BFFFBBFRLR +BFBFFFBLRR +FFFBFFBRRL +BBFFFBBRRL +BFBBBFBRLL +BFBFFFBLRL +FFFBFFFLLR +BFFBFFFLRL +BBFBBFBLRR +FBBBFBBRRL +FBBFBFFRLR +FBFFFFFRLR +FBBBBFFRLR +BFBFBBFRLL +BBFBFBFRRR +BFBFBFBRRL +FBBBBBBRLR +BFBFBBFLLR +BFFFBBFRRL +BBBFFFFRLR +BBBFFFBLLR +FBFBBBFLRR +FBFFFBBLRL +FBFFBBBLLR +BFBFBBFLRR +BFBBFBBLRL +BFFFFFBRRL +FFBBFFFRLR +BFFBBFFRLR +BFBFBFBLRL +BFFBFBFRLR +FFBBFFBRRR +BFBBBBBLLL +BBFFFFFRRL +BBFFFFFLRL +FFFBBFFLRL +BFBBFBFRLL +FFFBBBBLLL +FFFFFBFLRL +FFFFBBFLRR +FBFFFBFRRR +BFFBBBBLLL +BBFBBFFRRL +BFFFBBFLLR +FBBBFFFLLL +FFBFFBBRRL +BFBBBFBLRR +BFFBBBFLRL +BFBBBBBRLL +FFFBBBFRLR +FFFFBFFRRL +FFBFBFFLLL +BBFBFFFLRL +BFFFBBFLRR +FFFBFBFRLL +BFBFFBBLRR +FFFBFBBLLR +BBFFFFFRLR +FFBFBFFRRL +FFFFFBBLRL +FBBBFBFRRL +FBBBBFBLLL +FFFFBBBRLR +FBBBBFFLRL +BFBBBBBRRL +BBFFBFBLLR +FBFBFFFLRL +FBFFFBFRRL +FFFBBFBLRL +BFFFFFBLLL +BFFBFBFLLL +FFFFBBFRRL +FFFBFBBRLR +FBFBBBBRRR +FBFFBBBLLL +FFBBBBFRRR +BFFFFBFRLL +BBFBFBBRLR +BFFBBBFLRR +FBBFBFFRRL +FFFFFBFLLL +BBFBFBFLRR +FFBFBBFLRL +BFFBBFBRLR +FFBBBFFRLR +FFFBBFBRLR +FBFBBBBLLR +BFFBBBBLLR +BBFBFBFLRL +BBFFFFFRRR +FFFBFFFRRL +FBBFFBFRRR +BBFFBFFRLL +FFBBFBFRLL +FFFFBFBLLR +BBFFBBFRLL +BFBBBBFLRL +FBFFBFFRLR +BFBFBBFLLL +FFFFBBFLLL +BFBBBBBLRL +FFBFBFBLRR +BFFFFFBRRR +FBFBBBBLRL +FBBFBBFLLR +FBBFFFFRRL +FBFFFBFLLL +FBFFBBBRRL +FFBFFFFRLR +FBBFBBBRLL +FFFFBFBRLR +FFBFBBBRRL +BFFBFBFRRL +FFBFFBFLLL +BFFBFBFLRR +BBFBFFBLRL +BBFFBFFLLR +BFBBBBFLLL +BBFBBFFRRR +BBFFFBBLRR +BFBFFBFRRL +FBBFBFBLRR +BBFBBBFRRR +FFFBBFBLLR +FFFBFFFLLL +FBBBFBFLLR +BFBBFBFLLL +BFBFBFBLLL +BBFFBBFLRR +FFFBFBFLRR +BFFFFFFRLR +BBFBFBBRRR +BBFFFBFRLL +FFFFBBFRLL +FBBFBBFRLL +FBFFFFBRRR +FBFFBBFLLR +BFFBFFBLLR +FFBFFBFLRR +FBFFBFBRLR +FBFBBFFLLL +FBBFFFBRRL +FBFBFBFRRL +FFBFBFBRRR +FBFBFBFLRL +FFFBFBBRLL +FBBBFFFLLR +FFBBBBFRLL +FBFFFBBRLL +BFFBFFBLRR +FBBFBBFLRL +FBFFFBBRRR +FBFFFBBLLR +BFFBFFBRRR +FBBBFBFRRR +FBFFFFFRLL +BBFBBBFRLL +FFFBFFBLLL +FFBFFFFLRR +FBFFFBBRRL +BBFFBFFRLR +FBFBFBBLLL +FBBBBBBLLR +FBFBBFBLLL +BBFBFFFLRR +BFFFFBBRRL +BBFFFBFLRR +FFBFFFBRLL +FFFFBBBLRL +BFBBBFFRLL +BBFBFFFRLL +FBFBBBBLLL +BBFBBFBRLR +BBFFBFBRLR +BFBFFFFLRL +FBBBFBFRLR +FFBFFFBRLR +FBBBBBFLLR +FFBBBFBLLR +BFFBBFBRRL +BBFFBFFRRL +FFFFFFBRRR +FFBBFBBRRR +FBBBBBBRRL +BFFBBFFRRL +FBBFBFBRLR +FBBFFFFRLL +FBBBBBFLLL +FBBFFFBRRR +BFFFFBBLRL +FFFFBFBLLL +FBFBFFFLLL +FBFBBFBLRR +FFFFBFFLRR +FFFBBBFLRR +FBFFBFFLLR +BBFFBFFLLL +FFBFFBFRRL +BFBBFBBRRR +BBFFFBFLLL +FBFFBFBLLL +BFFBFFBRRL +BBFBFFBLRR +FBFBFFFLRR +BFBBFBBLLR +BFFBBFFRRR +FFFFFFBRRL +BBBFFFFLLR +BFBFFBFLLL +FBBBBBFRRL +BFFBBBBRLR +FFBBFBFLRL +FBFBFFBLRL +FFBBBBFRLR +BBFBBFBRRL +FFFFFBFLLR +FBFBFBFLLL +BFBFBFBLLR +FFFBFFFRLL +BFFBBFBLLR +FFBBFBBRLL +FFFBBFBRRL +FBBFFBBLLL +FFFBBBBRLR +FFFBBFBRRR +BBFFBBBRRL +FBBFBFFLRL +FBBBBBFLRR +BBFBFFBRRL +FFFBFBFLLL +FBBBFFFRLL +BFFBFBFLLR +FFBBBBBRRL +BFFBBFFLRR +FBBFBFBRLL +BFFFBFFRRL +BBFFFFBLLR +BBFFBBFRLR +BFFFBBFRRR +FBFBBFBRLR +FFFFFBBRLL +FBBFFFBRLL +BFFFFFBRLL +BFFFBFBLRR +BFFBFFBRLR +FFFFBFBLRL +FFBFFBFLLR +FBBFBFFLLL +BFFBFBFRRR +BBFBBBFLRL +BBBFFFFLRR +BFBBFFFLLR +FBBFFFBRLR +FFFFFBFRRL +FFFBFBBRRL +BBBFFFBLRR +FFBFBBFRRL +FFBBFFBLRR +BBFFBBBLLL +BFBFBBBRRL +BFFFBFBRLL +FFBFBBBRLL +FBFBFBFLRR +FBFFFBBLLL +FBBFFBFLLR +BFFFFBFRRL +FFBBBFFRRL +FFBFBFFLRL +BBFBBBFLLR +FBBFFBFRLR +FBBFFBBRLL +BFBFFFBRLR +BFFFBFFRLL +BBFBFBBRLL +BFFFFFFRLL +FBFBBBFRLL +BFBBFBFLRR +BFBFBBBRLL +BBFBBBFRRL +BFFBBFBRRR +BFBFFBFLLR +FBFBFBFLLR +FFFFFBBRRL +FBFBBBFRLR +FBFFBBFLLL +FFBFBFFRLR +BBFBFBBLLL +FFFFBFFLRL +FBBFBBFLLL +BFBFBBFLRL +FFFFBBFLLR +BFBBFBBRRL +FBBBFFBRRL +FBBBBFFRLL diff --git a/src/bin/day_5.rs b/src/bin/day_5.rs new file mode 100644 index 0000000..15c8a70 --- /dev/null +++ b/src/bin/day_5.rs @@ -0,0 +1,157 @@ +use bevy::prelude::*; +use std::fs::File; +use std::io::{BufRead, BufReader}; + +fn main() { + App::build() + .add_resource(WindowDescriptor { + title: "Advent of Code".to_string(), + width: 1920, + height: 1080, + ..Default::default() + }) + .add_resource(ClearColor(Color::rgb(0., 0., 0.))) + .add_startup_system(setup_camera.system()) + .add_startup_system(read_input_file.system()) + .add_startup_stage("search") + .add_startup_system_to_stage("search", find_unoccupied_seat.system()) + .add_startup_stage("metadata") + .add_startup_system_to_stage("metadata", add_seat_ids.system()) + .add_startup_system_to_stage("metadata", add_seat_sprites.system()) + .add_startup_stage("report") + .add_startup_system_to_stage("report", print_highest_seat_id.system()) + .add_startup_system_to_stage("report", print_my_seat_id.system()) + .add_plugins(DefaultPlugins) + .run(); +} + +fn setup_camera(mut commands: Commands, mut materials: ResMut>) { + commands.spawn(Camera2dComponents { + transform: Transform::from_translation(Vec3::new(80. / 2., 1280. / 2., 0.)), + ..Default::default() + }); + + commands.insert_resource(Materials { + my_seat_material: materials.add(Color::rgb(0., 0., 255.).into()), + seat_material: materials.add(Color::rgb(0., 255., 0.).into()), + }); +} + +struct Materials { + my_seat_material: Handle, + seat_material: Handle, +} + +#[derive(PartialEq, Eq)] +struct Position { + x: u32, + y: u32, +} +struct SeatId(u32); +struct MySeat; + +fn read_input_file(mut commands: Commands) { + let f = File::open("./inputs/day_5.txt").unwrap(); + for line in BufReader::new(f).lines() { + let mut max_y = 128; + let mut min_y = 0; + let mut max_x = 8; + let mut min_x = 0; + for c in line.unwrap().trim().chars() { + let mid_x = (min_x + max_x) / 2; + let mid_y = (min_y + max_y) / 2; + match c { + 'F' => { + max_y = mid_y; + } + 'B' => { + min_y = mid_y; + } + 'L' => { + max_x = mid_x; + } + 'R' => { + min_x = mid_x; + } + _ => panic!("Unexpected character {}", c), + } + } + + assert_eq!(max_y - min_y, 1); + assert_eq!(max_x - min_x, 1); + + commands.spawn((Position { x: min_x, y: min_y },)); + } +} + +fn find_unoccupied_seat(mut commands: Commands, seats: Query<&Position>) { + for y in 1..127 { + for x in 0..8 { + let potential_position = Position { x, y }; + let required_left = if x == 0 { + Position { x: 7, y: y - 1 } + } else { + Position { x: x - 1, y } + }; + let required_right = if x == 7 { + Position { x: 0, y: y + 1 } + } else { + Position { x: x + 1, y } + }; + + let required_surrounds = [required_left, required_right]; + if !seats.iter().any(|p| p == &potential_position) { + if required_surrounds + .iter() + .all(|required| seats.iter().any(|p| p == required)) + { + commands.spawn((MySeat, potential_position)); + } + } + } + } +} + +fn add_seat_ids(mut commands: Commands, seats: Query<(Entity, &Position)>) { + for (entity, position) in seats.iter() { + let seat_id = position.y * 8 + position.x; + commands.insert_one(entity, SeatId(seat_id)); + } +} + +fn add_seat_sprites( + mut commands: Commands, + materials: Res, + seats: Query<(Entity, &Position, Option<&MySeat>)>, +) { + for (entity, position, my_seat) in seats.iter() { + commands.insert( + entity, + SpriteComponents { + sprite: Sprite::new(Vec2::new(10., 10.)), + material: if my_seat.is_some() { + materials.my_seat_material.clone() + } else { + materials.seat_material.clone() + }, + transform: Transform::from_translation(Vec3::new( + position.x as f32 * 10., + position.y as f32 * 10., + 0., + )), + ..Default::default() + }, + ); + } +} + +fn print_highest_seat_id(seats: Query<&SeatId>) { + let max = seats.iter().map(|s| s.0).max(); + println!("Max seat id: {:?}", max); +} + +fn print_my_seat_id(seats: Query>) { + for seat_id in seats.iter() { + println!("My seat id: {}", seat_id.0); + } +} -- cgit v1.2.3