From 2b3549c84c322f618b3ac797696df518a6834384 Mon Sep 17 00:00:00 2001 From: chrisly42 Date: Sat, 6 Dec 2025 06:46:07 +0100 Subject: [PATCH] Day 6. --- src/aoc2025/Day06.kt | 56 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/aoc2025/Day06.kt diff --git a/src/aoc2025/Day06.kt b/src/aoc2025/Day06.kt new file mode 100644 index 0000000..d8ae69e --- /dev/null +++ b/src/aoc2025/Day06.kt @@ -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): 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): Long { + val numbers = ArrayList() + 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() + 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() +}