Skip to content

Commit ecdb599

Browse files
2015 day 12 part 2
1 parent 3ed51c9 commit ecdb599

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

Diff for: 2015/kotlin/build.gradle.kts

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ repositories {
1616
}
1717

1818
dependencies {
19-
testImplementation(kotlin("test"))
19+
implementation("org.jetbrains.kotlinx", "kotlinx-serialization-json", "1.6.2")
2020

21+
testImplementation(kotlin("test"))
2122
testImplementation("org.junit.jupiter", "junit-jupiter-params", junitVersion)
2223
testImplementation("org.amshove.kluent", "kluent", "1.68")
2324
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
11
package nl.sanderp.aoc.aoc2015.day12
22

3+
import kotlinx.serialization.json.*
34
import nl.sanderp.aoc.common.readResource
45

5-
fun findNumbers(input: String) = Regex("""[0-9\-]+""").findAll(input).map { it.value.toInt() }
6+
fun sumNumbers(element: JsonElement) = sumNumbers(element) { false }
7+
8+
fun sumNumbers(element: JsonElement, ignoreObject: (JsonObject) -> Boolean): Int = when {
9+
element is JsonPrimitive -> element.intOrNull ?: 0
10+
element is JsonArray -> element.sumOf { sumNumbers(it, ignoreObject) }
11+
element is JsonObject && !ignoreObject(element) -> element.values.sumOf { sumNumbers(it, ignoreObject) }
12+
else -> 0
13+
}
614

715
fun main() {
8-
val input = readResource("Day12.txt")
9-
println("Part one: ${findNumbers(input).sum()}")
16+
val input = Json.decodeFromString<JsonElement>(readResource("Day12.txt"))
17+
println("Part one: ${sumNumbers(input)}")
18+
println("Part two: ${sumNumbers(input) { it.containsValue(JsonPrimitive("red")) }}")
1019
}

0 commit comments

Comments
 (0)