Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #![feature(iterator_repeat_with)]
- use std::iter;
- fn rotating_window_sums<'a>(
- values: &'a [i32],
- size: usize,
- ) -> impl Iterator<Item = (i32, i32)> + 'a {
- let mut numbers = values.iter().cycle();
- let other_size = values.len() - size;
- iter::repeat_with(move || {
- let sum1: i32 = numbers.by_ref().take(size).sum();
- let sum2: i32 = numbers.by_ref().take(other_size).sum();
- // Skip one so the next iteration is offset by one
- numbers.next();
- (sum1, sum2)
- }).take(values.len())
- }
- fn main() {
- let d = [1, 2, 3, 4, 5, 6, 7, 8];
- let max = rotating_window_sums(&d, 3)
- .map(|(sum1, sum2)| i32::abs(3 * sum1 + 5 * sum2))
- .max();
- println!("{:?}", max);
- }
Add Comment
Please, Sign In to add comment