From 32f6018b933595c4a0f25391c42d7612704fe6fb Mon Sep 17 00:00:00 2001 From: timeshifter Date: Sat, 27 Jun 2026 14:47:05 +0200 Subject: [PATCH] add day 5 --- day05/Cargo.lock | 16 +++++++++++ day05/Cargo.toml | 7 +++++ day05/src/main.rs | 69 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+) create mode 100644 day05/Cargo.lock create mode 100644 day05/Cargo.toml create mode 100644 day05/src/main.rs diff --git a/day05/Cargo.lock b/day05/Cargo.lock new file mode 100644 index 0000000..f4f478a --- /dev/null +++ b/day05/Cargo.lock @@ -0,0 +1,16 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "day05" +version = "0.1.0" +dependencies = [ + "md5", +] + +[[package]] +name = "md5" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae960838283323069879657ca3de837e9f7bbb4c7bf6ea7f1b290d5e9476d2e0" diff --git a/day05/Cargo.toml b/day05/Cargo.toml new file mode 100644 index 0000000..775a62e --- /dev/null +++ b/day05/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "day05" +version = "0.1.0" +edition = "2024" + +[dependencies] +md5 = "0.8" diff --git a/day05/src/main.rs b/day05/src/main.rs new file mode 100644 index 0000000..e2f1cb1 --- /dev/null +++ b/day05/src/main.rs @@ -0,0 +1,69 @@ +use std::io::Write; + +#[cfg(debug_assertions)] +const INPUT: &str = "abc"; +#[cfg(not(debug_assertions))] +const INPUT: &str = "cxdnnyjw"; +// const INPUT: &str = "abc"; + +fn main() { + part1(); + + println!(); + + part2(); +} + +fn part2() { + let mut result = [' '; 8]; + + for i in 0_i64.. { + let s = format!("{INPUT}{i}"); + let digest = md5::compute(s); + + let result_string = format!("{:x}", digest); + + if result_string.chars().take(5).all(|c| c == '0') { + let mut chars = result_string.chars(); + let the_position = chars.nth(5).unwrap(); + let the_char = chars.next().unwrap(); + + if ('0'..'8').contains(&the_position) { + let position = the_position.to_string().parse::().unwrap(); + if result[position] == ' ' { + result[position] = the_char; + println!("{}", result.iter().collect::()); + } + } + if !result.contains(&' ') { + break; + } + }; + } + println!(); +} + +fn part1() { + let mut result = vec![]; + for i in 0_i64.. { + let s = format!("{INPUT}{i}"); + let digest = md5::compute(s); + + let result_string = format!("{:x}", digest); + + if let Some(the_char) = result_string + .chars() + .take(5) + .all(|c| c == '0') + .then(|| result_string.chars().nth(5).unwrap()) + { + print!("{the_char}"); + std::io::stdout().flush().unwrap(); + result.push(the_char); + if result.len() == 8 { + break; + } + }; + } + println!(); +}