Advent of Code 2021 day 4
12/04/2021, 5:00 AMDavid Whittaker
12/04/2021, 6:01 AMMarcin Wisniowski
12/04/2021, 6:11 AMpavi2410
12/04/2021, 6:48 AMcak
12/04/2021, 7:48 AMelizarov
12/04/2021, 9:20 AMPaul Woitaschek
12/04/2021, 9:57 AMJakob Löhnertz
12/04/2021, 10:08 AMMap
such that the marking of them can be done quickly (not that it matters).
https://github.com/The-Self-Taught-Software-Engineer/advent-of-code-2021/blob/master/src/main/kotlin/codes/jakob/aoc/Day04.ktephemient
12/04/2021, 10:23 AMMichael de Kaste
12/04/2021, 1:02 PMMichael Böiers
12/04/2021, 1:41 PMfun List<String>.day04(): Pair<Int, Int> {
val numbers = first().split(",").map { it.toInt() }
data class Pos(val x: Int, val y: Int)
data class Slot(val pos: Pos, val number: Int, var bingo: Boolean = false)
data class Board(val slots: List<Slot>)
fun Board.isBingo() = sequence {
for (i in 0..4) {
yield((0..4).map { Pos(i, it) })
yield((0..4).map { Pos(it, i) })
}
}.any { straight -> straight.all { pos -> slots.first { it.pos == pos }.bingo } }
var boards = drop(1).chunked(6) { lines ->
Board(slots = lines.drop(1).flatMapIndexed { y, row ->
row.trim().split(Regex("""\s+""")).mapIndexed { x, n -> Slot(Pos(x, y), n.toInt()) }
})
}
var winners = listOf<Int>()
for (pick in numbers) {
for (board in boards) {
board.slots.filter { it.number == pick }.forEach { it.bingo = true }
if (board.isBingo()) {
winners = winners + pick * board.slots.filterNot { it.bingo }.sumOf { it.number }
boards = boards - board
}
}
}
return winners.first() to winners.last()
}
todd.ginsberg
12/04/2021, 4:16 PMPaul Woitaschek
12/04/2021, 4:33 PMcak
12/04/2021, 4:34 PMtodd.ginsberg
12/04/2021, 4:35 PMMichael Böiers
12/04/2021, 6:33 PMPaul Woitaschek
12/04/2021, 6:38 PMephemient
12/04/2021, 6:44 PMMichael Böiers
12/04/2021, 6:53 PMDavid Whittaker
12/04/2021, 7:00 PMBig Chungus
12/04/2021, 9:40 PMphldavies
12/05/2021, 7:30 AMDan Fingal-Surma
12/05/2021, 9:03 AMPaul Woitaschek
12/05/2021, 9:09 AMDan Fingal-Surma
12/05/2021, 9:21 AMDan Fingal-Surma
12/05/2021, 10:02 AMMichael Böiers
12/05/2021, 10:03 AMMichael Böiers
12/05/2021, 10:10 AMDan Fingal-Surma
12/05/2021, 10:23 AMMarc Javier
12/05/2021, 10:40 PMMarc Javier
12/05/2021, 10:40 PMMarc Javier
12/05/2021, 10:41 PMephemient
12/05/2021, 11:22 PMcolBingoCheck(board, rIndex)
doesn't look right - that should be a column index, not a row indexMarc Javier
12/05/2021, 11:34 PMMarc Javier
12/05/2021, 11:36 PMDan Fingal-Surma
12/05/2021, 11:38 PMMarc Javier
12/06/2021, 12:28 AM