From a0f397e739c8811fe4ab321f0ff7927c25bd6113 Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Tue, 11 Dec 2018 14:29:21 +0100 Subject: day08 --- day08.rs | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 day08.rs (limited to 'day08.rs') diff --git a/day08.rs b/day08.rs new file mode 100644 index 0000000..7c8436a --- /dev/null +++ b/day08.rs @@ -0,0 +1,50 @@ +use std::fs::File; +use std::io::{BufRead,BufReader}; + +fn part1(v: &mut Vec) -> i32 { + let len = v[0]; + let mdl = v[1]; + + let mut data = v.split_off(2); + std::mem::swap(&mut data, v); + + let mut mds = (0..len).map(|_| part1(v)).sum::(); + + let mut mdata = v.split_off(mdl as usize); + std::mem::swap(&mut mdata, v); + + mds += mdata.iter().sum::(); + + return mds; +} + +fn part2(v: &mut Vec) -> i32 { + let len = v[0]; + let mdl = v[1]; + let mut data = v.split_off(2); + std::mem::swap(&mut data, v); + + let mds: Vec = (0..len).map(|_| part2(v)).collect(); + + let mut mdata = v.split_off(mdl as usize); + std::mem::swap(&mut mdata, v); + + if len == 0 { + mdata.iter().sum::() + } else { + mdata.iter().map(|i| mds.get(*i as usize-1).unwrap_or(&0)).sum::() + } +} + +fn main() { + let f = File::open("day08").unwrap(); + + let v: Vec = BufReader::new(&f).lines() + .next().unwrap() + .unwrap().split(" ") + .map(|n| n.parse().unwrap()) + .collect(); + + println!("{}", part1(&mut v.clone())); + println!("{}", part2(&mut v.clone())); +} -- cgit 1.4.1