Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extern crate crypto;
- extern crate iterslide;
- use crypto::digest::Digest;
- use crypto::md5::Md5;
- use iterslide::SlideIterator;
- const SALT: &'static str = "ahsbgdzn";
- fn hash(salt: &str, n: u32, loops: usize) -> String {
- let mut md5 = Md5::new();
- md5.input_str(salt);
- md5.input_str(&n.to_string());
- let mut result = md5.result_str();
- for _ in 0..loops {
- md5.reset();
- md5.input_str(&result);
- result = md5.result_str();
- }
- result
- }
- fn threes(s: &str) -> Option<char> {
- s.chars().slide(3).find(|ss| ss[0] == ss[1] && ss[1] == ss[2]).map(|ss| ss[0])
- }
- fn has_five(s: &str, c: char) -> bool {
- s.chars().slide(5).any(|ss| ss.iter().all(|cc| c == *cc))
- }
- fn p14(salt: &str, mut index: u32, loops: usize) -> u32 {
- for v in (0..100000).map(|n| {
- let s = hash(salt, n, loops);
- (s, n)
- }).slide(1001).filter(|v| {
- if let Some(c) = threes(&v[0].0) {
- v.iter().skip(1).any(|&(ref k, _)| has_five(&k, c))
- } else {
- false
- }
- }) {
- if index == 0 {
- return v[0].1;
- } else {
- index -= 1;
- }
- }
- 0
- }
- fn main() {
- println!("P1 = {}", p14(SALT, 63, 0));
- println!("P2 = {}", p14(SALT, 63, 2016));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement