Skip to content

Commit 7f5e51c

Browse files
committed
Solved day05 part 2
1 parent 062aa23 commit 7f5e51c

File tree

5 files changed

+25
-2
lines changed

5 files changed

+25
-2
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ plugins {
44

55
// project meta data
66
group 'de.havox_design.aoc2023'
7-
version '0.4.3'
7+
version '0.4.4'
88

99
// Switch to gradle "all" distribution.
1010
wrapper {

day05/src/main/kotlin/de/havox_design/aoc2023/day05/Almanac.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,24 @@ data class Almanac(val seeds: List<Long>, val maps: List<List<Triple<Long, Long,
55
seeds
66
.map { seed -> computeLocation(seed) }
77

8+
fun seedRangesToLowestLocation(): Long {
9+
var lowest = Long.MAX_VALUE
10+
val ranges = seeds
11+
.chunked(2)
12+
.map { it[0]..<it[0] + it[1] }
13+
14+
for (range in ranges) {
15+
for (i in range.first..range.last) {
16+
val location = computeLocation(i)
17+
if (location < lowest) {
18+
lowest = location
19+
}
20+
}
21+
}
22+
23+
return lowest
24+
}
25+
826
private fun computeLocation(seed: Long): Long {
927
var current = seed
1028

day05/src/main/kotlin/de/havox_design/aoc2023/day05/Day05.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ class Day05(private var filename: String) {
88
.min()
99

1010
fun solvePart2(): Long =
11-
46L
11+
getResourceAsText(filename)
12+
.let { row -> Almanac.from(row.filter(String::isNotBlank)) }
13+
.seedRangesToLowestLocation()
1214

1315
private fun getResourceAsText(path: String): List<String> =
1416
this.javaClass.classLoader.getResourceAsStream(path)!!.bufferedReader().readLines()

day05/src/main/kotlin/de/havox_design/aoc2023/day05/MainClass.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class MainClass {
77
val filename = "day05.txt"
88

99
println("Solution part 1: ${Day05(filename).solvePart1()}")
10+
println("Calculation of solution 2 may take some minutes...") // 9min 15sec on Ryzen 5700G
1011
println("Solution part 2: ${Day05(filename).solvePart2()}")
1112
}
1213
}

day05/src/test/kotlin/de/havox_design/aoc2023/day05/Day05Test.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package de.havox_design.aoc2023.day05
22

33
import org.junit.jupiter.api.Assertions.assertEquals
4+
import org.junit.jupiter.api.Disabled
45
import org.junit.jupiter.api.Test
56
import org.junit.jupiter.params.ParameterizedTest
67
import org.junit.jupiter.params.provider.Arguments
78
import org.junit.jupiter.params.provider.MethodSource
89
import java.util.stream.Stream
910

1011
class Day05Test {
12+
@Disabled("Long computation, 9min 15secs on Ryzen 7 5700G")
1113
@Test
1214
fun testMainClass() {
1315
MainClass.main(arrayOf())

0 commit comments

Comments
 (0)