From d84e3bff271d88a443426032f3f741d5254e8d13 Mon Sep 17 00:00:00 2001 From: Johannes Schaefer Date: Sun, 9 Dec 2018 21:34:43 +0100 Subject: [PATCH] day08 part 2 --- src/main.rs | 2 +- src/tasks/day08.rs | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index deb4dcf..509a72b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ fn main() { - aoc_2018::tasks::day08::task1(); + aoc_2018::tasks::day08::both(); // aoc_2018::tasks::day08::task2(); } diff --git a/src/tasks/day08.rs b/src/tasks/day08.rs index d604e8b..e78cee6 100644 --- a/src/tasks/day08.rs +++ b/src/tasks/day08.rs @@ -1,14 +1,14 @@ use crate::utils; -pub fn task1() { +pub fn both() { let input: Vec = utils::read_file("input/day08.txt") .split(" ") .map(|x| x.parse().unwrap()) .collect(); - let (tree, rest) = Node::extract_from(&input); + let (tree, _) = Node::extract_from(&input); println!("Metadata sum: {}", tree.metadata_sum()); - println!("rest: {:?}", rest); + println!("Task2 sum: {}", tree.task2()); } struct Node { @@ -44,4 +44,18 @@ impl Node { }) .sum::() } + + fn task2(&self) -> usize { + if self.children.len() > 0 { + self.metadata + .iter() + .map(|meta| match self.children.get(*meta - 1) { + Some(child) => child.task2(), + None => 0, + }) + .sum() + } else { + self.metadata_sum() + } + } }