import ./common, std/[sequtils, algorithm, sugar, sets, strformat, strutils, tables] proc parse(input: Lines): (string, Table[(char, char), char]) = result[0] = input[0] for i in 2.. ") result[1][(c[0][0], c[0][1])] = c[1][0] proc steps(input: Lines, steps: uint): uint64 = var (polymer, combis) = input.parse var pCounter = initTable[(char, char), uint64]() var cCounter = initTable[char, uint64]() for k in combis.keys: pCounter[k] = 0 cCounter[k[0]] = 0 cCounter[k[1]] = 0 inc cCounter[polymer[0]] for i in 1.. 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 """.strip().split('\n').mapIt(it.strip) doDayX 14, n => n.loadInput, (i) => steps(i, 10), (i) => steps(i, 40), (input, 1588'u64, 2188189693529'u64)