// This only works if your offset is bigger than half the length of your data… fn run_big_fft(data: &[char], iterations: usize, offset: usize) -> String { let mut curr: Vec = data .iter() .skip(offset) .map(|&i| i.to_digit(10).unwrap() as i32) .collect(); for _ in 0..iterations { let mut next: Vec = vec![]; let mut sum: i32 = curr.iter().sum(); for elem in curr { next.push((sum % 10).abs()); sum -= elem; } curr = next; } curr.into_iter().map(|x| x.to_string()).take(8).collect() } fn process_data_b(data: &str) -> String { let offset: usize = data[0..7].parse().unwrap(); run_big_fft( &data.chars().collect::>().repeat(10_000), 100, offset, ) }