Skip to content

Instantly share code, notes, and snippets.

@crumblingstatue
Created December 7, 2015 18:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save crumblingstatue/861db8576a155fb35053 to your computer and use it in GitHub Desktop.
Save crumblingstatue/861db8576a155fb35053 to your computer and use it in GitHub Desktop.
extern crate md5;
fn find_number<F: Fn(md5::Digest) -> bool>(key: &str, predicate: F) -> u32 {
for n in 0.. {
let s = format!("{}{}", key, n);
let digest = md5::compute(s.as_bytes());
if predicate(digest) {
return n;
}
}
unreachable!()
}
fn first_5_zeroes(digest: md5::Digest) -> bool {
digest[0] == 0 && digest[1] == 0 && digest[2] <= 0xF
}
fn first_6_zeroes(digest: md5::Digest) -> bool {
digest[0] == 0 && digest[1] == 0 && digest[2] == 0
}
#[test]
fn test_find_number() {
assert_eq!(find_number("abcdef", first_5_zeroes), 609043);
assert_eq!(find_number("pqrstuv", first_5_zeroes), 1048970);
}
fn main() {
const SECRET_KEY: &'static str = "ckczppom";
println!("The number is {}", find_number(SECRET_KEY, first_5_zeroes));
println!("For first 6 zeroes: {}",
find_number(SECRET_KEY, first_6_zeroes));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment