add framework for 93 (WIP)

This commit is contained in:
Dr. Matthias Ratajczak
2023-06-20 15:47:02 +02:00
parent a47d72f8cc
commit e76f3199de
2 changed files with 72 additions and 0 deletions
+8
View File
@@ -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]
+64
View File
@@ -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<u32> {
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<dyn FnOnce(Num, Num) -> Num>;
fn next(&mut self) -> Option<Self::Item> {
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 }
}
}