🎄Advent of Code - Day 6 ✨part 2
This commit is contained in:
parent
eb3c41807d
commit
4d189a1a28
3 changed files with 47 additions and 4 deletions
41
src/main/kotlin/AdventOfCode2023/day6/WaitForIt.kt
Normal file
41
src/main/kotlin/AdventOfCode2023/day6/WaitForIt.kt
Normal file
|
@ -0,0 +1,41 @@
|
|||
package AdventOfCode2023.day6
|
||||
|
||||
import AdventOfCode.Puzzle
|
||||
import java.util.stream.Collectors
|
||||
|
||||
data class Race(val raceTime: Long, val distance: Long)
|
||||
class WaitForIt : Puzzle("2023", "6") {
|
||||
|
||||
fun getRaceTimesPart1(): List<Race> {
|
||||
return inputData.map {
|
||||
// Split on spaces, ignore first item, transform tokens to integers
|
||||
it.split(Regex("\\s")).drop(1).map { it.trim().toLongOrNull() }.filterNotNull()
|
||||
}.zipWithNext().map {
|
||||
// Take the zipped lines (since we only have 2) and transform them into races.
|
||||
it.first.mapIndexed { index, i -> Race(i, it.second[index])}
|
||||
}.flatten().also { println("The input is $it") }
|
||||
}
|
||||
|
||||
override fun partOne() {
|
||||
val raceTimes = getRaceTimesPart1().map {
|
||||
// here we transform a race into a list of all the possible combinations that we can have
|
||||
(1..<it.raceTime).map { time -> Race((it.raceTime - time)* time, it.distance) }
|
||||
}.parallelStream().map {
|
||||
// Here we filter out the losing races
|
||||
it.filter { it.raceTime > it.distance }.count()
|
||||
}.reduce { acc, i -> acc * i }.get()
|
||||
|
||||
println("The number of ways the record was beaten $raceTimes.")
|
||||
}
|
||||
|
||||
override fun partTwo() {
|
||||
listOf(Race(49787980, 298118510661181)).map {
|
||||
// here we transform a race into a list of all the possible combinations that we can have
|
||||
(1..<it.raceTime).toList().parallelStream().map { time -> Race((it.raceTime - time)* time, it.distance) }.collect(
|
||||
Collectors.toList())
|
||||
}.map {
|
||||
// Here we filter out the losing races
|
||||
it.parallelStream().filter { it.raceTime > it.distance }.count()
|
||||
}.reduce { acc, i -> acc * i }.also { println("The number of ways the record was beaten $it.") }
|
||||
}
|
||||
}
|
|
@ -1,10 +1,10 @@
|
|||
import AdventOfCode2023.day4.Scratchcards
|
||||
import AdventOfCode2023.day6.WaitForIt
|
||||
import kotlin.system.measureTimeMillis
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val t = Scratchcards()
|
||||
// t.partOne()
|
||||
val t = WaitForIt()
|
||||
val time = measureTimeMillis {
|
||||
// t.partOne()
|
||||
t.partTwo()
|
||||
}
|
||||
println("Took $time ms.")
|
||||
|
|
2
src/main/resources/aoc2023/input_day6.txt
Normal file
2
src/main/resources/aoc2023/input_day6.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Time: 49787980
|
||||
Distance: 298118510661181
|
Loading…
Reference in a new issue