Skip to content

Commit 23c2336

Browse files
committed
Maybe solution 2018-11, part 2 (Chronal Charge)
... but it does not terminate in a reasonable time.
1 parent 9f6865c commit 23c2336

File tree

2 files changed

+27
-18
lines changed

2 files changed

+27
-18
lines changed
Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
11
package de.ronny_h.aoc.year2018.day11
22

33
import de.ronny_h.aoc.AdventOfCode
4+
import de.ronny_h.aoc.extensions.grids.Coordinates
45
import de.ronny_h.aoc.extensions.grids.Grid
56
import de.ronny_h.aoc.extensions.numbers.digit
67

78
fun main() = ChronalCharge().run("34,13", "")
89

910
class 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

2119
class 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
}

src/test/kotlin/de/ronny_h/aoc/year2018/day11/ChronalChargeTest.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ class ChronalChargeTest : StringSpec({
2626
ChronalCharge().part1(listOf("42")) shouldBe "21,61"
2727
}
2828

29-
"part 2" {
30-
val input = listOf("")
31-
ChronalCharge().part2(input) shouldBe ""
29+
"part 2: For grid serial number 18, the largest total square is 16x16 with a top-left corner of 90,269" {
30+
ChronalCharge().part2(listOf("18")) shouldBe "90,269,16"
3231
}
3332
})

0 commit comments

Comments
 (0)