diff --git a/src/day5.rs b/src/day5.rs index 3a6193a..b18fb8e 100644 --- a/src/day5.rs +++ b/src/day5.rs @@ -20,7 +20,10 @@ impl Stacks { let to = mv.to - 1; // SAFETY: should be safe, borrowing from disjoint sub-vectors and - // not modifying the length of the primary vector + // not modifying the length of the primary vector. Technically it + // is possible that this could alias if to and from are the same, + // but even if that happened this should be safe (although the + // answer given would be incorrect) unsafe { let from: &'static mut Vec<_> = core::mem::transmute(&mut self.0[from]); diff --git a/src/day9.rs b/src/day9.rs new file mode 100644 index 0000000..4566cae --- /dev/null +++ b/src/day9.rs @@ -0,0 +1,131 @@ +use crate::util::prelude::*; + +static INPUT: &str = include_str!("inputs/day9.txt"); + +#[derive(Debug, Copy, Clone)] +enum Direction { + Right, + Down, + Up, + Left, +} +impl Direction { + fn diff(&self) -> (sint, sint) { + use Direction::*; + + match self { + Right => (1, 0), + Up => (0, 1), + Down => (0, -1), + Left => (-1, 0), + } + } +} +impl core::str::FromStr for Direction { + type Err = (); + + fn from_str(s: &str) -> Result { + Ok(match s { + "U" => Direction::Up, + "R" => Direction::Right, + "L" => Direction::Left, + "D" => Direction::Down, + _ => return Err(()), + }) + } +} + +#[derive(Debug, Copy, Clone)] +struct Move { + count: uint, + direction: Direction, +} +impl core::str::FromStr for Move { + type Err = (); + + fn from_str(s: &str) -> Result { + let mut it = s.split(' '); + + let direction = it.next().ok_or(())?.parse()?; + let count = it.next().ok_or(())?.parse().map_err(|_| ())?; + + Ok(Self { count, direction }) + } +} + +fn moves(s: &str) -> impl Iterator + '_ { + s.lines() + .filter(|s| !s.is_empty()) + .map(|s| s.parse().unwrap()) +} + +#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)] +struct Pos(sint, sint); + +fn move_tail(head: &Pos, tail: &mut Pos) { + let diff_x = head.0 - tail.0; + let diff_y = head.1 - tail.1; + + let diff_x_abs = diff_x.abs(); + let diff_y_abs = diff_y.abs(); + // diag + let mv = if diff_x_abs + diff_y_abs == 3 { + (diff_x.signum(), diff_y.signum()) + } else { + ((diff_x / 2).signum(), (diff_y / 2).signum()) + }; + + tail.0 += mv.0; + tail.1 += mv.1; +} + +pub fn part1() { + let mut head = Pos(0, 0); + let mut tail = Pos(0, 0); + + let moves = moves(INPUT); + let mut locations = HashSet::default(); + + for mv in moves { + let dir = mv.direction.diff(); + let count = mv.count; + + for _ in 0..count { + head.0 += dir.0; + head.1 += dir.1; + + move_tail(&head, &mut tail); + + locations.insert(tail); + } + } + + println!("{}", locations.len()) +} + +pub fn part2() { + let mut parts = vec![Pos(0, 0); 10]; + + let moves = moves(INPUT); + let mut locations = HashSet::default(); + + for mv in moves { + let dir = mv.direction.diff(); + let count = mv.count; + + for _ in 0..count { + parts[0].0 += dir.0; + parts[0].1 += dir.1; + + for i in 0..parts.len() - 1 { + let tail: &mut _ = + unsafe { core::mem::transmute(&mut parts[i + 1]) }; + move_tail(&parts[i], tail); + } + + locations.insert(*parts.last().unwrap()); + } + } + + println!("{}", locations.len()) +} diff --git a/src/inputs/day9.txt b/src/inputs/day9.txt new file mode 100644 index 0000000..72de61f --- /dev/null +++ b/src/inputs/day9.txt @@ -0,0 +1,2000 @@ +U 1 +L 2 +U 2 +D 2 +L 2 +U 1 +D 1 +U 2 +D 1 +U 2 +D 1 +R 2 +U 2 +L 1 +U 2 +D 2 +R 1 +U 1 +R 2 +L 1 +R 2 +D 2 +R 2 +D 2 +U 1 +R 1 +D 2 +L 2 +D 1 +R 2 +D 2 +R 1 +L 2 +R 1 +L 2 +R 1 +U 1 +D 2 +L 1 +D 1 +R 1 +U 1 +D 2 +L 1 +U 1 +L 2 +R 1 +D 2 +U 1 +L 1 +D 1 +L 1 +R 2 +D 1 +L 1 +R 1 +L 2 +D 2 +U 2 +D 1 +R 2 +U 1 +L 1 +U 2 +L 1 +U 2 +R 2 +U 1 +D 1 +L 2 +R 2 +D 2 +L 1 +D 2 +R 2 +D 1 +L 1 +D 2 +L 1 +R 1 +L 1 +R 2 +U 1 +R 1 +D 1 +R 1 +D 2 +R 2 +D 2 +U 1 +L 1 +D 1 +R 1 +L 2 +D 1 +U 2 +D 1 +R 1 +D 2 +U 2 +D 1 +R 1 +D 1 +R 1 +U 2 +L 1 +U 1 +R 1 +L 2 +R 1 +L 1 +D 2 +L 2 +R 1 +D 3 +L 3 +U 1 +R 2 +U 1 +R 2 +L 1 +D 1 +L 3 +U 2 +L 3 +D 1 +U 2 +L 3 +U 1 +R 2 +L 1 +R 1 +L 2 +D 2 +R 3 +L 1 +U 1 +L 1 +R 1 +U 1 +D 3 +L 3 +D 2 +R 2 +L 2 +D 1 +U 2 +L 2 +U 1 +R 3 +D 3 +L 3 +R 2 +D 3 +L 3 +U 1 +D 3 +L 2 +R 2 +D 3 +R 2 +L 1 +U 3 +D 2 +R 2 +D 3 +U 1 +D 3 +R 3 +D 2 +U 1 +L 2 +D 2 +U 2 +R 1 +L 3 +U 2 +R 2 +U 1 +R 2 +D 1 +R 2 +D 3 +U 1 +L 1 +U 2 +L 1 +D 2 +R 1 +U 1 +D 1 +R 3 +U 3 +R 1 +U 1 +L 3 +D 2 +R 2 +U 1 +R 2 +D 2 +R 3 +L 2 +U 2 +R 1 +L 3 +U 2 +R 1 +D 3 +L 2 +U 2 +R 3 +U 3 +L 1 +R 3 +D 3 +L 2 +R 3 +D 2 +R 3 +U 3 +R 1 +U 2 +D 4 +L 3 +D 2 +L 4 +R 2 +D 4 +L 1 +R 3 +L 1 +D 4 +U 4 +D 1 +R 4 +U 2 +D 2 +R 1 +U 2 +D 1 +L 3 +D 2 +U 2 +L 1 +R 3 +L 3 +U 3 +L 2 +R 1 +D 2 +R 3 +L 2 +D 4 +U 2 +L 3 +R 3 +L 3 +U 4 +D 4 +L 1 +U 3 +R 4 +L 4 +D 4 +U 3 +R 4 +L 2 +D 1 +U 1 +L 4 +D 3 +U 3 +R 2 +D 3 +U 4 +L 2 +R 1 +L 2 +R 2 +U 3 +L 1 +D 4 +U 1 +L 4 +R 3 +L 3 +R 2 +D 4 +U 4 +L 4 +D 3 +R 1 +D 3 +R 4 +L 4 +R 2 +L 2 +D 2 +R 2 +L 2 +U 3 +R 3 +D 2 +R 4 +L 1 +R 2 +U 4 +L 2 +R 1 +U 2 +R 3 +D 2 +U 1 +R 4 +L 3 +U 3 +D 4 +U 1 +L 1 +R 1 +D 2 +R 1 +D 1 +L 2 +D 4 +U 4 +L 4 +U 3 +D 4 +U 4 +D 3 +U 3 +L 5 +U 4 +L 4 +U 5 +D 1 +L 5 +U 2 +D 4 +U 5 +L 4 +U 2 +D 4 +R 3 +L 5 +U 2 +L 1 +U 5 +L 4 +D 2 +U 5 +R 3 +D 2 +U 3 +L 3 +R 3 +D 5 +U 4 +D 5 +U 4 +R 1 +L 1 +U 3 +L 3 +R 4 +L 1 +U 2 +D 3 +U 5 +L 3 +R 5 +D 3 +U 4 +L 1 +U 3 +R 2 +L 2 +U 5 +D 3 +L 5 +D 1 +R 3 +L 5 +R 1 +D 2 +U 3 +D 2 +L 4 +D 4 +R 5 +L 5 +U 1 +L 5 +R 3 +L 3 +U 4 +R 3 +L 3 +R 1 +L 2 +D 1 +U 3 +L 5 +R 1 +L 5 +U 3 +R 4 +U 4 +D 3 +U 2 +L 5 +D 3 +L 3 +R 2 +D 2 +U 3 +D 3 +R 2 +D 3 +L 1 +R 1 +U 1 +L 3 +R 2 +U 3 +R 1 +D 5 +U 5 +L 5 +D 2 +U 4 +D 3 +U 3 +L 4 +D 3 +U 2 +R 1 +D 4 +L 3 +U 5 +D 2 +L 5 +R 4 +D 3 +L 4 +D 3 +R 4 +D 5 +R 2 +L 3 +D 5 +U 3 +R 4 +U 6 +L 5 +D 3 +U 4 +L 1 +U 5 +R 5 +D 3 +U 5 +D 5 +R 2 +D 2 +U 4 +D 2 +U 3 +R 6 +U 4 +L 2 +R 2 +U 3 +L 1 +U 5 +R 6 +L 1 +D 5 +R 5 +D 5 +L 2 +U 3 +L 4 +R 2 +U 3 +L 2 +U 2 +D 4 +L 4 +R 5 +L 6 +D 2 +L 4 +R 2 +D 4 +L 1 +D 6 +R 2 +U 5 +D 2 +L 6 +U 5 +L 4 +U 1 +D 3 +U 1 +L 5 +U 2 +R 6 +D 5 +U 4 +L 5 +U 1 +L 5 +U 2 +R 5 +U 2 +R 4 +D 4 +R 1 +D 6 +R 5 +L 5 +U 6 +D 2 +R 1 +L 4 +U 3 +D 6 +R 4 +L 3 +R 6 +U 2 +R 1 +U 4 +R 5 +U 1 +D 4 +U 1 +L 3 +D 2 +L 2 +D 2 +L 2 +U 6 +D 4 +L 5 +D 2 +U 1 +L 5 +D 2 +R 3 +L 2 +D 2 +U 4 +L 4 +U 6 +L 1 +R 7 +L 4 +U 1 +L 1 +U 6 +L 1 +D 2 +L 5 +R 3 +U 6 +L 6 +U 2 +D 4 +L 2 +R 6 +L 3 +D 4 +L 1 +R 6 +D 4 +U 2 +D 4 +R 2 +D 1 +U 3 +R 6 +U 4 +D 2 +L 6 +R 5 +L 3 +U 1 +L 3 +U 3 +L 7 +R 1 +L 4 +D 5 +U 6 +L 3 +U 2 +L 1 +D 2 +R 4 +D 7 +R 1 +D 5 +L 1 +D 2 +U 2 +R 1 +L 1 +U 2 +D 2 +R 4 +D 7 +L 7 +D 1 +L 4 +R 7 +U 3 +L 4 +R 3 +U 2 +R 5 +U 5 +L 5 +U 2 +L 7 +R 4 +U 2 +L 5 +R 4 +U 7 +L 7 +R 5 +L 6 +D 4 +L 1 +D 6 +L 5 +R 5 +L 7 +R 5 +D 4 +U 4 +L 5 +U 7 +D 6 +U 3 +L 5 +U 4 +D 1 +L 1 +D 7 +R 3 +D 7 +U 3 +D 7 +R 4 +U 5 +L 7 +R 4 +L 5 +R 1 +D 4 +L 3 +U 1 +R 3 +L 1 +U 4 +R 3 +L 5 +D 2 +R 2 +L 4 +D 4 +L 7 +R 7 +U 2 +D 7 +L 5 +U 3 +L 4 +U 7 +R 6 +D 3 +L 2 +R 7 +L 5 +U 6 +D 6 +L 2 +D 2 +L 5 +D 7 +U 5 +L 3 +D 4 +U 4 +L 4 +R 2 +D 8 +L 3 +R 2 +D 4 +L 4 +U 7 +R 8 +D 6 +R 7 +U 1 +R 6 +U 6 +R 4 +D 8 +L 3 +R 3 +D 2 +U 5 +D 8 +L 3 +D 5 +L 7 +R 5 +L 1 +D 4 +L 7 +U 7 +L 8 +D 7 +L 5 +U 3 +R 4 +U 3 +L 7 +R 8 +D 6 +R 2 +D 3 +R 1 +D 6 +U 8 +D 6 +L 2 +R 8 +D 4 +U 3 +D 5 +U 2 +L 3 +U 1 +R 7 +U 6 +D 5 +R 5 +U 4 +L 1 +D 3 +U 7 +L 8 +U 5 +D 5 +U 4 +D 3 +L 5 +D 5 +R 5 +D 3 +R 4 +U 4 +R 8 +L 4 +D 4 +L 2 +D 4 +R 7 +L 8 +R 7 +L 1 +D 3 +U 6 +R 5 +D 1 +U 4 +R 7 +U 1 +R 2 +L 8 +U 8 +D 2 +L 9 +U 9 +D 4 +U 8 +D 3 +R 1 +U 3 +D 1 +R 7 +L 2 +U 4 +L 4 +U 9 +L 7 +U 2 +L 4 +D 5 +R 8 +L 5 +R 4 +U 2 +L 5 +U 2 +D 1 +L 9 +R 5 +D 6 +U 3 +D 5 +U 2 +L 1 +R 7 +U 1 +L 7 +U 1 +L 5 +D 6 +R 6 +D 7 +U 6 +D 7 +L 7 +D 2 +L 6 +D 4 +U 7 +D 4 +L 8 +D 5 +R 7 +L 9 +D 9 +U 3 +D 2 +U 9 +R 4 +D 3 +U 9 +R 4 +D 6 +L 2 +D 1 +L 5 +U 2 +L 5 +D 1 +R 7 +L 9 +R 6 +D 8 +L 2 +R 5 +D 6 +L 9 +U 8 +R 2 +D 4 +R 5 +U 3 +D 4 +R 6 +D 5 +U 9 +D 6 +L 3 +D 6 +R 6 +D 5 +R 7 +U 5 +L 2 +U 2 +D 5 +U 4 +D 8 +R 6 +U 8 +D 2 +R 9 +U 6 +L 1 +U 6 +L 5 +U 10 +D 2 +U 6 +R 10 +L 7 +U 4 +R 2 +D 1 +U 3 +D 6 +L 10 +U 4 +L 5 +D 10 +R 1 +L 5 +R 5 +U 6 +R 1 +D 7 +L 7 +D 4 +L 4 +D 10 +U 1 +R 9 +L 7 +D 7 +L 6 +D 7 +U 7 +R 5 +L 6 +U 3 +L 1 +D 4 +L 1 +D 3 +U 10 +D 10 +L 3 +R 6 +U 4 +D 2 +L 4 +U 1 +R 9 +D 8 +U 7 +R 10 +U 10 +L 4 +U 1 +L 9 +R 7 +L 8 +R 10 +D 6 +U 1 +R 1 +D 10 +R 4 +L 6 +D 2 +U 9 +R 6 +L 4 +U 10 +R 10 +U 4 +D 8 +U 8 +L 9 +R 9 +D 7 +L 1 +D 6 +L 7 +U 4 +L 6 +R 9 +D 6 +L 5 +D 5 +L 5 +U 6 +R 1 +D 4 +R 6 +L 5 +U 9 +R 3 +D 3 +L 10 +D 6 +U 5 +D 6 +R 6 +D 7 +R 3 +D 2 +L 2 +D 9 +U 1 +D 1 +L 1 +D 3 +U 3 +R 4 +U 1 +L 9 +U 9 +R 4 +D 10 +U 2 +L 4 +U 3 +D 1 +R 10 +U 7 +R 5 +D 6 +L 2 +U 5 +L 5 +U 5 +L 4 +D 8 +R 7 +L 5 +R 6 +U 4 +L 7 +D 4 +R 9 +D 7 +R 7 +L 2 +D 8 +L 9 +D 2 +L 7 +U 10 +R 3 +U 5 +R 3 +D 9 +U 9 +D 11 +U 6 +R 3 +U 11 +D 11 +L 11 +U 6 +D 10 +R 9 +U 11 +R 6 +L 4 +R 5 +L 11 +D 9 +L 10 +R 4 +D 11 +R 2 +L 6 +R 3 +U 4 +L 10 +U 6 +D 9 +L 5 +U 3 +R 2 +U 5 +L 7 +U 1 +L 10 +U 9 +R 3 +D 5 +R 9 +U 6 +D 9 +L 6 +R 10 +D 10 +R 8 +D 7 +L 3 +D 4 +L 6 +R 2 +D 11 +U 5 +D 7 +L 1 +U 11 +L 11 +U 3 +D 2 +L 9 +R 8 +L 11 +R 2 +D 9 +U 3 +L 9 +U 6 +D 2 +L 10 +U 8 +L 5 +R 3 +U 3 +R 1 +L 7 +R 10 +L 2 +R 7 +U 5 +D 12 +L 11 +R 2 +L 10 +U 2 +D 3 +R 3 +U 6 +D 1 +L 8 +R 4 +L 5 +U 10 +R 12 +U 9 +R 12 +L 12 +R 6 +U 11 +D 1 +R 9 +U 2 +R 11 +L 1 +R 12 +U 10 +L 9 +U 12 +R 10 +U 12 +D 12 +U 2 +D 11 +L 12 +R 9 +U 3 +D 4 +L 6 +U 3 +R 10 +D 2 +U 11 +L 4 +R 11 +U 11 +R 1 +D 10 +R 6 +U 8 +L 3 +D 6 +R 1 +U 9 +L 3 +U 5 +D 4 +R 12 +U 11 +D 2 +U 10 +L 4 +D 9 +L 4 +U 10 +D 1 +R 1 +L 5 +R 2 +D 12 +R 5 +U 3 +L 11 +D 10 +L 11 +R 7 +L 10 +U 6 +R 12 +D 3 +R 10 +U 1 +L 2 +D 1 +R 1 +L 12 +U 4 +L 3 +R 6 +L 3 +D 6 +U 7 +R 10 +U 6 +D 6 +R 5 +D 10 +R 10 +D 8 +L 10 +U 11 +R 9 +L 4 +R 8 +U 1 +D 3 +U 7 +L 3 +U 10 +R 12 +U 10 +D 10 +U 9 +D 7 +R 4 +D 2 +R 9 +U 13 +R 6 +L 4 +R 9 +L 11 +U 6 +L 12 +D 9 +R 13 +L 2 +U 7 +D 10 +L 13 +D 4 +U 6 +L 8 +U 13 +R 3 +D 2 +L 3 +R 1 +U 1 +D 7 +L 5 +D 6 +R 1 +D 3 +R 5 +L 1 +D 3 +U 11 +L 1 +D 13 +R 5 +D 2 +L 8 +D 10 +R 1 +L 2 +D 2 +L 12 +R 11 +D 13 +R 7 +D 12 +L 2 +D 5 +L 9 +D 8 +L 3 +D 2 +U 4 +D 8 +R 7 +D 8 +U 8 +R 2 +U 10 +D 7 +L 9 +U 1 +L 10 +R 4 +U 1 +L 5 +R 5 +D 10 +R 2 +L 6 +R 4 +D 10 +L 7 +R 11 +L 11 +U 7 +L 1 +D 5 +U 4 +D 6 +R 4 +U 6 +D 7 +L 2 +D 1 +R 11 +U 11 +D 12 +U 4 +D 13 +R 3 +L 4 +R 3 +L 8 +R 4 +U 7 +L 2 +R 8 +L 13 +D 6 +U 11 +L 12 +U 1 +D 3 +U 7 +L 4 +R 5 +U 7 +D 1 +L 9 +U 2 +R 4 +D 9 +U 8 +R 2 +D 9 +L 8 +D 13 +U 13 +D 1 +U 9 +D 5 +L 1 +U 12 +D 2 +R 9 +L 7 +R 1 +L 3 +R 2 +D 12 +L 11 +D 4 +R 11 +U 5 +L 13 +R 2 +U 12 +L 9 +R 10 +U 3 +D 10 +R 8 +D 12 +U 6 +R 7 +D 11 +L 10 +U 14 +L 9 +U 12 +D 4 +U 3 +D 10 +R 6 +D 5 +R 1 +D 10 +U 13 +L 9 +R 7 +U 14 +D 10 +U 7 +D 13 +L 14 +D 14 +U 6 +D 14 +L 8 +R 2 +D 7 +U 14 +R 6 +L 14 +U 14 +R 6 +D 7 +R 7 +D 3 +U 10 +D 10 +R 7 +U 11 +R 3 +L 2 +R 12 +L 13 +R 3 +U 4 +D 1 +L 7 +U 9 +R 9 +U 9 +L 11 +U 7 +D 6 +R 7 +L 3 +D 5 +U 14 +R 8 +D 7 +L 6 +U 6 +R 11 +D 9 +R 6 +D 5 +L 5 +D 1 +L 10 +R 8 +L 15 +U 1 +D 14 +L 1 +R 5 +D 5 +L 3 +U 6 +R 6 +L 4 +D 3 +L 3 +D 4 +U 7 +L 10 +D 8 +R 13 +D 9 +R 15 +D 6 +U 10 +D 14 +L 10 +U 12 +D 13 +U 8 +L 13 +U 11 +D 13 +L 8 +R 12 +U 12 +D 14 +U 15 +L 1 +R 14 +U 15 +L 14 +U 4 +D 2 +L 2 +R 6 +D 15 +U 2 +R 5 +L 7 +U 8 +D 12 +R 2 +U 2 +R 11 +L 3 +U 15 +R 15 +D 1 +U 9 +R 5 +U 1 +R 15 +U 7 +D 8 +R 6 +U 7 +R 1 +U 5 +R 15 +U 9 +L 6 +U 10 +R 10 +D 2 +U 14 +D 13 +R 11 +L 14 +D 6 +U 6 +D 6 +U 10 +D 1 +U 10 +L 11 +D 13 +U 2 +L 14 +D 9 +R 14 +U 9 +L 8 +D 11 +U 3 +L 5 +U 8 +L 1 +U 12 +L 6 +R 5 +D 8 +R 5 +D 9 +U 14 +R 13 +U 6 +L 9 +R 7 +L 5 +U 9 +L 8 +D 9 +L 3 +R 4 +L 8 +D 1 +L 4 +R 6 +U 8 +L 5 +R 12 +U 7 +R 5 +D 8 +U 6 +R 11 +U 1 +D 9 +L 7 +R 10 +L 4 +R 1 +D 11 +R 1 +U 16 +L 6 +R 7 +D 3 +R 4 +U 13 +R 12 +D 1 +L 5 +D 2 +U 4 +D 11 +L 13 +D 4 +U 2 +D 14 +L 3 +U 1 +D 13 +R 14 +U 6 +R 8 +L 16 +U 9 +D 7 +U 15 +D 15 +L 11 +R 15 +L 4 +D 5 +U 3 +L 3 +D 8 +L 6 +U 15 +L 11 +R 14 +D 8 +U 10 +D 6 +R 1 +L 16 +D 16 +L 3 +U 10 +R 5 +L 16 +R 2 +U 15 +R 10 +U 11 +R 15 +D 16 +L 3 +U 15 +L 10 +R 12 +U 13 +R 3 +L 13 +D 15 +U 4 +R 8 +U 6 +L 10 +R 12 +U 1 +L 15 +D 5 +L 1 +U 9 +D 1 +R 16 +L 7 +U 13 +L 13 +U 6 +L 1 +R 14 +L 11 +U 16 +R 15 +L 10 +D 9 +R 9 +D 6 +U 16 +R 4 +U 1 +L 3 +R 16 +L 3 +U 6 +D 15 +R 13 +D 11 +U 15 +R 3 +L 15 +D 14 +U 10 +R 7 +U 4 +R 13 +L 11 +R 13 +L 11 +R 3 +L 5 +U 12 +L 9 +U 8 +D 2 +U 17 +D 3 +R 17 +U 14 +L 9 +R 10 +D 6 +L 5 +R 14 +L 8 +U 2 +D 16 +R 15 +D 12 +U 3 +L 4 +R 12 +U 16 +D 14 +L 12 +R 8 +D 4 +R 9 +U 12 +R 15 +U 6 +L 3 +D 17 +R 3 +U 6 +L 2 +R 2 +U 2 +D 17 +L 4 +R 8 +U 17 +R 16 +L 17 +U 5 +D 11 +U 8 +L 7 +U 3 +R 1 +D 15 +U 14 +L 4 +D 9 +U 15 +R 13 +L 2 +U 4 +R 17 +U 2 +L 13 +R 4 +U 8 +R 15 +U 8 +D 13 +U 10 +D 7 +U 7 +D 17 +R 16 +L 10 +U 10 +L 8 +R 9 +L 8 +R 1 +D 10 +U 17 +D 13 +U 10 +D 13 +L 14 +R 17 +D 5 +L 1 +U 17 +D 17 +L 13 +U 12 +R 10 +D 12 +R 15 +L 15 +U 11 +L 14 +D 15 +U 12 +D 7 +U 15 +L 1 +U 2 +R 18 +L 15 +U 7 +L 8 +R 3 +D 14 +R 7 +D 7 +U 6 +R 10 +L 9 +R 9 +D 17 +R 11 +D 4 +L 16 +U 12 +R 10 +L 4 +D 7 +U 18 +L 11 +U 3 +L 13 +U 5 +R 11 +D 16 +U 14 +D 1 +R 18 +D 4 +L 7 +U 2 +D 9 +L 5 +R 14 +U 18 +R 2 +U 7 +R 8 +U 9 +L 6 +R 12 +U 15 +R 1 +L 7 +D 3 +U 10 +R 5 +U 2 +L 8 +R 13 +L 14 +D 10 +L 10 +U 12 +R 5 +L 13 +D 8 +U 5 +D 17 +L 8 +D 8 +L 7 +U 5 +D 16 +R 9 +D 6 +U 11 +D 16 +U 15 +D 6 +L 4 +R 16 +D 8 +L 11 +U 13 +R 14 +L 12 +D 2 +U 16 +D 1 +L 12 +D 10 +R 1 +D 17 +L 8 +U 13 +R 10 +U 9 +D 4 +R 1 +U 17 +L 5 +D 15 +U 9 +R 15 +U 18 +L 15 +D 18 +U 15 +D 1 +L 9 +R 6 +L 15 +R 3 +D 19 +L 5 +D 10 +L 18 +D 11 +L 14 +D 11 +U 19 +D 5 +R 9 +L 18 +R 11 +D 3 +L 7 +R 4 +D 13 +L 9 +R 14 +D 14 +L 8 +U 10 +L 11 +U 4 +D 13 +R 13 +L 7 +R 7 +D 18 +U 2 +L 17 +D 16 +R 3 +U 12 +L 13 +U 5 +L 1 +U 9 +R 6 +D 14 +U 6 +R 3 +U 6 +R 7 +D 8 +U 11 +L 11 +R 7 +U 17 +D 2 +L 12 +U 18 +L 3 +U 14 +L 6 +R 10 +L 16 +U 19 +D 9 +R 13 +U 5 +R 5 +D 15 +R 1 +L 1 +U 5 +D 16 +L 5 +R 15 +L 14 +D 5 +R 9 +U 12 +L 9 +U 7 +R 16 +D 16 +R 10 +D 15 +R 16 +L 2 +U 13 +L 5 +D 19 +R 18 +D 19 +R 16 +D 12 +R 15 +D 12 +U 5 +L 3 +R 14 +D 7 +U 11 +R 10 +L 18 +D 9 +U 2 +D 19 +U 8 +D 19 +U 18 +R 11 +D 2 +R 8 +D 14 diff --git a/src/main.rs b/src/main.rs index 15015ab..829bc9d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,8 +8,9 @@ mod day5; mod day6; mod day7; mod day8; +mod day9; mod util; fn main() { - day8::part2(); + day9::part2(); }