diff --git a/src/main/kotlin/day06/Day06.kt b/src/main/kotlin/day06/Day06.kt index f501905..a78bd1c 100644 --- a/src/main/kotlin/day06/Day06.kt +++ b/src/main/kotlin/day06/Day06.kt @@ -20,7 +20,9 @@ object Day06 { } fun part2(lines: List): Int { - return lines.size + val document = RacesDocument.fromStringWithoutSpaces(lines) + document.println() + return document.calculateMarginOfError() } } @@ -47,11 +49,11 @@ data class RacesDocument(val races: List) { val times = filteredLines[0].removePrefix(TIME_PREFFIX) .split(' ') .filter { it.isNotBlank() } - .map { it.toInt() } + .map { it.toLong() } val distances = filteredLines[1].removePrefix(DISTANCE_PREFFIX) .split(' ') .filter { it.isNotBlank() } - .map { it.toInt() } + .map { it.toLong() } check(times.size == distances.size) { "Invalid input not same amount of time records than distance records: $times vs $distances"} @@ -63,12 +65,28 @@ data class RacesDocument(val races: List) { return RacesDocument(races) } + + fun fromStringWithoutSpaces(lines: List): RacesDocument { + val filteredLines = lines.filter { it.isNotBlank() } + check(filteredLines.size == 2) { "Invalid input, it should be only 2 lines: $filteredLines"} + check(filteredLines[0].startsWith(TIME_PREFFIX)) { "Invalid input, 1st line doesn't start with 'Time': ${filteredLines[0]}"} + check(filteredLines[1].startsWith(DISTANCE_PREFFIX)) { "Invalid input, 2nd line doesn't start with 'Distance;: ${filteredLines[1]}"} + + val time = filteredLines[0].removePrefix(TIME_PREFFIX) + .replace(" ", "") + .toLong() + val distance = filteredLines[1].removePrefix(DISTANCE_PREFFIX) + .replace(" ", "") + .toLong() + + return RacesDocument(listOf(Race(time, distance))) + } } } -data class Race(val time: Int, val distance: Int) { - fun calculateAchievableDistances(): List { - val achievableDistances: MutableList = ArrayList() +data class Race(val time: Long, val distance: Long) { + fun calculateAchievableDistances(): List { + val achievableDistances: MutableList = ArrayList() for (i in 0..time) { val chargingTime = i val runningTime = time - i @@ -82,7 +100,7 @@ data class Race(val time: Int, val distance: Int) { fun calculateWaysToWin(): Int { val achievableDistances = calculateAchievableDistances() val waysToWin = achievableDistances.indices.filter { achievableDistances[it] > distance } - println("For race: $this,\n\tachievableDistances: $achievableDistances,\n\twaysToWin: ${waysToWin.size} - $waysToWin") + //println("For race: $this,\n\tachievableDistances: $achievableDistances,\n\twaysToWin: ${waysToWin.size} - $waysToWin") return waysToWin.size } } diff --git a/src/test/kotlin/day06/Day06Test.kt b/src/test/kotlin/day06/Day06Test.kt index ee00687..397bc36 100644 --- a/src/test/kotlin/day06/Day06Test.kt +++ b/src/test/kotlin/day06/Day06Test.kt @@ -14,6 +14,6 @@ class Day06Test { @Test fun part2() { - assertEquals(2, Day06.part2(testInput)) + assertEquals(71503, Day06.part2(testInput)) } } \ No newline at end of file