refactor 200 iterator
This commit is contained in:
@@ -6,12 +6,13 @@ use std::fs::File;
|
|||||||
use std::hash::Hash;
|
use std::hash::Hash;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use std::slice::Iter;
|
use std::slice::Iter;
|
||||||
|
use std::vec::IntoIter;
|
||||||
|
|
||||||
use num::FromPrimitive;
|
use num::FromPrimitive;
|
||||||
use num::Num;
|
use num::Num;
|
||||||
use num::ToPrimitive;
|
use num::ToPrimitive;
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct Primes<T> {
|
pub struct Primes<T> {
|
||||||
vector: Vec<T>,
|
vector: Vec<T>,
|
||||||
set: HashSet<T>,
|
set: HashSet<T>,
|
||||||
@@ -110,6 +111,10 @@ where
|
|||||||
pub fn into_vec(self) -> Vec<T> {
|
pub fn into_vec(self) -> Vec<T> {
|
||||||
self.vector
|
self.vector
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn to_cloned_iter(&self) -> IntoIter<T> {
|
||||||
|
self.vector.clone().into_iter()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|||||||
+14
-13
@@ -19,35 +19,36 @@ fn main() {
|
|||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
struct Squbes {
|
struct Squbes {
|
||||||
squbes: HashSet<u64>,
|
squbes: HashSet<u64>,
|
||||||
new_squbes: Vec<u64>,
|
primes: Primes<u64>,
|
||||||
primes: IntoIter<u64>,
|
primes_iter: IntoIter<u64>,
|
||||||
used_primes: Vec<u64>,
|
used_primes: Vec<u64>,
|
||||||
current_prime: u64,
|
current_prime: u64,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Squbes {
|
impl Squbes {
|
||||||
pub fn new(max: u64) -> Self {
|
pub fn new(max: u64) -> Self {
|
||||||
let mut primes = Primes::get_between(2, max).into_vec().into_iter();
|
let primes = Primes::get_between(2, max);
|
||||||
let first = primes.next().unwrap();
|
let mut primes_iter = primes.to_cloned_iter();
|
||||||
let second = primes.next().unwrap();
|
let first = primes_iter.next().unwrap();
|
||||||
|
let second = primes_iter.next().unwrap();
|
||||||
Self {
|
Self {
|
||||||
squbes: HashSet::new(),
|
squbes: HashSet::new(),
|
||||||
new_squbes: vec![],
|
|
||||||
primes,
|
primes,
|
||||||
|
primes_iter,
|
||||||
used_primes: vec![first],
|
used_primes: vec![first],
|
||||||
current_prime: second,
|
current_prime: second,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn iterate(&mut self) {
|
pub fn iterate(&mut self) {
|
||||||
self.calculate_squbes_with_current_prime();
|
let squbes = self.calculate_squbes_with_current_prime();
|
||||||
self.save_current_prime();
|
self.save_current_prime();
|
||||||
self.update_current_prime();
|
self.update_current_prime();
|
||||||
self.save_new_squbes();
|
self.save_new_squbes();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn save_new_squbes(&mut self) {
|
fn save_new_squbes(&mut self) {
|
||||||
self.squbes.extend(self.new_squbes.drain(0..));
|
todo!()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_output(&self) -> Vec<u64> {
|
pub fn get_output(&self) -> Vec<u64> {
|
||||||
@@ -61,13 +62,13 @@ impl Squbes {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn update_current_prime(&mut self) {
|
fn update_current_prime(&mut self) {
|
||||||
self.current_prime = self.primes.next().unwrap();
|
self.current_prime = self.primes_iter.next().unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn calculate_squbes_with_current_prime(&mut self) {
|
fn calculate_squbes_with_current_prime(&mut self) -> Vec<u64> {
|
||||||
let iter = get_iterator_over_pairs_both_ways(&self.used_primes, self.current_prime)
|
get_iterator_over_pairs_both_ways(&self.used_primes, self.current_prime)
|
||||||
.map(|(p, q)| Self::core(p, q));
|
.map(|(p, q)| Self::core(p, q))
|
||||||
self.new_squbes.extend(iter);
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn core(p: u64, q: u64) -> u64 {
|
fn core(p: u64, q: u64) -> u64 {
|
||||||
|
|||||||
Reference in New Issue
Block a user