Compare commits

..

No commits in common. "92d5b896237ea3ff3bc3dd0db0df7da396d73399" and "1404c330c7a2fc647c7050b755681fefeff8a69d" have entirely different histories.

5 changed files with 3 additions and 83 deletions

7
Cargo.lock generated
View File

@ -14,7 +14,6 @@ version = "0.1.0"
dependencies = [
"anyhow",
"itertools",
"md5",
]
[[package]]
@ -31,9 +30,3 @@ checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
dependencies = [
"either",
]
[[package]]
name = "md5"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"

View File

@ -6,4 +6,3 @@ edition = "2021"
[dependencies]
anyhow = "1.0.93"
itertools = "0.13.0"
md5 = "0.7.0"

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;

View File

@ -43,7 +43,9 @@ fn _silver (data: &I) -> O {
fn _gold (data: &I) -> O {
*_solve(data).find(|(s, num)| {
let mut s = s.chars().collect_vec();
for c in s.iter_mut() {
match *c {
' ' => (),

View File

@ -1,74 +0,0 @@
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"))
}
}