From 47f8224ece055efe4748d65eb40fa0e6cd9483f5 Mon Sep 17 00:00:00 2001 From: omagdy7 Date: Fri, 1 Dec 2023 17:36:39 +0200 Subject: Day1 2023 done --- 2023/Rust/src/day1.rs | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 2023/Rust/src/day1.rs (limited to '2023/Rust/src') diff --git a/2023/Rust/src/day1.rs b/2023/Rust/src/day1.rs new file mode 100644 index 0000000..09cd49a --- /dev/null +++ b/2023/Rust/src/day1.rs @@ -0,0 +1,61 @@ +fn solve_part_one(data: &str) -> u32 { + data.lines() + .map(|x| x.chars().filter(|ch| ch.is_digit(10)).collect::()) + .collect::>() + .iter() + .map(|x| { + format!("{}{}", x.chars().nth(0).unwrap(), x.chars().last().unwrap()) + .parse::() + .unwrap() + }) + .sum() +} + +fn solve_part_two(data: &str) -> u32 { + let nums = vec![ + ("one", "1"), + ("two", "2"), + ("three", "3"), + ("four", "4"), + ("five", "5"), + ("six", "6"), + ("seven", "7"), + ("eight", "8"), + ("nine", "9"), + ]; + let mut sum = 0; + for line in data.lines() { + let mut v = vec![]; + for (lit, dig) in nums.iter() { + if let Some(idx) = line.find(lit) { + v.push((idx, dig)); + } + if let Some(idx) = line.find(dig) { + v.push((idx, dig)); + } + let line_rev = line.chars().rev().collect::(); + let lit_rev = lit.chars().rev().collect::(); + if let Some(idx) = line_rev.find(lit_rev.as_str()) { + v.push((line_rev.len() - idx - lit_rev.len(), dig)); + } + if let Some(idx) = line_rev.find(dig) { + v.push((line_rev.len() - idx - 1, dig)); + } + } + v.sort(); + sum += format!("{}{}", v.first().unwrap().1, v.last().unwrap().1) + .parse::() + .unwrap(); + } + sum +} + +fn main() { + let test_1 = include_str!("../input/day1_1.test"); + let test_2 = include_str!("../input/day1_2.test"); + let prod = include_str!("../input/day1.prod"); + println!("part_1 test: {:?}", solve_part_one(test_1)); + println!("part_1 prod {:?}", solve_part_one(prod)); + println!("part_2 test: {:?}", solve_part_two(test_2)); + println!("part_2 prod {:?}", solve_part_two(prod)); +} -- cgit v1.2.3