diff --git a/inputs/day_07-example.txt b/inputs/day_07-example.txt new file mode 100644 index 0000000..57a2466 --- /dev/null +++ b/inputs/day_07-example.txt @@ -0,0 +1,16 @@ +.......S....... +............... +.......^....... +............... +......^.^...... +............... +.....^.^.^..... +............... +....^.^...^.... +............... +...^.^...^.^... +............... +..^...^.....^.. +............... +.^.^.^.^.^...^. +............... diff --git a/inputs/day_07.txt b/inputs/day_07.txt new file mode 100644 index 0000000..69053be --- /dev/null +++ b/inputs/day_07.txt @@ -0,0 +1,142 @@ +......................................................................S...................................................................... +............................................................................................................................................. +......................................................................^...................................................................... +............................................................................................................................................. +.....................................................................^.^..................................................................... +............................................................................................................................................. +....................................................................^.^.^.................................................................... +............................................................................................................................................. +...................................................................^.^...^................................................................... +............................................................................................................................................. +..................................................................^.^.^.^.^.................................................................. +............................................................................................................................................. +.................................................................^.^.^...^.^................................................................. +............................................................................................................................................. +................................................................^.^.^...^.^.^................................................................ +............................................................................................................................................. +...............................................................^...^...^.^.^.^............................................................... +............................................................................................................................................. +..............................................................^.^.^...^...^.^.^.............................................................. +............................................................................................................................................. +.............................................................^.^.^...^.^...^.^.^............................................................. +............................................................................................................................................. +............................................................^.....^.^.^.^.^.^.^.^............................................................ +............................................................................................................................................. +...........................................................^...^.^...^.^...^...^.^........................................................... +............................................................................................................................................. +..........................................................^.^.^.^.^...^...^.^.....^.......................................................... +............................................................................................................................................. +.........................................................^.^.^...^.^.^...^...^.....^......................................................... +............................................................................................................................................. +........................................................^.^.....^.^.^.^.^.^.^.^.^...^........................................................ +............................................................................................................................................. +.......................................................^...^.^.^.^.^...^...^.^...^.^.^....................................................... +............................................................................................................................................. +......................................................^.^.^.^...^.......^...^.....^.^.^...................................................... +............................................................................................................................................. +.....................................................^.^.^...^.^.^.^.^.^.^.^.^.^.^...^.^..................................................... +............................................................................................................................................. +....................................................^.^.^.....^...^.^.^.^.^.^.^.^.^.^.^.^.................................................... +............................................................................................................................................. +...................................................^.^.....^.^.^...^...^.^.^.^...^.......^................................................... +............................................................................................................................................. +..................................................^...^.......^.....^...^.^.^.^.^.^...^...^.................................................. +............................................................................................................................................. +.................................................^.^.^.....^.^.^.^...^.^...^.^.^.^.^...^.^.^................................................. +............................................................................................................................................. +................................................^.^.^...^.^...^.^.......^...^...^.^.^.^.^.^.^................................................ +............................................................................................................................................. +...............................................^.........^...^.^.......^.....^.^.^...^.^.^.^.^............................................... +............................................................................................................................................. +..............................................^.^.^.^.^.^...^.^.....^...^.^.^...^...^.^...^.^.^.............................................. +............................................................................................................................................. +.............................................^...^.^.^.......^.....^.^.^.^...^.^.....^.^.....^.^............................................. +............................................................................................................................................. +............................................^...^...^.^.^...^...^.^.^...^...^.....^.^.^.^.^.^.^.^............................................ +............................................................................................................................................. +...........................................^.....^...^.....^...^...^.^.^.^.^.^.^.^.^.^.^.^...^.^.^........................................... +............................................................................................................................................. +..........................................^.^.^...^...^.^.....^...^.......^.^...^.^.^.^...^.^...^.^.......................................... +............................................................................................................................................. +.........................................^.^.^...^...^.^.^.^...^.^...^.^.^.^...^.....^.^.^.^.^...^.^......................................... +............................................................................................................................................. +........................................^.^.^...^...^.^.^.^.....^.^.......^.....^...^.^.^.^.^.....^.^........................................ +............................................................................................................................................. +.......................................^.^.^...^.^.^...^.^.^.^.^.^...^.^...^.^.^.........^.^.^.....^.^....................................... +............................................................................................................................................. +......................................^.^.^...^.....^.^.^.^.....^...^.......^.^.....^.^.^...^...^...^.^...................................... +............................................................................................................................................. +.....................................^.^.^.^...^.....^.....^.^.^.^.....^.^.^.....^.^...............^...^..................................... +............................................................................................................................................. +....................................^.^.^.^.....^.^.^...^...^.....^.^.^.^.^.^.^.^.^.^...^.^.^...^.^.^.^.^.................................... +............................................................................................................................................. +...................................^...^.^...^.....^.^...^...^.^.^.^...^...^.....^.....^.^...^.^.^...^.^.^................................... +............................................................................................................................................. +..................................^.^.^.^.......^...^.^.^.^...^.....^.^...^.^.^...^.^.^.^.^.^.^...^.^...^.^.................................. +............................................................................................................................................. +.................................^.....^.^.^.....^.....^.^.^.^.^.^...^.........^.^.^.^.^.....^...^.^.^.^...^................................. +............................................................................................................................................. +................................^.^.^.^.^.^.^.^...^.^.......^.^.....^.^.^.^...^...^.^.^.......^...^.......^.^................................ +............................................................................................................................................. +...............................^.^...^.^...^...^.^.^.^.^...^.^...^.^...^...^...^...^.^.^.^.^.^...^...^.^...^.^............................... +............................................................................................................................................. +..............................^.^...^.^...^...^...^.^.^.^...^...^.^.....^.^...^.^.^...^.^.^.^...^.^.^.^.^.^.^.^.............................. +............................................................................................................................................. +.............................^.^.........^.^.^.....^.^.^...^.^.^.^.^.^.^...^...^.^...^...^.^.....^.^.^.^.^.^.^.^............................. +............................................................................................................................................. +............................^.^.^...^...^.^.....^.......^...^.^...^...^.^.....^...^.^.....^.^.^...^.^.^.^.^.....^............................ +............................................................................................................................................. +...........................^.^.^...^.^...^.^.^...^.^.^.^.^...^.^.^...^.^.^.^.....^...^...^.^...^...^.^.^...^.^.^.^........................... +............................................................................................................................................. +..........................^...^.......^.^.^.^.^.....^.^.....^.^.^.^.^.^...^.^.......^.^...^.^.^...^...^...^.^.^...^.......................... +............................................................................................................................................. +.........................^.^.^.^.^...^...^.^.^.^...^.^...^...^...^.^.^.^.^.^.....^...^.^.^.^.^.^.^.....^.^.^.^.....^......................... +............................................................................................................................................. +........................^.^...^.^.^.^.^.^.....^.^.^.^.^...^.^.^...^.^.....^.^.....^...^.....^.^.^.^.^.^.^.^.^.....^.^........................ +............................................................................................................................................. +.......................^.^.^.^.....^.^.....^.^...^.^...........^.^...^.^.^.^.^.^.^...^.^.^.^.^.^.^...^.^.^.^.^.^.^...^....................... +............................................................................................................................................. +......................^.^.^...^.^...^.^.^.^.^.^.........^.....^.^.....^.^.^.^...^...^...^.^.^.^.^.^.^...^.^.......^.^.^...................... +............................................................................................................................................. +.....................^.^.^...^.^...^...^.....^.^.^...^.^.^...^.^...^...^...^.^.^.^.^...^.^...^.^.^...^...^.^.^.^.^.....^..................... +............................................................................................................................................. +....................^.^.....^.....^.^.^.^.^.^.^.^.^.^...^...^.^.....^.^.^.^...^...^...^.^.^.^.^...^.^.....^.^...^...^.^.^.................... +............................................................................................................................................. +...................^.^...^...^...^.^.........^...^.^...^...^.^.^.^.^.^.^.^.^.^.^...^.^...^...^.^.^.^.^...^...^.^.^.^...^.^................... +............................................................................................................................................. +..................^.^.....^.^.^.....^...^.^.^.^.^.^...^.^.....^.^...^...^.^.^...^.^...^.^.^.^.^...^...^.^...^.^.^.^.^...^.^.................. +............................................................................................................................................. +.................^...^.^...^.^.^...^.....^.^.^.^...^...^...^.^...^.^.^.^.^.^.^.^...^.^.^.^.^.....^...^.^...^...^.^...^.^...^................. +............................................................................................................................................. +................^.......^.^.^...^.^.....^.^.....^...^...^.........^.^.^.^.^.^.^.^.^.^.^.^.^.^.....^.^.^...^.^...^...^.^.^.^.^................ +............................................................................................................................................. +...............^.^.^.^...^.^...^.^.^.^.......^.^.....^.^.^.^.^.^.^.^.^.....^...^.^.^.^.^.^.^...^.^.^.^.^.^.^...^.^.^...^...^.^............... +............................................................................................................................................. +..............^.^.....^...^...^...^.^.^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.....^.^.^...^.....^...^.^.^.^.^.^.^.^.^...^.^.^.^.^.^...^.............. +............................................................................................................................................. +.............^.^.^.^.^.^.....^.....^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.....^...^.^.......^...^.^.^.^.....^.^.^.^.^.^.^.....^.^.^.^............. +............................................................................................................................................. +............^...^...^.^.^.......^.^.^...^...^...^.^.^.^...^.^.^.^.....^...^...^.^.^.^.^.^.^.^...^.^.^.^.^.^...^.^.....^.^...^.^.^............ +............................................................................................................................................. +...........^.^.......^.^.^.^.......^.^.^...^...^.^.^.^.^.^.^.^.^.......^.^.^.^.^.^.....^.^...^.^.^.....^.^.^.^...^.^...^.^.^...^.^........... +............................................................................................................................................. +..........^.^...^...^.....^.^.......^.^.^.^.^.^.^.^.^.^...^.^.^.^.....^...^.^.....^.^.^...^.^.....^.......^...^.^.^...^.^.^.^.^.^.^.......... +............................................................................................................................................. +.........^...^.^.^.^.......^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.......^.^.^...^.^...^.^...^.....^...^.^.^...^.....^.^...^.^.^.^......... +............................................................................................................................................. +........^.^.......^.^.^.^.^.^...^.....^...^.......^.^.^.^...^.^...^.....^.....^.^.....^.^.^.......^.^.^.^.^.....^...^.^...^.^.^.^.^.^........ +............................................................................................................................................. +.......^.^.^.^.......^.^.^...^.^.^.^.^.^...^.^.^...^.^.^.^...^.^.^.^.^.^...^.^...........^.^...^.^...^.^.....^.^.^.......^.^.^...^.^.^....... +............................................................................................................................................. +......^.^...^.^...^.^.^.^.....^...^.^...^.....^.^...^.^.^.....^.^.^.........^.....^.^.....^.^.^.^.^.^...^.^.^...^...^.....^.^.^.^.^.^.^...... +............................................................................................................................................. +.....^.^.....^.^.^.^.^.^.^...^.^...^...^...^.^.^.....^.^...^.....^...^.^.^.^.^.^.^...^.^.^.^.^.^.^...^.^.....^.^.^.^.....^.^...^.^.^...^..... +............................................................................................................................................. +....^.^...^.^...^.^.^.^.^.^.^.^.....^...^.......^.^.^.^.^...^.......^.^.^.^.......^.............^.^.^.^.^.^.^...^.^.^.^.....^.^.^.^.....^.... +............................................................................................................................................. +...^.^.^.^.^.^.^.^.^.^.^.^...^...^.^...^...^.^.^.^...^.^.^.^.^.^.^...^.^.^...^.....^.^.^.^.^.^.^.^.^.^...^.^...^.^.^.^.....^.^...^.....^.^... +............................................................................................................................................. +..^...^.^.^.^.^...^.^.^.^...^...^...^.^.....^...^.....^.^.....^.^.^...^.^.^...^.^...^...^...^.^.^...^.^...^.^.....^.^...^.^.....^...^...^.^.. +............................................................................................................................................. +.^.^.......^...^.^...^.^...^.^...^.^.^.^.^.........^.^.......^.^.^.......^.^.^.^.^.^...^.^...^.^.......^.....^.^.^.^.^.^.^.^...^...^.^...^.^. +............................................................................................................................................. diff --git a/src/main.rs b/src/main.rs index 2764d66..fd04ce1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -53,6 +53,7 @@ fn main() -> Result<()> { 4 => solver!(Day04, raw_input), 5 => solver!(Day05, raw_input), 6 => solver!(Day06, raw_input), + 7 => solver!(Day07, raw_input), _ => bail!("invalid day: `{}`", args.day), }; println!("Parsed input int {input_build_time:#?}"); diff --git a/src/solutions/day_07.rs b/src/solutions/day_07.rs new file mode 100644 index 0000000..622d7af --- /dev/null +++ b/src/solutions/day_07.rs @@ -0,0 +1,91 @@ +use std::fmt::Display; + +use itertools::Itertools; + +use crate::solution::Solution; + +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +enum State { + Empty, + Beam, +} + +#[derive(Clone, Debug)] +struct ManifoldState(Vec); + +impl ManifoldState { + fn new(width: usize, beam_source: usize) -> Self { + let mut state = vec![State::Empty; width]; + state[beam_source] = State::Beam; + Self(state) + } + + fn split(&mut self, splitters: &[usize]) -> u32 { + let mut activated = 0; + for i in splitters.iter().copied() { + if self.0[i] == State::Beam { + self.0[i - 1] = State::Beam; + self.0[i] = State::Empty; + self.0[i + 1] = State::Beam; + activated += 1; + } + } + activated + } +} + +impl Display for ManifoldState { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + for s in &self.0 { + match s { + State::Empty => '.'.fmt(f)?, + State::Beam => '|'.fmt(f)?, + } + } + Ok(()) + } +} + +#[derive(Debug)] +pub struct Day07 { + width: usize, + beam_source: usize, + splitter_locations: Vec>, +} + +impl Solution for Day07 { + fn with_input(input: String) -> Self { + let width = input.find('\n').unwrap(); + let beam_source = input.find('S').unwrap(); + + let splitter_locations = input + .lines() + .skip(2) + .enumerate() + .filter_map(|(i, l)| { + if i % 2 != 0 { + return None; + } + + let splitters = l.bytes().positions(|b| b == b'^').collect(); + Some(splitters) + }) + .collect_vec(); + + Self { + width, + beam_source, + splitter_locations, + } + } + + fn part1(&self) -> String { + let mut state = ManifoldState::new(self.width, self.beam_source); + let mut activations = 0; + for splitters in &self.splitter_locations { + activations += state.split(splitters); + } + + activations.to_string() + } +} diff --git a/src/solutions/mod.rs b/src/solutions/mod.rs index 2153b16..cb2fe8b 100644 --- a/src/solutions/mod.rs +++ b/src/solutions/mod.rs @@ -4,6 +4,7 @@ mod day_03; mod day_04; mod day_05; mod day_06; +mod day_07; pub use day_01::Day01; pub use day_02::Day02; @@ -11,3 +12,4 @@ pub use day_03::Day03; pub use day_04::Day04; pub use day_05::Day05; pub use day_06::Day06; +pub use day_07::Day07;