day08 part 2
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
fn main() {
|
fn main() {
|
||||||
aoc_2018::tasks::day08::task1();
|
aoc_2018::tasks::day08::both();
|
||||||
// aoc_2018::tasks::day08::task2();
|
// aoc_2018::tasks::day08::task2();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
use crate::utils;
|
use crate::utils;
|
||||||
|
|
||||||
pub fn task1() {
|
pub fn both() {
|
||||||
let input: Vec<usize> = utils::read_file("input/day08.txt")
|
let input: Vec<usize> = utils::read_file("input/day08.txt")
|
||||||
.split(" ")
|
.split(" ")
|
||||||
.map(|x| x.parse().unwrap())
|
.map(|x| x.parse().unwrap())
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let (tree, rest) = Node::extract_from(&input);
|
let (tree, _) = Node::extract_from(&input);
|
||||||
println!("Metadata sum: {}", tree.metadata_sum());
|
println!("Metadata sum: {}", tree.metadata_sum());
|
||||||
println!("rest: {:?}", rest);
|
println!("Task2 sum: {}", tree.task2());
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Node {
|
struct Node {
|
||||||
@@ -44,4 +44,18 @@ impl Node {
|
|||||||
})
|
})
|
||||||
.sum::<usize>()
|
.sum::<usize>()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user