🎄Advent of Code - Day 3 part 2

This commit is contained in:
Denis-Cosmin Nutiu 2023-12-03 18:58:12 +02:00
parent 7d5c2834c2
commit 7a06f3bf01

View file

@ -3,6 +3,7 @@ package AdventOfCode2023.day3
import AdventOfCode.Puzzle import AdventOfCode.Puzzle
data class EnginePart(var number: Int, var row: Int, var startIndex: Int, var endIndex: Int) data class EnginePart(var number: Int, var row: Int, var startIndex: Int, var endIndex: Int)
data class Gear(var row: Int, val column: Int, var engineParts: MutableSet<EnginePart>)
class GearRatios : Puzzle { class GearRatios : Puzzle {
@ -98,7 +99,7 @@ class GearRatios : Puzzle {
override fun partTwo() { override fun partTwo() {
val inputData = this.readInputFromFile("3") val inputData = this.readInputFromFile("3")
val foundEngineParts: List<EnginePart> = scanForEnginePats(inputData) val foundEngineParts: List<EnginePart> = scanForEnginePats(inputData)
var gears: MutableList<MutableSet<EnginePart>> = mutableListOf() val gears: MutableList<Gear> = mutableListOf()
inputData.forEachIndexed { row, rowElement -> inputData.forEachIndexed { row, rowElement ->
rowElement.forEachIndexed { col, colElement -> rowElement.forEachIndexed { col, colElement ->
@ -114,7 +115,7 @@ class GearRatios : Puzzle {
Pair(col, row + 1), // bottom Pair(col, row + 1), // bottom
Pair(col - 1, row + 1) // left bottom Pair(col - 1, row + 1) // left bottom
) )
movesOfXY.forEach movesForeach@ { movesOfXY.forEach {
if ((it.second >= 0 && it.second < inputData.size) && (it.first >= 0 && it.first < inputData[it.second].length)) { if ((it.second >= 0 && it.second < inputData.size) && (it.first >= 0 && it.first < inputData[it.second].length)) {
val symbol = inputData[it.second][it.first] val symbol = inputData[it.second][it.first]
if (symbol.isDigit()) { if (symbol.isDigit()) {
@ -127,13 +128,13 @@ class GearRatios : Puzzle {
} }
} }
} }
gears.add(enginePartsForGear) gears.add(Gear(row, col, enginePartsForGear))
} }
} }
} }
gears.filter { it.size == 2 }.map { gears.filter { it.engineParts.size == 2 }.map {
it.map { it.number }.reduce { acc, i -> acc * i } it.engineParts.map { it.number }.reduce { acc, i -> acc * i }
}.sum().let { }.sum().let {
println("The gear ratio is $it") println("The gear ratio is $it")
} }