solution: day 5 + deps
This commit is contained in:
parent
22cf080338
commit
92d5b89623
7
Cargo.lock
generated
7
Cargo.lock
generated
@ -14,6 +14,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"itertools",
|
"itertools",
|
||||||
|
"md5",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -30,3 +31,9 @@ checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"either",
|
"either",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "md5"
|
||||||
|
version = "0.7.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
|
||||||
|
|||||||
@ -6,3 +6,4 @@ edition = "2021"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
anyhow = "1.0.93"
|
anyhow = "1.0.93"
|
||||||
itertools = "0.13.0"
|
itertools = "0.13.0"
|
||||||
|
md5 = "0.7.0"
|
||||||
|
|||||||
@ -2,7 +2,7 @@ pub mod d1;
|
|||||||
pub mod d2;
|
pub mod d2;
|
||||||
pub mod d3;
|
pub mod d3;
|
||||||
pub mod d4;
|
pub mod d4;
|
||||||
// pub mod d5;
|
pub mod d5;
|
||||||
// pub mod d6;
|
// pub mod d6;
|
||||||
// pub mod d7;
|
// pub mod d7;
|
||||||
// pub mod d8;
|
// pub mod d8;
|
||||||
|
|||||||
74
src/days/d5.rs
Normal file
74
src/days/d5.rs
Normal 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"))
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user