solution: day 5 + deps

This commit is contained in:
YK committed 2024-11-19 23:53:38 +03:00
1 parent 22cf080338
commit 92d5b89623
4 files changed
+83 -1

No files matched your search

+1 -1
View File
@@ -2,7 +2,7 @@ pub mod d1;
pub mod d2;
pub mod d3;
pub mod d4;
// pub mod d5;
pub mod d5;
// pub mod d6;
// pub mod d7;
// pub mod d8;
+74
View File
@@ -0,0 +1,74 @@
use crate::prelude::*;
pub type I = &'static str;
pub type O = String;
fn _silver (data: I) -> O {
let mut s = s!("");
for i in 0.. {
let st = format!("{data}{i}");
let hash = md5::compute(st);
let repr = format!("{:x}", hash);
if repr.starts_with("00000") {
s.push_str(&repr[5..=5]);
if s.len() == 8 {
break;
}
}
}
s
}
fn _gold (data: I) -> O {
let mut s = ['\0'; 8];
for i in 0.. {
let st = format!("{data}{i}");
let hash = md5::compute(st);
let repr = format!("{:x}", hash);
if repr.starts_with("00000") {
let idx = (&repr[5..=5]).parse::<usize>().unwrap_or(usize::MAX);
let val = (&repr[6..=6]).chars().next().unwrap();
if idx < s.len() && s[idx] == '\0' {
s[idx] = val;
}
if s.iter().all(|&e| e != '\0') { break; }
}
}
s.into_iter().collect()
}
#[cfg(test)]
mod test {
use super::*;
fn read () -> I {
"abbhdwsy"
}
#[test]
fn silver () {
let data = read();
let ans = _silver(data);
assert_eq!(ans, s!("801b56a7"))
}
#[test]
fn gold () {
let data = read();
let ans = _gold(data);
assert_eq!(ans, s!("424a0197"))
}
}