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
}