From 451a314af5fd3ed05939ef4e9ce545f7b4709704 Mon Sep 17 00:00:00 2001 From: Anson Date: Sat, 5 Nov 2022 16:35:12 -0600 Subject: [PATCH] Finish day 4 --- Cargo.lock | 9 +++++++++ Cargo.toml | 1 + src/day4.rs | 39 +++++++++++++++++++++++++++++++++++++++ src/main.rs | 2 ++ 4 files changed, 51 insertions(+) create mode 100644 src/day4.rs diff --git a/Cargo.lock b/Cargo.lock index 257a981..3e7f3c5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,3 +5,12 @@ version = 3 [[package]] name = "AoC2015" version = "0.1.0" +dependencies = [ + "md5", +] + +[[package]] +name = "md5" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" diff --git a/Cargo.toml b/Cargo.toml index 0538c5d..4b265ab 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,3 +6,4 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +md5 = "0.7.0" \ No newline at end of file diff --git a/src/day4.rs b/src/day4.rs new file mode 100644 index 0000000..268adec --- /dev/null +++ b/src/day4.rs @@ -0,0 +1,39 @@ +use md5; + +pub fn run() { + println!("Day 4:"); + let input = "yzbqklnj".to_string(); + + println!("\tPart 1: {}", part1(&input, 5)); + println!("\tPart 2: {}", part1(&input, 6)); +} + +fn part1(input: &String, zeros: usize) -> usize { + let mut key: usize = 0; + + let max_iter = 1e9 as usize; + loop { + let digest = md5::compute(format!("{}{}", input, key)); + + if format!("{:x},", digest).starts_with(&"0".repeat(zeros)) { + return key; + } + + key += 1; + + if key == max_iter { + return 0; + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_part_1() { + assert_eq!(part1(&"abcdef".to_string(), 5), 609043); + assert_eq!(part1(&"pqrstuv".to_string(), 5), 1048970); + } +} diff --git a/src/main.rs b/src/main.rs index 124f29e..ca15797 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,12 @@ mod day1; mod day2; mod day3; +mod day4; fn main() { println!("Running Advent of Code 2021"); day1::run(); day2::run(); day3::run(); + day4::run(); }