refactor 200 iterator

This commit is contained in:
Dr. Matthias Ratajczak
2022-09-28 15:19:25 +02:00
parent 5100bfea49
commit 4f9d64a987
+19 -14
View File
@@ -13,7 +13,7 @@ fn main() {
squbes.iterate();
squbes.iterate();
squbes.iterate();
println!("{:?}", squbes.output());
println!("{:?}", squbes.get_output());
}
#[derive(Debug)]
@@ -43,9 +43,14 @@ impl Squbes {
self.calculate_squbes_with_current_prime();
self.save_current_prime();
self.update_current_prime();
self.save_new_squbes();
}
pub fn output(&self) -> Vec<u64> {
fn save_new_squbes(&mut self) {
self.squbes.extend(self.new_squbes.drain(0..));
}
pub fn get_output(&self) -> Vec<u64> {
let mut result: Vec<_> = self.squbes.iter().copied().collect();
result.sort_unstable();
result
@@ -60,18 +65,7 @@ impl Squbes {
}
fn calculate_squbes_with_current_prime(&mut self) {
assert_ne!(self.current_prime, 0);
let iter = self
.used_primes
.iter()
.copied()
.zip([self.current_prime].into_iter().cycle())
.chain(
[self.current_prime]
.into_iter()
.cycle()
.zip(self.used_primes.iter().copied()),
)
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);
}
@@ -80,3 +74,14 @@ impl Squbes {
p.pow(2) * q.pow(3)
}
}
fn get_iterator_over_pairs_both_ways(
vec: &[u64],
value: u64,
) -> impl Iterator<Item = (u64, u64)> + '_ {
iterate_vec_and_scalar(vec, value).flat_map(|(x, y)| [(x, y), (y, x)].into_iter())
}
fn iterate_vec_and_scalar(vec: &[u64], value: u64) -> impl Iterator<Item = (u64, u64)> + '_ {
vec.iter().copied().zip([value].into_iter().cycle())
}