diff --git a/2022/rust/src/main.rs b/2022/rust/src/main.rs index dd38c71..11c9df9 100644 --- a/2022/rust/src/main.rs +++ b/2022/rust/src/main.rs @@ -3,5 +3,5 @@ mod solutions; fn main() { - solutions::day04::run(); + solutions::day05::run(); } diff --git a/2022/rust/src/solutions/day01.rs b/2022/rust/src/solutions/day01.rs index 2b916ca..555b260 100644 --- a/2022/rust/src/solutions/day01.rs +++ b/2022/rust/src/solutions/day01.rs @@ -10,11 +10,12 @@ pub fn run() -> () { println!("Part 2: {}", solve2(&data)); } + fn solve1(data: &Vec>) -> i32 { data.iter().map(|xs| xs.iter().sum::()).max().unwrap() } -#[inline] +#[inline(always)] fn insert(arr: &mut [i32; 3], to_insert: i32) { if to_insert > arr[2] { for idx in (0..3).rev() { @@ -40,7 +41,6 @@ fn solve2(data: &Vec>) -> i32 { three.iter().sum() } - fn parse_data(data: Vec) -> Vec> { data.iter() .fold(vec![vec![]], | mut acc, next| { @@ -54,3 +54,31 @@ fn parse_data(data: Vec) -> Vec> { acc }) } + + +#[cfg(test)] +mod tests { + use super::*; + + fn data() -> Vec<&'static str> { + vec![ + "1000", "2000", "3000", "", + "4000", "", + "5000", "6000", "", + "7000", "8000", "9000", "", + "10000", + ] + } + + #[test] + fn part1() { + let data = parse_data(data().into_iter().map(String::from).collect()); + assert_eq!(24000, solve1(&data)); + } + + #[test] + fn part2() { + let data = parse_data(data().into_iter().map(String::from).collect()); + assert_eq!(45000, solve2(&data)); + } +} diff --git a/2022/rust/src/solutions/day02.rs b/2022/rust/src/solutions/day02.rs index 0d071ad..356bfb1 100644 --- a/2022/rust/src/solutions/day02.rs +++ b/2022/rust/src/solutions/day02.rs @@ -121,3 +121,25 @@ fn parse_data(data: Vec) -> Vec<(char, char)> { }) .collect() } + + +#[cfg(test)] +mod tests { + use super::*; + + fn data() -> Vec<&'static str> { + vec!["A Y", "B X", "C Z"] + } + + #[test] + fn part1() { + let data = parse_data(data().into_iter().map(String::from).collect()); + assert_eq!(15, solve1(&data)); + } + + #[test] + fn part2() { + let data = parse_data(data().into_iter().map(String::from).collect()); + assert_eq!(12, solve2(&data)); + } +} diff --git a/2022/rust/src/solutions/day03.rs b/2022/rust/src/solutions/day03.rs index 27260bc..92d5940 100644 --- a/2022/rust/src/solutions/day03.rs +++ b/2022/rust/src/solutions/day03.rs @@ -58,3 +58,32 @@ fn parse_data(data: Vec) -> Vec<(HashSet, HashSet)> { }) .collect() } + + +#[cfg(test)] +mod tests { + use super::*; + + fn data() -> Vec<&'static str> { + vec![ + "vJrwpWtwJgWrhcsFMMfFFhFp", + "jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL", + "PmmdzqPrVvPwwTWBwg", + "wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn", + "ttgJtRGJQctTZtZT", + "CrZsJsPPZsGzwwsLwLmpwMDw" + ] + } + + #[test] + fn part1() { + let data = parse_data(data().into_iter().map(String::from).collect()); + assert_eq!(157, solve1(&data)); + } + + #[test] + fn part2() { + let data = parse_data(data().into_iter().map(String::from).collect()); + assert_eq!(70, solve2(&data)); + } +} diff --git a/2022/rust/src/solutions/day04.rs b/2022/rust/src/solutions/day04.rs index f8deca0..c75e409 100644 --- a/2022/rust/src/solutions/day04.rs +++ b/2022/rust/src/solutions/day04.rs @@ -47,3 +47,25 @@ fn parse_data(data: Vec) -> Vec<((i32, i32), (i32, i32))> { }) .collect() } + + +#[cfg(test)] +mod tests { + use super::*; + + fn data() -> Vec<&'static str> { + vec!["2-4,6-8", "2-3,4-5", "5-7,7-9", "2-8,3-7", "6-6,4-6", "2-6,4-8"] + } + + #[test] + fn part1() { + let data = parse_data(data().into_iter().map(String::from).collect()); + assert_eq!(2, solve1(&data)); + } + + #[test] + fn part2() { + let data = parse_data(data().into_iter().map(String::from).collect()); + assert_eq!(4, solve2(&data)); + } +} diff --git a/2022/rust/src/solutions/day05.rs b/2022/rust/src/solutions/day05.rs new file mode 100644 index 0000000..e06744b --- /dev/null +++ b/2022/rust/src/solutions/day05.rs @@ -0,0 +1,46 @@ +use crate::utils; + + +pub fn run() -> () { + let data = parse_data(utils::read_lines(utils::Source::Scratch)); + + println!("Day 5"); + println!("Part 1: {}", solve1(&data)); + println!("Part 2: {}", solve2(&data)); +} + + +fn solve1(data: &()) -> i32 { + 1 +} + +fn solve2(data: &()) -> i32 { + 2 +} + + +fn parse_data(data: Vec) -> () { + () +} + + +#[cfg(test)] +mod tests { + use super::*; + + fn data() -> Vec<&'static str> { + vec![""] + } + + #[test] + fn part1() { + let data = parse_data(data().into_iter().map(String::from).collect()); + assert_eq!(1, solve1(&data)); + } + + #[test] + fn part2() { + let data = parse_data(data().into_iter().map(String::from).collect()); + assert_eq!(2, solve2(&data)); + } +} diff --git a/2022/rust/src/solutions/mod.rs b/2022/rust/src/solutions/mod.rs index e051fbd..f290640 100644 --- a/2022/rust/src/solutions/mod.rs +++ b/2022/rust/src/solutions/mod.rs @@ -2,3 +2,4 @@ pub mod day01; pub mod day02; pub mod day03; pub mod day04; +pub mod day05;