From ac6662445d1a07905e182bf7ee064a101ac327ae Mon Sep 17 00:00:00 2001 From: Dylan Thies Date: Fri, 1 Dec 2023 22:27:47 -0500 Subject: [PATCH] Day 1 done --- day-1/src/lib.rs | 1 - day-1/src/main.rs | 2 +- day-1/src/part1.rs | 29 +++++++++++++++---- day-1/src/part2.rs | 70 ++++++++++++++++++++++++---------------------- 4 files changed, 62 insertions(+), 40 deletions(-) diff --git a/day-1/src/lib.rs b/day-1/src/lib.rs index 71b200f..faaf542 100644 --- a/day-1/src/lib.rs +++ b/day-1/src/lib.rs @@ -1,3 +1,2 @@ - pub mod part1; pub mod part2; diff --git a/day-1/src/main.rs b/day-1/src/main.rs index e7f9daf..52f4bcd 100644 --- a/day-1/src/main.rs +++ b/day-1/src/main.rs @@ -5,7 +5,7 @@ use day_1::part2::part2; fn main() { let input = include_str!("./input.txt"); - let (_,part1_result) = part1(input).unwrap(); + let (_, part1_result) = part1(input).unwrap(); println!("part 1: {part1_result}"); let part2_result = part2(input); println!("part 2: {part2_result}"); diff --git a/day-1/src/part1.rs b/day-1/src/part1.rs index 791bbf7..0aa69ec 100644 --- a/day-1/src/part1.rs +++ b/day-1/src/part1.rs @@ -1,14 +1,32 @@ -use nom::{multi::{separated_list1}, self, character::complete::{alphanumeric1, newline}}; +use nom::{ + self, + character::complete::{alphanumeric1, newline}, + multi::separated_list1, +}; -pub fn part1(input: &str) -> nom::IResult<&str,String> { +pub fn part1(input: &str) -> nom::IResult<&str, String> { let (_, values) = parse_input(input)?; println!("{values:?}"); - Ok(("", values.iter().map(|v| v.first().unwrap() * 10 + v.last().unwrap() ).sum::().to_string())) + Ok(( + "", + values + .iter() + .map(|v| v.first().unwrap() * 10 + v.last().unwrap()) + .sum::() + .to_string(), + )) } fn parse_input(input: &str) -> nom::IResult<&str, Vec>> { let (i, j) = separated_list1(newline, alphanumeric1)(input)?; - let res = j.iter().map(|v| v.chars().filter_map(|x| x.to_digit(10)).collect::>()).collect::>>(); + let res = j + .iter() + .map(|v| { + v.chars() + .filter_map(|x| x.to_digit(10)) + .collect::>() + }) + .collect::>>(); Ok((i, res)) } @@ -25,4 +43,5 @@ treb7uchet"; fn part1_works() { let (_, result) = part1(INPUT).unwrap(); assert_eq!(result, "142".to_string()); -}} + } +} diff --git a/day-1/src/part2.rs b/day-1/src/part2.rs index cf0a436..17d2275 100644 --- a/day-1/src/part2.rs +++ b/day-1/src/part2.rs @@ -1,43 +1,46 @@ - pub fn part2(input: &str) -> String { let values = input.lines().map(parse_line).collect::>>(); println!("{values:?}"); - values.iter().map(|v| v.first().unwrap() * 10 + v.last().unwrap() ).sum::().to_string() + values + .iter() + .map(|v| v.first().unwrap() * 10 + v.last().unwrap()) + .sum::() + .to_string() } fn parse_line(line: &str) -> Vec { - (0..line.len()).filter_map(|index| { - let reduced_line = &line[index..]; - let result = if reduced_line.starts_with("one") { - Some(1) - } else if reduced_line.starts_with("two"){ - Some(2) - } else if reduced_line.starts_with("three"){ - Some(3) - } else if reduced_line.starts_with("four"){ - Some(4) - } else if reduced_line.starts_with("five"){ - Some(5) - } else if reduced_line.starts_with("six"){ - Some(6) - } else if reduced_line.starts_with("seven"){ - Some(7) - } else if reduced_line.starts_with("eight"){ - Some(8) - } else if reduced_line.starts_with("nine"){ - Some(9) - } else if reduced_line.starts_with("zero"){ - Some(0) - } else { - reduced_line.chars().next().unwrap().to_digit(10) - }; + (0..line.len()) + .filter_map(|index| { + let reduced_line = &line[index..]; + let result = if reduced_line.starts_with("one") { + Some(1) + } else if reduced_line.starts_with("two") { + Some(2) + } else if reduced_line.starts_with("three") { + Some(3) + } else if reduced_line.starts_with("four") { + Some(4) + } else if reduced_line.starts_with("five") { + Some(5) + } else if reduced_line.starts_with("six") { + Some(6) + } else if reduced_line.starts_with("seven") { + Some(7) + } else if reduced_line.starts_with("eight") { + Some(8) + } else if reduced_line.starts_with("nine") { + Some(9) + } else if reduced_line.starts_with("zero") { + Some(0) + } else { + reduced_line.chars().next().unwrap().to_digit(10) + }; - result - - }).collect() + result + }) + .collect() } - #[cfg(test)] mod test { use super::*; @@ -52,6 +55,7 @@ zoneight234 #[test] fn part2_works() { - let result = part2(INPUT); + let result = part2(INPUT); assert_eq!(result, "281".to_string()); -}} + } +}