From 8f3bb2cd58bb94464fc07f85433b0352abed9594 Mon Sep 17 00:00:00 2001 From: b1ek Date: Tue, 1 Aug 2023 14:40:45 +1000 Subject: [PATCH] add POWSolver --- src/gen.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/gen.rs b/src/gen.rs index df3e301..96e780f 100644 --- a/src/gen.rs +++ b/src/gen.rs @@ -15,6 +15,41 @@ impl POWRange { } } +pub struct POWSolver { + challenge: POWChallenge +} + +impl POWSolver { + + /** + * Solve chunk with feedback. + * Feedback is a function that is being + * called at each iteration of a loop, + * which will be useful for progressbars + * and visual feedback. + * + * Example: + * ```rust + let challenge = POWChallenge::make(POWRange::new(0, 16)); + let num = POWSolver::new(challenge).chunk_solve_feedback(0, 16, |x| println!("{}", x)).unwrap(); + println!("Found number: {}", num) + * ``` + */ + pub fn chunk_solve_feedback(self: &POWSolver, start: u128, end: u128, callback: fn(u128)) -> Option { + for i in start..end { + callback(i); + if self.challenge.check(i.into()) { + return Some(i); + } + } + None + } + + pub fn new(challenge: POWChallenge) -> POWSolver { + POWSolver { challenge } + } +} + #[derive(Debug, Clone)] pub struct POWChallenge { hash: [u8; 32],