refactor 200 iterator

This commit is contained in:
Dr. Matthias Ratajczak
2022-09-28 15:26:23 +02:00
parent 4f9d64a987
commit b305da92d0
2 changed files with 20 additions and 14 deletions
+6 -1
View File
@@ -6,12 +6,13 @@ use std::fs::File;
use std::hash::Hash;
use std::io::Write;
use std::slice::Iter;
use std::vec::IntoIter;
use num::FromPrimitive;
use num::Num;
use num::ToPrimitive;
#[derive(Clone)]
#[derive(Clone, Debug)]
pub struct Primes<T> {
vector: Vec<T>,
set: HashSet<T>,
@@ -110,6 +111,10 @@ where
pub fn into_vec(self) -> Vec<T> {
self.vector
}
pub fn to_cloned_iter(&self) -> IntoIter<T> {
self.vector.clone().into_iter()
}
}
#[cfg(test)]
+14 -13
View File
@@ -19,35 +19,36 @@ fn main() {
#[derive(Debug)]
struct Squbes {
squbes: HashSet<u64>,
new_squbes: Vec<u64>,
primes: IntoIter<u64>,
primes: Primes<u64>,
primes_iter: IntoIter<u64>,
used_primes: Vec<u64>,
current_prime: u64,
}
impl Squbes {
pub fn new(max: u64) -> Self {
let mut primes = Primes::get_between(2, max).into_vec().into_iter();
let first = primes.next().unwrap();
let second = primes.next().unwrap();
let primes = Primes::get_between(2, max);
let mut primes_iter = primes.to_cloned_iter();
let first = primes_iter.next().unwrap();
let second = primes_iter.next().unwrap();
Self {
squbes: HashSet::new(),
new_squbes: vec![],
primes,
primes_iter,
used_primes: vec![first],
current_prime: second,
}
}
pub fn iterate(&mut self) {
self.calculate_squbes_with_current_prime();
let squbes = self.calculate_squbes_with_current_prime();
self.save_current_prime();
self.update_current_prime();
self.save_new_squbes();
}
fn save_new_squbes(&mut self) {
self.squbes.extend(self.new_squbes.drain(0..));
todo!()
}
pub fn get_output(&self) -> Vec<u64> {
@@ -61,13 +62,13 @@ impl Squbes {
}
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) {
let iter = get_iterator_over_pairs_both_ways(&self.used_primes, self.current_prime)
.map(|(p, q)| Self::core(p, q));
self.new_squbes.extend(iter);
fn calculate_squbes_with_current_prime(&mut self) -> Vec<u64> {
get_iterator_over_pairs_both_ways(&self.used_primes, self.current_prime)
.map(|(p, q)| Self::core(p, q))
.collect()
}
fn core(p: u64, q: u64) -> u64 {