Compare commits
2 Commits
07287a648d
...
d23a2207b5
Author | SHA1 | Date |
---|---|---|
chylex | d23a2207b5 | |
chylex | a75cbd15cc |
|
@ -0,0 +1 @@
|
|||
1,3,4,1,1,1,1,1,1,1,1,2,2,1,4,2,4,1,1,1,1,1,5,4,1,1,2,1,1,1,1,4,1,1,1,4,4,1,1,1,1,1,1,1,2,4,1,3,1,1,2,1,2,1,1,4,1,1,1,4,3,1,3,1,5,1,1,3,4,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,5,2,5,5,3,2,1,5,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,5,1,1,1,1,5,1,1,1,1,1,4,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,3,1,2,4,1,5,5,1,1,5,3,4,4,4,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,5,3,1,4,1,1,2,2,1,2,2,5,1,1,1,2,1,1,1,1,3,4,5,1,2,1,1,1,1,1,5,2,1,1,1,1,1,1,5,1,1,1,1,1,1,1,5,1,4,1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,5,4,5,1,1,1,1,1,1,1,5,1,1,3,1,1,1,3,1,4,2,1,5,1,3,5,5,2,1,3,1,1,1,1,1,3,1,3,1,1,2,4,3,1,4,2,2,1,1,1,1,1,1,1,5,2,1,1,1,2
|
|
@ -0,0 +1,54 @@
|
|||
import java.io.File
|
||||
import java.math.BigInteger
|
||||
import kotlin.system.measureTimeMillis
|
||||
|
||||
fun main() {
|
||||
val initialConfiguration = File("input/1.txt").readLines()
|
||||
.single()
|
||||
.split(',')
|
||||
.map(String::toInt)
|
||||
|
||||
println("(Took ${measureTimeMillis { part1(initialConfiguration) }} ms)")
|
||||
println("(Took ${measureTimeMillis { part2(initialConfiguration) }} ms)")
|
||||
}
|
||||
|
||||
class FishConfiguration(initialConfiguration: List<Int>) {
|
||||
private var fishCountByAge = Array(9) { age -> initialConfiguration.count { it == age }.toBigInteger() }
|
||||
private var day = 0
|
||||
|
||||
private val totalFish
|
||||
get() = fishCountByAge.fold(BigInteger.ZERO, BigInteger::add)
|
||||
|
||||
fun advance(days: Int) {
|
||||
for (day in 1..days) {
|
||||
advanceToNextDay()
|
||||
}
|
||||
}
|
||||
|
||||
private fun advanceToNextDay() {
|
||||
val newCountByAge = Array(9) { BigInteger.ZERO}
|
||||
|
||||
for ((age, count) in fishCountByAge.withIndex()) {
|
||||
if (age == 0) {
|
||||
newCountByAge[6] += count
|
||||
newCountByAge[8] += count
|
||||
}
|
||||
else {
|
||||
newCountByAge[age - 1] += count
|
||||
}
|
||||
}
|
||||
|
||||
fishCountByAge = newCountByAge
|
||||
++day
|
||||
|
||||
println("Day ${day.toString().padStart(3)}: $totalFish fish")
|
||||
}
|
||||
}
|
||||
|
||||
fun part1(initialConfiguration: List<Int>) {
|
||||
FishConfiguration(initialConfiguration).advance(80)
|
||||
}
|
||||
|
||||
fun part2(initialConfiguration: List<Int>) {
|
||||
FishConfiguration(initialConfiguration).advance(256)
|
||||
}
|
|
@ -35,3 +35,4 @@ The versions should not matter, but I used Visual Studio 2019 with `MSVC v142 (1
|
|||
| 2021 | 03 | Kotlin |
|
||||
| 2021 | 04 | Kotlin |
|
||||
| 2021 | 05 | Kotlin |
|
||||
| 2021 | 06 | Kotlin |
|
||||
|
|
|
@ -48,4 +48,5 @@ sourceSets {
|
|||
make(2021, 3)
|
||||
make(2021, 4)
|
||||
make(2021, 5)
|
||||
make(2021, 6)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue