1
0

Day14 2021

This commit is contained in:
Hubert Van De Walle 2021-12-14 22:46:54 +01:00
parent 76e670770e
commit eff95027de
3 changed files with 168 additions and 0 deletions

View File

@ -0,0 +1,36 @@
package be.vandewalleh.aoc.days
import be.vandewalleh.aoc.utils.BaseDay
import be.vandewalleh.aoc.utils.input.Day
@Day
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]) } }
fun <K> Map<K, Int>.toLong() = mapValues { it.value.toLong() }.toMutableMap()
// {NN=1, NC=1, CB=1}
val polymer = template.windowed(2).groupingBy { it }.eachCount().toLong()
// {N=2, C=1, ...}
val counts = template.groupingBy { it }.eachCount().toLong()
repeat(step) {
polymer.toMap().forEach { (pair, value) ->
val (left, right) = pairs[pair]!!
polymer[pair]?.let { old -> polymer[pair] = old - value }
polymer[left] = (polymer[left] ?: 0) + value
polymer[right] = (polymer[right] ?: 0) + value
counts[left[1]] = (counts[left[1]] ?: 0) + value
}
}
return counts.maxOf { it.value } - counts.minOf { it.value }
}
override fun part1() = run(10)
override fun part2() = run(40)
}

View File

@ -0,0 +1,102 @@
PHVCVBFHCVPFKBNHKNBO
HK -> F
VN -> S
NB -> F
HF -> B
CK -> N
VP -> B
HO -> P
NH -> N
CC -> N
FC -> P
OK -> S
OO -> P
ON -> C
VF -> B
NN -> O
KS -> P
FK -> K
HB -> V
SH -> O
OB -> K
PB -> V
BO -> O
NV -> K
CV -> H
PH -> H
KO -> B
BC -> B
KC -> B
SO -> P
CF -> V
VS -> F
OV -> N
NS -> K
KV -> O
OP -> O
HH -> C
FB -> S
CO -> K
SB -> K
SN -> V
OF -> F
BN -> F
CP -> C
NC -> H
VH -> S
HV -> V
NF -> B
SS -> K
FO -> F
VO -> H
KK -> C
PF -> V
OS -> F
OC -> H
SK -> V
FF -> H
PK -> N
PC -> O
SP -> B
CB -> B
CH -> H
FN -> V
SV -> O
SC -> P
NP -> B
BB -> S
PV -> S
VB -> P
SF -> H
VC -> O
HN -> V
BF -> O
NO -> O
HP -> N
VV -> K
HS -> P
FH -> N
KB -> F
KF -> B
PN -> K
KH -> K
CN -> S
PP -> O
BP -> O
OH -> B
FS -> O
BK -> B
PO -> V
CS -> C
BV -> N
KP -> O
KN -> B
VK -> F
HC -> O
BH -> B
FP -> H
NK -> V
BS -> C
FV -> F
PS -> P

View File

@ -0,0 +1,30 @@
package be.vandewalleh.aoc.days
class Day14Test : BaseDayTest() {
override val example = """
NNCB
CH -> B
HH -> N
CB -> H
NH -> C
HB -> C
HC -> B
HN -> C
NN -> C
BH -> H
NC -> B
NB -> B
BN -> B
BB -> N
BC -> B
CC -> N
CN -> C
""".trimIndent()
override val part1Example = 1588L
override val part1Answer = 3555L
override val part2Example = 2188189693529
override val part2Answer = 4439442043739
}