11package de.ronny_h.aoc.year2018.day11
22
33import de.ronny_h.aoc.AdventOfCode
4+ import de.ronny_h.aoc.extensions.grids.Coordinates
45import de.ronny_h.aoc.extensions.grids.Grid
56import de.ronny_h.aoc.extensions.numbers.digit
67
78fun main () = ChronalCharge ().run (" 34,13" , " " )
89
910class ChronalCharge : AdventOfCode <String >(2018 , 11 ) {
1011 // start: 11:59
11- override fun part1 (input : List <String >): String {
12- val grid = PowerCellGrid (input.single().toInt())
13- return grid.find3x3SquareWithLargestTotal()
14- }
12+ override fun part1 (input : List <String >): String =
13+ PowerCellGrid (input.single().toInt()).find3x3SquareWithLargestTotal()
1514
16- override fun part2 (input : List <String >): String {
17- return " "
18- }
15+ override fun part2 (input : List <String >): String =
16+ PowerCellGrid (input.single().toInt()).findSquareWithLargestTotal()
1917}
2018
2119class PowerCellGrid (serialNumber : Int ) : Grid<Int>(300 , 300 , -1000 ) {
@@ -29,19 +27,31 @@ class PowerCellGrid(serialNumber: Int) : Grid<Int>(300, 300, -1000) {
2927 }.last()
3028 }
3129
30+ fun findSquareWithLargestTotal (): String {
31+ val max = (1 .. 300 )
32+ .map { findSquareWithLargestTotalForSize(it) }
33+ .maxBy { it.total }
34+ return " ${max.coordinates.col} ,${max.coordinates.row} ,${max.size} " // X,Y,size
35+ }
36+
3237 fun find3x3SquareWithLargestTotal (): String {
33- val maxCoordinates = forEachCoordinates { coordinates, _ ->
34- val total = (0 .. 2 ).sumOf { i ->
35- (0 .. 2 ).sumOf { j ->
38+ val maxCoordinates = findSquareWithLargestTotalForSize(3 ).coordinates
39+ return " ${maxCoordinates.col} ,${maxCoordinates.row} " // X,Y
40+ }
41+
42+ private data class Square (val coordinates : Coordinates , val size : Int , val total : Int )
43+
44+ private fun findSquareWithLargestTotalForSize (squareSize : Int ): Square =
45+ forEachCoordinates { coordinates, _ ->
46+ val total = (0 .. < squareSize).sumOf { i ->
47+ (0 .. < squareSize).sumOf { j ->
3648 this [coordinates.row + i, coordinates.col + j]
3749 }
3850 }
39- coordinates to total
51+ Square ( coordinates, squareSize, total)
4052 }
41- .maxBy { it.second }
42- .first
43- return " ${maxCoordinates.col} ,${maxCoordinates.row} " // X,Y
44- }
53+ .maxBy { it.total }
54+
4555
4656 override fun Char.toElementType (): Int = digitToInt()
4757}
0 commit comments