diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index ea45c85..ef64a73 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -3,6 +3,8 @@ import day2.Day2 import day2.Hand fun main() { - println("Day 1: ${Day1.answerOne()} && ${Day1.answerTwo()}") - println("Day 2: ${Day2.sumOfCompatibleGames("src/main/resources/day2/input.txt", Hand(12,13,14))}") + println("Day 1-1: ${Day1.answerOne()}") + println("Day 1-2: ${Day1.answerTwo()}") + println("Day 2-1: ${Day2.sumOfCompatibleGames("src/main/resources/day2/input.txt", Hand(12,13,14))}") + println("Day 2-2: ${Day2.powerOfMinimumSetOfCubes("src/main/resources/day2/input.txt")}") } \ No newline at end of file diff --git a/src/main/kotlin/day2/Day2.kt b/src/main/kotlin/day2/Day2.kt index aaf5710..49fda87 100644 --- a/src/main/kotlin/day2/Day2.kt +++ b/src/main/kotlin/day2/Day2.kt @@ -9,6 +9,10 @@ object Day2 { .map(Game::id) .sum() + fun powerOfMinimumSetOfCubes(file: String) = readGames(file) + .map(Game::powerOfHands) + .sum() + private fun readGames(file: String): List = File(file) .readLines() @@ -17,15 +21,20 @@ object Day2 { } data class Game(val id: Int, val hands: List) { + + fun isCompatibleWith(hand: Hand) = - hand.fitsIn( - hands.fold(Hand(0, 0, 0)) { currentMax: Hand, next: Hand -> - Hand( - maxOf(currentMax.red, next.red), - maxOf(currentMax.green, next.green), - maxOf(currentMax.blue, next.blue) - ) - }) + hand.fitsIn(maxOfHands()) + + fun powerOfHands() = maxOfHands().let { it.red * it.green * it.blue } + + private fun maxOfHands() = hands.fold(Hand(0, 0, 0)) { currentMax: Hand, next: Hand -> + Hand( + maxOf(currentMax.red, next.red), + maxOf(currentMax.green, next.green), + maxOf(currentMax.blue, next.blue) + ) + } companion object { diff --git a/src/test/kotlin/day2/Day2Test.kt b/src/test/kotlin/day2/Day2Test.kt index 751550e..c7cf506 100644 --- a/src/test/kotlin/day2/Day2Test.kt +++ b/src/test/kotlin/day2/Day2Test.kt @@ -5,7 +5,12 @@ import org.junit.jupiter.api.Test class Day2Test { @Test - fun readGames() { + fun sumOfCompatibleGames() { assert(Day2.sumOfCompatibleGames("src/test/resources/day2/input.txt", Hand(12, 13, 14)) == 8) } + + @Test + fun powerOfMinimumSetOfCubes() { + assert(Day2.powerOfMinimumSetOfCubes("src/test/resources/day2/input.txt") == 2286) + } } \ No newline at end of file