Advent of Code 2023 day 12
12/12/2025, 5:00 AMKroppeb
12/12/2025, 5:48 AMDan Fingal-Surma
12/12/2025, 6:04 AMvanshg
12/12/2025, 6:10 AMDan Fingal-Surma
12/12/2025, 6:11 AMDan Fingal-Surma
12/12/2025, 6:11 AMDan Fingal-Surma
12/12/2025, 6:14 AMvanshg
12/12/2025, 6:24 AMDan Fingal-Surma
12/12/2025, 6:35 AMDan Fingal-Surma
12/12/2025, 6:43 AMDan Fingal-Surma
12/12/2025, 6:43 AMMichael de Kaste
12/12/2025, 6:46 AMMichael de Kaste
12/12/2025, 6:46 AMDan Fingal-Surma
12/12/2025, 6:48 AMDan Fingal-Surma
12/12/2025, 6:49 AMDan Fingal-Surma
12/12/2025, 6:55 AMDan Fingal-Surma
12/12/2025, 6:56 AMJakub Gwóźdź
12/12/2025, 7:03 AMphldavies
12/12/2025, 7:04 AM@AoKSolution
object Day12 {
context(input: PuzzleInput)
fun trees() =
input.lines.mapNotNull {
if (it.indexOf('x') != 2) return@mapNotNull null
val dims = it.substringBefore(':').split('x').let { (a, b) -> a.toInt() to b.toInt() }
val presents = it.substringAfter(' ').split(' ').map(String::toInt)
dims to presents
}
context(_: PuzzleInput)
fun part1() = trees().count { (dims, presents) -> presents.sum() * 9 <= dims.first * dims.second }
}Jakub Gwóźdź
12/12/2025, 7:05 AMdata class Region(val w: Int, val h: Int, val counts: List<Int>) {
fun pack(shapes: List<Shape>): Boolean {
if (counts.sum() <= (w / 3) * (h / 3)) return true
.debug { "Trivially fits by count" }
if (shapes.zip(counts).sumOf { (s, n) -> n * s.size } > h * w) return false
.debug { "Too much area needed" }
val toGo = shapes.flatMapIndexed { index, shape -> List(counts[index]) { shape } }
.debug { "To go: ${it.size} shapes" }
TODO("Implement packing algorithm")
}
}
I'm so sad I'll never do this TODO()Dan Fingal-Surma
12/12/2025, 7:07 AMDan Fingal-Surma
12/12/2025, 7:10 AMJakub Gwóźdź
12/12/2025, 7:22 AMdata class(val size: Int =7)
• rotating and flipping shapes
• pretty printing of shapes with all possible rotation/flipping cases, for debug purposes
• half of the placement logic
well, sorry to let it go, but:Dan Fingal-Surma
12/12/2025, 7:24 AMJakub Gwóźdź
12/12/2025, 7:25 AMDan Fingal-Surma
12/12/2025, 7:26 AMJakub Gwóźdź
12/12/2025, 7:27 AMMarcin Wisniowski
12/12/2025, 7:28 AMMarcin Wisniowski
12/12/2025, 7:29 AMphldavies
12/12/2025, 7:32 AM@AoKSolution
object Day12Min {
context(_: PuzzleInput)
fun part1() = lines.count {
if('x' !in it) return@count false
val ints = it.split("x", ": ", " ").map(String::toInt)
ints.let { (x, y) -> x * y } >= ints.subList(2, ints.size).sum() * 9
}
}
?Marcin Wisniowski
12/12/2025, 7:33 AMJakub Gwóźdź
12/12/2025, 7:34 AMcounts.sum() <= (w / 3) * (h / 3)Michael de Kaste
12/12/2025, 7:39 AMJakub Gwóźdź
12/12/2025, 7:39 AMJakub Gwóźdź
12/12/2025, 7:40 AMsumOf(9::times) is such an abomination 🙂Michael de Kaste
12/12/2025, 7:40 AMphldavies
12/12/2025, 9:55 AMfun main() = println(generateSequence(::readLine).count {
Regex("\\D").split(it).mapNotNull(String::toIntOrNull)
.run { size == 8 && let { (a, b) -> a * b / 9 >= sum() - a - b } }
})
"6 7" tokens fits the current zeitgeist nicely. I'll stop there.Kai Yuan
12/12/2025, 10:41 AM...
'x' in it && it.split(Regex("\\D+")).map { it.toInt() }
...Endre Deak
12/12/2025, 3:20 PMbj0
12/12/2025, 6:19 PMbj0
12/12/2025, 6:19 PMJakub Gwóźdź
12/12/2025, 6:20 PMbj0
12/12/2025, 6:24 PMEndre Deak
12/12/2025, 6:34 PMJaap Beetstra
12/15/2025, 9:51 AM