refactor 200 iterator
This commit is contained in:
+19
-14
@@ -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())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user