diff options
| author | omagdy7 <omar.professional8777@gmail.com> | 2023-12-01 17:36:39 +0200 |
|---|---|---|
| committer | omagdy7 <omar.professional8777@gmail.com> | 2023-12-01 17:36:39 +0200 |
| commit | 47f8224ece055efe4748d65eb40fa0e6cd9483f5 (patch) | |
| tree | ee2463ade82073ae3b9a7863fe9b959846a62946 /2023/Rust/src | |
| parent | 0a507d6986d220b56c8e55c55b71fa7c4d560993 (diff) | |
| download | aoc-47f8224ece055efe4748d65eb40fa0e6cd9483f5.tar.xz aoc-47f8224ece055efe4748d65eb40fa0e6cd9483f5.zip | |
Day1 2023 done
Diffstat (limited to '2023/Rust/src')
| -rw-r--r-- | 2023/Rust/src/day1.rs | 61 |
1 files changed, 61 insertions, 0 deletions
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::<String>()) + .collect::<Vec<_>>() + .iter() + .map(|x| { + format!("{}{}", x.chars().nth(0).unwrap(), x.chars().last().unwrap()) + .parse::<u32>() + .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::<String>(); + let lit_rev = lit.chars().rev().collect::<String>(); + 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::<u32>() + .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)); +} |
