diff --git a/data/examples/05.txt b/data/examples/05.txt new file mode 100644 index 0000000..8baef1b --- /dev/null +++ b/data/examples/05.txt @@ -0,0 +1 @@ +abc diff --git a/src/bin/05.rs b/src/bin/05.rs new file mode 100644 index 0000000..671f2ba --- /dev/null +++ b/src/bin/05.rs @@ -0,0 +1,56 @@ +advent_of_code::solution!(5); + +use md5; + + +fn get_char(data: &str) -> Option { + let digest = format!("{:x}", md5::compute(data)); + if digest.starts_with("00000") { + digest.chars().nth(5) + } else { + None + } +} + + +pub fn part_one(input: &str) -> Option { + let input = input + .strip_suffix("\n") + .unwrap_or(input); + let mut res: Vec = Vec::new(); + for x in 1.. { + if let Some(chr) = get_char(format!("{}{}", input, x).as_str()) { + println!("Found {:?} at index {:?}", chr, x); + res.push(chr); + if res.len() == 8 { + break; + } + } + if x > 100_000_000 { + break; + } + } + + Some(res.into_iter().collect()) +} + +pub fn part_two(input: &str) -> Option { + None +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_part_one() { + let result = part_one(&advent_of_code::template::read_file("examples", DAY)); + assert_eq!(result, Some("18f47a30".into())); + } + + #[test] + fn test_part_two() { + let result = part_two(&advent_of_code::template::read_file("examples", DAY)); + assert_eq!(result, None); + } +}