Day14 2021
This commit is contained in:
parent
76e670770e
commit
eff95027de
36
2021/src/main/kotlin/Day14.kt
Normal file
36
2021/src/main/kotlin/Day14.kt
Normal 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)
|
||||||
|
}
|
||||||
102
2021/src/main/resources/day14.txt
Normal file
102
2021/src/main/resources/day14.txt
Normal 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
|
||||||
30
2021/src/test/kotlin/Day14Test.kt
Normal file
30
2021/src/test/kotlin/Day14Test.kt
Normal 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
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user