-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDay7.kt
25 lines (22 loc) · 913 Bytes
/
Day7.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.io.File
fun main() {
solve("src/main/resources/day7sample.txt", Int::distanceTo)
solve("src/main/resources/day7.txt", Int::distanceTo)
solve("src/main/resources/day7sample.txt", Int::crabFuelTo)
solve("src/main/resources/day7.txt", Int::crabFuelTo)
}
fun getBoundsOnNumbers(list: List<Int>) = ((list.minOrNull()?:0)..(list.maxOrNull()?:0))
fun Int.distanceTo(destination: Int) = maxOf(this, destination)-minOf(this, destination)
fun Int.crabFuelTo(destination: Int) = this.distanceTo(destination).let { (it*(it+1))/2 }
private fun solve(inputFile: String, fuelCalc: Int.(Int)->Int) {
File(inputFile).readLines().first()
.split(",")
.map { it.toInt() }
.let { crabs ->
getBoundsOnNumbers(crabs).map { h ->
crabs.sumOf { c -> c.fuelCalc(h) }
}
}
.minByOrNull { it }
.apply { println(this) }
}