From c82db83ef9a27b615c27f01a21d89e7f045ed2b8 Mon Sep 17 00:00:00 2001 From: "Dr. Matthias Ratajczak" Date: Wed, 17 Aug 2022 18:23:56 +0200 Subject: [PATCH] add more code for 31 (WIP) --- src/euler31/src/main.rs | 45 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/src/euler31/src/main.rs b/src/euler31/src/main.rs index d602d29..bd8ed7e 100644 --- a/src/euler31/src/main.rs +++ b/src/euler31/src/main.rs @@ -38,23 +38,41 @@ impl Node { if !self.nodes.is_empty() { self.nodes.iter_mut().for_each(|n| n.iter()) } else { - let mut previous: Option = None; + let mut previous: Option> = None; let mut offset = 0; for (i, value) in self.values.iter().enumerate() { let divided = divide_value(*value); + + let use_existing_data = previous.is_none(); println!(); println!(); println!(); 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!("{}", i); + println!("{}", i + offset); println!("{new_vec:#?}"); println!("{combination:#?}"); - new_vec.splice(i..i + 1, combination.clone()); + new_vec.splice(i + offset..i + offset + 1, combination.clone()); 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::(), VALUE); self.nodes.push(Node::new_vec(new_vec)); } @@ -124,5 +142,22 @@ mod test { tree.nodes[0][0][2].values, 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()) } }