diff --git a/src/euler93/Cargo.toml b/src/euler93/Cargo.toml new file mode 100644 index 0000000..d25de3e --- /dev/null +++ b/src/euler93/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "euler93" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/src/euler93/src/main.rs b/src/euler93/src/main.rs new file mode 100644 index 0000000..6c29e54 --- /dev/null +++ b/src/euler93/src/main.rs @@ -0,0 +1,64 @@ +type Num = f64; + +fn main() { + let digits = Digits(1., 2., 3., 4.); + + let mut all_possible_integers = digits.all_possible_integers(); + + all_possible_integers.sort(); + + let mut result = 0; + + for (i, num) in all_possible_integers.into_iter().enumerate() { + if i + 1 == num as usize { + result += 1; + } else { + break; + } + } +} + +struct Digits(Num, Num, Num, Num); + +impl Digits { + fn all_possible_integers(&self) -> Vec { + let a = self.0; + let b = self.1; + let c = self.2; + let d = self.3; + + let outcomes: Vec<_> = Operations::new() + .map(|f| f(a, b) as u32) + .filter(|i| *i > 0) + .collect(); + + dbg!(outcomes) + } +} + +struct Operations { + last: usize, +} + +impl Iterator for Operations { + type Item = Box Num>; + + fn next(&mut self) -> Option { + self.last += 1; + match self.last { + 1 => Some(Box::new(|l, r| l + r)), + 2 => Some(Box::new(|l, r| l - r)), + 3 => Some(Box::new(|l, r| r - l)), + 4 => Some(Box::new(|l, r| l * r)), + 5 => Some(Box::new(|l, r| l / r)), + 6 => Some(Box::new(|l, r| r / l)), + _ => None, + } + } +} + +impl Operations { + fn new() -> Self { + Self { last: 0 } + } +}