add more code for 31 (WIP)
This commit is contained in:
+40
-5
@@ -38,23 +38,41 @@ impl Node {
|
|||||||
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<Vec<Values>> = None;
|
||||||
let mut offset = 0;
|
let mut offset = 0;
|
||||||
for (i, value) in self.values.iter().enumerate() {
|
for (i, value) in self.values.iter().enumerate() {
|
||||||
let divided = divide_value(*value);
|
let divided = divide_value(*value);
|
||||||
|
|
||||||
|
let use_existing_data = previous.is_none();
|
||||||
println!();
|
println!();
|
||||||
println!();
|
println!();
|
||||||
println!();
|
println!();
|
||||||
for (j, combination) in divided.iter().enumerate() {
|
for (j, combination) in divided.iter().enumerate() {
|
||||||
let mut new_vec = self.values.clone();
|
let mut new_vec;
|
||||||
|
let offset;
|
||||||
|
if use_existing_data {
|
||||||
|
println!("existing");
|
||||||
|
new_vec = self.values.clone();
|
||||||
|
offset = 0;
|
||||||
|
} else {
|
||||||
|
println!("previous");
|
||||||
|
new_vec = previous.as_ref().unwrap()[j].clone();
|
||||||
|
offset = new_vec.len() - self.values.len();
|
||||||
|
}
|
||||||
println!();
|
println!();
|
||||||
println!("{}", i);
|
println!("{}", i + offset);
|
||||||
println!("{new_vec:#?}");
|
println!("{new_vec:#?}");
|
||||||
println!("{combination:#?}");
|
println!("{combination:#?}");
|
||||||
|
|
||||||
new_vec.splice(i..i + 1, combination.clone());
|
new_vec.splice(i + offset..i + offset + 1, combination.clone());
|
||||||
println!("{new_vec:#?}");
|
println!("{new_vec:#?}");
|
||||||
previous = Some(new_vec.clone());
|
if previous.is_none() {
|
||||||
|
previous = Some(vec![new_vec.clone()]);
|
||||||
|
} else {
|
||||||
|
let mut new = previous.unwrap().clone();
|
||||||
|
new.push(new_vec.clone());
|
||||||
|
previous = Some(new);
|
||||||
|
}
|
||||||
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));
|
||||||
}
|
}
|
||||||
@@ -124,5 +142,22 @@ mod test {
|
|||||||
tree.nodes[0][0][2].values,
|
tree.nodes[0][0][2].values,
|
||||||
vec![10, 10, 10, 10, 10, 50, 100]
|
vec![10, 10, 10, 10, 10, 50, 100]
|
||||||
);
|
);
|
||||||
|
assert_eq!(
|
||||||
|
tree.nodes[0][0][3].values,
|
||||||
|
vec![20, 20, 10, 20, 20, 10, 100]
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
tree.nodes[0][0][4].values,
|
||||||
|
vec![20, 10, 10, 10, 20, 10, 10, 10, 100]
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
tree.nodes[0][0][5].values,
|
||||||
|
vec![10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 100]
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
tree.nodes[0][0][6].values,
|
||||||
|
vec![10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 50, 50]
|
||||||
|
);
|
||||||
|
println!("{}", tree.nodes[0][0].nodes.len())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user