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