Day 6.
This commit is contained in:
parent
128ffbb10f
commit
2b3549c84c
56
src/aoc2025/Day06.kt
Normal file
56
src/aoc2025/Day06.kt
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
package aoc2025
|
||||||
|
|
||||||
|
import println
|
||||||
|
import readInput
|
||||||
|
import splitLongs
|
||||||
|
|
||||||
|
/*
|
||||||
|
--- Day 6: Trash Compactor ---
|
||||||
|
https://adventofcode.com/2025/day/6
|
||||||
|
*/
|
||||||
|
fun main() {
|
||||||
|
|
||||||
|
val inlineTestInput = """
|
||||||
|
123 328 51 64
|
||||||
|
45 64 387 23
|
||||||
|
6 98 215 314
|
||||||
|
* + * +
|
||||||
|
"""
|
||||||
|
|
||||||
|
fun part1(input: List<String>): Long {
|
||||||
|
val numbers = input.dropLast(1).map { it.splitLongs().toLongArray() }.toList()
|
||||||
|
val ops = input.last().split(" ").filter(String::isNotBlank)
|
||||||
|
return ops.withIndex().sumOf { (c, op) -> if (op == "+") numbers.sumOf { it[c] } else numbers.fold(1L) { acc, row -> acc * row[c] } }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun part2(input: List<String>): Long {
|
||||||
|
val numbers = ArrayList<LongArray>()
|
||||||
|
val maxLineLength = input.maxOf { it.length }
|
||||||
|
val spaceMask = BooleanArray(maxLineLength)
|
||||||
|
input.forEach { it.withIndex().filter { (_, ch) -> ch != ' ' }.forEach { (c, _) -> spaceMask[c] = true } }
|
||||||
|
val numColl = ArrayList<Long>()
|
||||||
|
for (c in 0 until maxLineLength) {
|
||||||
|
if (spaceMask[c]) numColl.add(input.dropLast(1).map { it[c] }.joinToString("").trim().toLong())
|
||||||
|
if (!spaceMask[c] || c == maxLineLength - 1) {
|
||||||
|
numbers.add(numColl.toLongArray())
|
||||||
|
numColl.clear()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return input.last().split(" ").filter(String::isNotBlank).withIndex()
|
||||||
|
.sumOf { (c, op) -> if (op == "+") numbers[c].sum() else numbers[c].fold(1L) { acc, row -> acc * row } }
|
||||||
|
}
|
||||||
|
|
||||||
|
// test if implementation meets criteria from the description, like:
|
||||||
|
val testInput = inlineTestInput.trim().reader().readLines()
|
||||||
|
//val testInput = readInput("aoc2025/Day06_test")
|
||||||
|
val testInputPart1Result = part1(testInput)
|
||||||
|
println("Part 1 Test: $testInputPart1Result")
|
||||||
|
val testInputPart2Result = part2(testInput)
|
||||||
|
println("Part 2 Test: $testInputPart2Result")
|
||||||
|
check(testInputPart1Result == 4277556L)
|
||||||
|
check(testInputPart2Result == 3263827L)
|
||||||
|
|
||||||
|
val input = readInput("aoc2025/Day06")
|
||||||
|
part1(input).println()
|
||||||
|
part2(input).println()
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user