Neil Banman
12/04/2023, 5:56 PMfun String.getInts(): Sequence<Int>, which finds all the Ints in a String. Perfect for quick parsing of so many AoC inputs. Day4 uses line.getInts().drop(1). Often you don't need to even split your input into lines, just run getInts().chunked(n, ::transform).Neil Banman
12/04/2023, 6:03 PMprivate val intRx = Regex("""(?<!\d)-?\d+""")
fun String.getInts() = intRx.findAll(this).mapNotNull { it.value.toIntOrNull() }phldavies
12/04/2023, 6:56 PMfun String.splitIntsNotNull(vararg delimiters: String = arrayOf(" ")) = split(*delimiters).mapNotNull(String::toIntOrNull)Pawel Matysek
12/05/2023, 8:50 AMfun List<String>.chunkedByEmptyLine()Neil Banman
12/05/2023, 7:55 PMAndrei Kovalevsky
12/05/2023, 9:48 PMval (id, a, b) = card.findIntNumbers().splitBy(setOf(1, 11))Neil Banman
12/05/2023, 10:33 PMAndrei Kovalevsky
12/06/2023, 7:16 AMfun <T> List<T>.splitBy(idx: Set<Int>) = foldIndexed(mutableListOf<MutableList<T>>()) { i, list, v ->
if (idx.contains(i) || list.isEmpty()) list.add(mutableListOf(v)) else list.last().add(v)
list
}