clean
This commit is contained in:
parent
97334d34eb
commit
5c94aed258
@ -5,46 +5,27 @@ import be.vandewalleh.aoc.utils.input.Day
|
|||||||
|
|
||||||
@Day
|
@Day
|
||||||
class Day04 : BaseDay() {
|
class Day04 : BaseDay() {
|
||||||
private val parts by lazy { input.text.split("\n\n") }
|
private val numbers by lazy { input.lines.value[0].split(',').map { it.toInt() } }
|
||||||
private val numbers by lazy { parts[0].split(',').map { it.toInt() } }
|
|
||||||
private val boards by lazy {
|
private val boards by lazy {
|
||||||
parts.drop(1)
|
input.text.split("\n\n")
|
||||||
|
.drop(1)
|
||||||
.map { it.lines().map { it.trim().split("\\s+".toRegex()).map { it.toInt() } } }
|
.map { it.lines().map { it.trim().split("\\s+".toRegex()).map { it.toInt() } } }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun part1() = boards
|
private val results by lazy { boards.map { playBoard(it) } }
|
||||||
.map { playBoard(it, numbers) }
|
|
||||||
.minByOrNull { it.first }!!
|
|
||||||
.second
|
|
||||||
|
|
||||||
override fun part2() = boards
|
override fun part1() = results.minByOrNull { it.first }!!.second
|
||||||
.map { playBoard(it, numbers) }
|
override fun part2() = results.maxByOrNull { it.first }!!.second
|
||||||
.maxByOrNull { it.first }!!
|
|
||||||
.second
|
|
||||||
|
|
||||||
private fun playBoard(board: List<List<Int>>, numbers: List<Int>): Pair<Int, Int> {
|
private fun playBoard(board: List<List<Int>>): Pair<Int, Int> {
|
||||||
for (round in numbers.indices) {
|
for (round in numbers.indices) {
|
||||||
val usedNumbers = numbers.take(round)
|
val usedNumbers = numbers.take(round)
|
||||||
var winning = false
|
for (line in board + board[0].indices.map { col -> board.map { it[col] } }) {
|
||||||
for (line in board) {
|
|
||||||
if (usedNumbers.containsAll(line)) {
|
if (usedNumbers.containsAll(line)) {
|
||||||
winning = true
|
val unmarkedNumbers = board.flatten().toMutableSet().also { it.removeAll(usedNumbers) }
|
||||||
break
|
return round to unmarkedNumbers.sum() * usedNumbers.last()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!winning) {
|
|
||||||
for (i in board[0].indices) {
|
|
||||||
val column = board.map { it[i] }
|
|
||||||
if (usedNumbers.containsAll(column)) {
|
|
||||||
winning = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (winning) {
|
|
||||||
val unmarkedNumbers = board.flatten().toMutableSet().also { it.removeAll(usedNumbers) }
|
|
||||||
return round to unmarkedNumbers.sum() * usedNumbers.last()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
error("No wins")
|
error("No wins")
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user