add more code for 31 (WIP)

This commit is contained in:
Dr. Matthias Ratajczak
2022-08-17 17:55:23 +02:00
parent 74d2beef7d
commit af703a3271
+39 -4
View File
@@ -30,29 +30,54 @@ impl Node {
} }
} }
fn get_value(&self, index: usize) -> Option<&u8> {
self.values.get(index)
}
fn iter(&mut self) { fn iter(&mut self) {
if !self.nodes.is_empty() { if !self.nodes.is_empty() {
self.nodes.iter_mut().for_each(|n| n.iter()) self.nodes.iter_mut().for_each(|n| n.iter())
} else { } else {
let mut previous: Option<Values> = None; let mut previous: Option<Values> = None;
let mut offset = 0;
for (i, value) in self.values.iter().enumerate() { for (i, value) in self.values.iter().enumerate() {
let j = i * 2; let divided = divide_value(*value);
let half = value / 2; println!();
println!();
println!();
for combination in divided {
let mut new_vec; let mut new_vec;
if let Some(inner) = previous { if let Some(inner) = previous {
new_vec = inner.clone(); new_vec = inner.clone();
} else { } else {
new_vec = self.values.clone(); new_vec = self.values.clone();
}; };
println!();
println!("{}", i + offset);
println!("{new_vec:#?}");
println!("{combination:#?}");
new_vec[j] = half; new_vec.splice(i + offset..i + offset + 1, combination.clone());
new_vec.insert(j, half); println!("{new_vec:#?}");
previous = Some(new_vec.clone()); previous = Some(new_vec.clone());
debug_assert_eq!(new_vec.iter().sum::<u8>(), VALUE); debug_assert_eq!(new_vec.iter().sum::<u8>(), VALUE);
self.nodes.push(Node::new_vec(new_vec)); self.nodes.push(Node::new_vec(new_vec));
offset += combination.len() - 1;
} }
} }
} }
}
}
fn divide_value(x: u8) -> Vec<Values> {
if x == 200 {
vec![vec![100, 100]]
} else if x == 100 {
vec![vec![50, 50]]
} else {
// x == 50
vec![vec![20, 20, 10], vec![20, 10, 10, 10], vec![10; 5]]
}
} }
impl Index<usize> for Node { impl Index<usize> for Node {
@@ -90,5 +115,15 @@ mod test {
tree.iter(); tree.iter();
assert_eq!(tree.nodes[0][0].values, vec![50, 50, 100]); assert_eq!(tree.nodes[0][0].values, vec![50, 50, 100]);
assert_eq!(tree.nodes[0][1].values, vec![50; 4]); assert_eq!(tree.nodes[0][1].values, vec![50; 4]);
assert!(tree.nodes[0].get_value(2).is_none());
}
#[test]
fn test_iter_3() {
let mut tree = Node::new(200);
tree.iter();
tree.iter();
tree.iter();
assert_eq!(tree.nodes[0][0][0].values, vec![20, 20, 10, 50, 100]);
} }
} }