diff --git a/src/main.rs b/src/main.rs index 8214579..706a25e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,7 @@ use std::fmt::Display; use clap::{Parser, Subcommand}; mod one; +mod two; #[derive(Parser, Default)] struct GlobalArgs {} diff --git a/src/two.rs b/src/two.rs new file mode 100644 index 0000000..8b5d231 --- /dev/null +++ b/src/two.rs @@ -0,0 +1,37 @@ +use crate::{GlobalArgs, Problem}; + +#[derive(clap::Parser)] +pub struct Args { + #[clap(default_value = "4000000")] + until: u64, +} + +impl Problem for Args { + type Solution = u64; + + fn solve(self, _: GlobalArgs) -> color_eyre::Result { + let mut a = 1; + let mut b = 2; + let mut sum = b; + + while b < self.until { + (a, b) = (b, a + b); + if b % 2 == 0 { + sum += b; + } + } + + Ok(sum) + } +} + +#[cfg(test)] +#[test] +fn rsp() { + assert_eq!( + Args { until: 4000000 } + .solve(GlobalArgs::default()) + .unwrap(), + 4613732 + ); +}