#![feature(conservative_impl_trait)] extern crate failure; #[macro_use] extern crate lazy_static; use std::io::{self, Read}; use failure::Error; mod day_01; mod day_02; mod day_03; mod day_04; mod day_05; struct Generator { value: usize, factor: usize, } impl Iterator for Generator { type Item = usize; fn next(&mut self) -> Option { self.value *= self.factor; self.value %= 2147483647; Some(self.value) } } fn main() { let mut a = Generator{value: 679, factor: 16807}; let mut b = Generator{value: 771, factor: 48271}; let answer = a.filter(|a| a % 4 == 0).zip(b.filter(|b| b % 8 == 0)) .take(5_000_000) .filter(|&(a,b)| a & 0b1111111111111111 == b & 0b1111111111111111) .count(); println!("{}", answer); // p a.zip(b).take(40_000_000).with_index.count {|(a,b),i| // p i if i % 1_000_000 == 0 // a.to_s(2)[-16,16] == b.to_s(2)[-16,16] // } // if let Err(e) = run() { // eprintln!("{}", e); // } } fn run() -> Result<(), Error> { let mut input = String::new(); io::stdin().read_to_string(&mut input)?; let solution = day_05::solve(&input)?; println!("{}", solution); Ok(()) }