8000 Solve 2018 day 8 part 2 · sim642/adventofcode@7bd0760 · GitHub
[go: up one dir, main page]

Skip to content

Commit 7bd0760

Browse files
committed
Solve 2018 day 8 part 2
1 parent a373f85 commit 7bd0760

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

src/main/scala/eu/sim642/adventofcode2018/Day8.scala

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,18 @@ object Day8 {
66

77
def metadataSum(tree: Tree): Int = tree.childen.map(metadataSum).sum + tree.metadata.sum
88

9+
def value(tree: Tree): Int = {
10+
if (tree.childen.isEmpty)
11+
tree.metadata.sum
12+
else {
13+
tree.metadata
14+
.filter(i => 1 <= i && i <= tree.childen.length)
15+
.map(i => tree.childen(i - 1))
16+
.map(value)
17+
.sum
18+
}
19+
}
20+
921
def parseTree(seq: List[Int]): Tree = {
1022
def helper(seq: List[Int]): (Tree, List[Int]) = seq match {
1123
case childrenCount :: metadataCount :: tl =>
@@ -29,5 +41,6 @@ object Day8 {
2941

3042
def main(args: Array[String]): Unit = {
3143
println(metadataSum(parseTree(input)))
44+
println(value(parseTree(input)))
3245
}
3346
}

src/test/scala/eu/sim642/adventofcode2018/Day8Test.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,12 @@ class Day8Test extends FunSuite {
1414
test("Part 1 input answer") {
1515
assert(metadataSum(parseTree(input)) == 46578)
1616
}
17+
18+
test("Part 2 examples") {
19+
assert(value(parseTree(exampleInput)) == 66)
20+
}
21+
22+
test("Part 2 input answer") {
23+
assert(value(parseTree(input)) == 31251)
24+
}
1725
}

0 commit comments

Comments
 (0)
0