From b2403336a5e0d457361ccc24ecaca1eafb985d11 Mon Sep 17 00:00:00 2001 From: Fabian Schmidt Date: Tue, 29 Oct 2024 14:00:12 +0100 Subject: [PATCH] y2015d10 --- y2015/src/bin/d10.rs | 14 +++++++++++ y2015/src/days/d10.rs | 57 +++++++++++++++++++++++++++++++++++++++++++ y2015/src/days/mod.rs | 1 + 3 files changed, 72 insertions(+) create mode 100644 y2015/src/bin/d10.rs create mode 100644 y2015/src/days/d10.rs diff --git a/y2015/src/bin/d10.rs b/y2015/src/bin/d10.rs new file mode 100644 index 0000000..9710707 --- /dev/null +++ b/y2015/src/bin/d10.rs @@ -0,0 +1,14 @@ +use y2015::days::d10; + +fn main() { + part1(); + part2(); +} + +fn part1() { + println!("{}", d10::process_part1("1321131112")); +} + +fn part2() { + println!("{}", d10::process_part2("1321131112")); +} diff --git a/y2015/src/days/d10.rs b/y2015/src/days/d10.rs new file mode 100644 index 0000000..876ed5a --- /dev/null +++ b/y2015/src/days/d10.rs @@ -0,0 +1,57 @@ +pub fn process_part1(input: &str) -> u32 { + let mut number = input.to_string(); + for _ in 0..40 { + number = look_and_say(&number); + } + number.len() as u32 +} + +pub fn process_part2(input: &str) -> u32 { + let mut number = input.to_string(); + for _ in 0..50 { + number = look_and_say(&number); + } + number.len() as u32 +} + +fn look_and_say(number: &str) -> String { + let mut new_number = String::new(); + let mut last_char = 'x'; + let mut char_counter = 1; + for (idx, char) in number.chars().enumerate() { + if char == last_char { + char_counter += 1; + } else { + if idx != 0 { + new_number.push_str(format!("{char_counter}").as_str()); + new_number.push(last_char); + } + last_char = char; + char_counter = 1; + } + if idx == number.len() - 1 { + new_number.push_str(format!("{char_counter}").as_str()); + new_number.push(char); + } + } + new_number +} + +#[cfg(test)] +mod tests_10 { + use super::*; + + #[test] + fn it_works() { + let result = look_and_say("1"); + assert_eq!(result, "11".to_string()); + let result = look_and_say("11"); + assert_eq!(result, "21".to_string()); + let result = look_and_say("21"); + assert_eq!(result, "1211".to_string()); + let result = look_and_say("1211"); + assert_eq!(result, "111221".to_string()); + let result = look_and_say("111221"); + assert_eq!(result, "312211".to_string()); + } +} diff --git a/y2015/src/days/mod.rs b/y2015/src/days/mod.rs index 68906bd..ab0515c 100644 --- a/y2015/src/days/mod.rs +++ b/y2015/src/days/mod.rs @@ -1,4 +1,5 @@ pub mod d1; +pub mod d10; pub mod d2; pub mod d3; pub mod d4;