From 085d6eb1b6bb18b3214c5902208a533f025d143d Mon Sep 17 00:00:00 2001 From: nekineki Date: Sat, 9 Dec 2023 06:59:42 +0100 Subject: day09 --- 2023/day09.rs | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 2023/day09.rs (limited to '2023/day09.rs') diff --git a/2023/day09.rs b/2023/day09.rs new file mode 100644 index 0000000..68037d5 --- /dev/null +++ b/2023/day09.rs @@ -0,0 +1,57 @@ +use std::fs::File; +use std::io::Read; + +fn diff(arr: &Vec) -> Vec { + arr.iter() + .zip(arr.iter().skip(1)) + .map(|(x, y)| y - x) + .collect() +} + +fn main() { + // let filename = "in/day09.ref"; + let filename = "in/day09.pzl"; + + let mut f = File::open(filename).expect("cannot open file"); + let mut content = String::new(); + f.read_to_string(&mut content).expect("cannot read file"); + let lines = content.trim_end().split('\n'); + // println!("{:?}", lines); + + let mut inp: Vec> = Vec::new(); + for line in lines { + let l: Vec = line.split(' ').map(|x| x.parse().unwrap()).collect(); + inp.push(l); + } + + let mut res1 = 0; + let mut res2 = 0; + + for nums in inp.iter() { + let mut desc: Vec> = Vec::new(); + desc.push(nums.clone()); + let mut d = diff(&nums); + desc.push(d.clone()); + while d.iter().filter(|x| **x != 0).collect::>().len() != 0 { + d = diff(&d); + desc.push(d.clone()); + } + + let mut a: i64 = *desc[desc.len() - 2].last().unwrap(); + for i in 0..desc.len() - 2 { + a = *desc[desc.len() - 3 - i].last().unwrap() + a; + } + res1 += a; + + let mut b: i64 = desc[desc.len() - 2][0]; + for i in 0..desc.len() - 2 { + b = desc[desc.len() - 3 - i][0] - b; + } + res2 += b; + } + + println!("res1: {}", res1); + println!("res2: {}", res2); + assert_eq!(res1, 1938800261); + assert_eq!(res2, 1112); +} -- cgit v1.2.3