From db2686c798378738020a0951a521358586e21aa0 Mon Sep 17 00:00:00 2001 From: Santo Cariotti Date: Fri, 9 Feb 2024 11:42:04 +0100 Subject: Add day2 in OCaml --- 2023/rust/day6/src/lib.rs | 102 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 2023/rust/day6/src/lib.rs (limited to '2023/rust/day6/src') diff --git a/2023/rust/day6/src/lib.rs b/2023/rust/day6/src/lib.rs new file mode 100644 index 0000000..b3e33cb --- /dev/null +++ b/2023/rust/day6/src/lib.rs @@ -0,0 +1,102 @@ +pub fn part1(input: &str) -> u64 { + let mut res: u64 = 1; + + let td: Vec> = input + .trim_end() + .split('\n') + .map(|x| { + x.split(':') + .nth(1) + .unwrap() + .trim() + .replace(" ", " ") + .replace(" ", " ") + .replace(" ", " ") + .split(' ') + .map(|y| y.parse::().unwrap()) + .collect() + }) + .collect(); + + assert_eq!(td.len(), 2); + let (t, d) = (&td[0], &td[1]); + + for i in 0..t.len() { + let mut r = 0; + for j in 0..t[i] { + if (t[i] - j) * j > d[i] { + r += 1; + } + } + res *= r; + } + + res +} + +pub fn part2(input: &str) -> u64 { + let mut res: u64 = 1; + + let td: Vec> = input + .trim_end() + .split('\n') + .map(|x| { + x.split(':') + .nth(1) + .unwrap() + .trim() + .replace(" ", "") + .split(' ') + .map(|y| y.parse::().unwrap()) + .collect() + }) + .collect(); + + assert_eq!(td.len(), 2); + let (t, d) = (&td[0], &td[1]); + + for i in 0..t.len() { + let mut r = 0; + for j in 0..t[i] { + if (t[i] - j) * j > d[i] { + r += 1; + } + } + res *= r; + } + + res +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn example_part1() { + let input = include_str!("../example.txt"); + let result = part1(input); + assert_eq!(result, 288); + } + + #[test] + fn input_part1() { + let input = include_str!("../input.txt"); + let result = part1(input); + assert_eq!(result, 74698); + } + + #[test] + fn example_part2() { + let input = include_str!("../example.txt"); + let result = part2(input); + assert_eq!(result, 71503); + } + + #[test] + fn input_part2() { + let input = include_str!("../input.txt"); + let result = part2(input); + assert_eq!(result, 27563421); + } +} -- cgit v1.2.3-18-g5258