From 1d745a0855f7a1a8779aa78f569416ca884547f7 Mon Sep 17 00:00:00 2001 From: Hubert Van De Walle Date: Wed, 15 Dec 2021 01:07:10 +0100 Subject: [PATCH] Add Input.findAll --- 2021/src/main/kotlin/Day14.kt | 7 ++----- .../main/kotlin/be/vandewalleh/aoc/utils/input/Input.kt | 5 +++++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/2021/src/main/kotlin/Day14.kt b/2021/src/main/kotlin/Day14.kt index 133f971..c58a489 100644 --- a/2021/src/main/kotlin/Day14.kt +++ b/2021/src/main/kotlin/Day14.kt @@ -8,16 +8,13 @@ class Day14 : BaseDay() { private fun run(step: Int): Long { val template = input.lines.value.first() - // {CH=(CB, BH), NN=(NC, CN), ...} - val pairs = input.lines.value.drop(2) - .associate { it.split(" -> ").let { (a, b) -> a to (a[0] + b to b + a[1]) } } - + val pairs = input.findAll("(\\S+) -> (\\S)").associate { it[0] to it[1] } val polymer = Counter(template.windowed(2)) // {NN=1, NC=1, CB=1} val counts = Counter(template.toCharArray().toList()) // {N=2, C=1, ...} repeat(step) { polymer.forEach { (pair, value) -> - val (left, right) = pairs[pair]!! + val (left, right) = pairs[pair]!!.let { m -> pair[0] + m to m + pair[1] } polymer[pair] -= value polymer[left] += value polymer[right] += value diff --git a/utils/src/main/kotlin/be/vandewalleh/aoc/utils/input/Input.kt b/utils/src/main/kotlin/be/vandewalleh/aoc/utils/input/Input.kt index 06fb8c7..29d5f0c 100644 --- a/utils/src/main/kotlin/be/vandewalleh/aoc/utils/input/Input.kt +++ b/utils/src/main/kotlin/be/vandewalleh/aoc/utils/input/Input.kt @@ -1,11 +1,16 @@ package be.vandewalleh.aoc.utils.input +import org.intellij.lang.annotations.Language + class Input(private val value: String) { val text get() = value val lines get() = Mapper(value.lines()) val csv get() = Mapper(value.split(',')) + fun findAll(@Language("RegExp") re: String): List> = + re.toRegex().findAll(value).map { it.groupValues.drop(1) }.toList() + class Mapper(val value: List) { val ints get() = value.map { it.toInt() } val longs get() = value.map { it.toLong() }