refactor 200 iterator
This commit is contained in:
+19
-14
@@ -13,7 +13,7 @@ fn main() {
|
|||||||
squbes.iterate();
|
squbes.iterate();
|
||||||
squbes.iterate();
|
squbes.iterate();
|
||||||
squbes.iterate();
|
squbes.iterate();
|
||||||
println!("{:?}", squbes.output());
|
println!("{:?}", squbes.get_output());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@@ -43,9 +43,14 @@ impl Squbes {
|
|||||||
self.calculate_squbes_with_current_prime();
|
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
let mut result: Vec<_> = self.squbes.iter().copied().collect();
|
||||||
result.sort_unstable();
|
result.sort_unstable();
|
||||||
result
|
result
|
||||||
@@ -60,18 +65,7 @@ impl Squbes {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn calculate_squbes_with_current_prime(&mut self) {
|
fn calculate_squbes_with_current_prime(&mut self) {
|
||||||
assert_ne!(self.current_prime, 0);
|
let iter = get_iterator_over_pairs_both_ways(&self.used_primes, self.current_prime)
|
||||||
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()),
|
|
||||||
)
|
|
||||||
.map(|(p, q)| Self::core(p, q));
|
.map(|(p, q)| Self::core(p, q));
|
||||||
self.new_squbes.extend(iter);
|
self.new_squbes.extend(iter);
|
||||||
}
|
}
|
||||||
@@ -80,3 +74,14 @@ impl Squbes {
|
|||||||
p.pow(2) * q.pow(3)
|
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())
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user