This commit is contained in:
Daniel Flanagan 2021-12-10 01:34:19 -06:00
parent 54d110bddb
commit 7552c3ea12
Signed by: lytedev
GPG key ID: 5B2020A0F9921EF4

View file

@ -1,45 +1,31 @@
import ./common, std/[strutils, sequtils, strformat, sugar, sets, math, algorithm, tables] import ./common, std/[strutils, sequtils, algorithm, sugar, tables]
const p = {'(': ')', '[': ']', '{': '}', '<': '>'}.toTable() const pairs = toTable {'(': ')', '[': ']', '{': '}', '<': '>'}
const t = {')': 3, ']': 57, '}': 1197, '>': 25137}.toTable() const corruptPoints = toTable {')': 3, ']': 57, '}': 1197, '>': 25137}
proc p1(s: seq[string]): int =
var stack: seq[char] = @[]
for l in s:
for c in l:
if p.hasKey(c): stack.add(p[c])
else:
if stack.pop() != c: result += t[c]
const v = {')': 1, ']': 2, '}': 3, '>': 4}.toTable() proc parse(input: seq[string]): (int, int) =
proc p2(s: seq[string]): int = var cmps = newSeq[int]()
var scores: seq[int] = @[] for line in input:
for l in s:
var score = 0
var stack: seq[char] = @[] var stack: seq[char] = @[]
for c in l: for ch in line:
if p.hasKey(c): stack.add(p[c]) if pairs.hasKey ch: stack.add pairs[ch]
else: elif stack.pop != ch:
if stack.pop() != c: result[0] += corruptPoints[ch]
score = -1 stack.setLen 0
break break
if score == -1: continue if stack.len > 0: cmps.add stack.mapIt(" )]}>".find it).foldr 5 * b + a
for l in stack.reversed(): result[1] = cmps.sorted[cmps.len div 2]
score *= 5
score += v[l]
scores.add(score)
scores.sort()
result = scores[(scores.len() div 2)]
doDay(10, (n) => n.loadInput(), doDay 10, n => n.loadInput(), s => s.parse[0], s => s.parse[1],
p1, @[
p2, "[({(<(())[]>[[{[]{<()<>>",
"""[({(<(())[]>[[{[]{<()<>> "[(()[<>])]({[<{<<[]>>(",
[(()[<>])]({[<{<<[]>>( "{([(<{}[<>[]}>{[]{[(<()>",
{([(<{}[<>[]}>{[]{[(<()> "(((({<>}<{<{<>}{[]{[]{}",
(((({<>}<{<{<>}{[]{[]{} "[[<[([]))<([[{}[[()]]]",
[[<[([]))<([[{}[[()]]] "[{[{({}]{}}([{[{{{}}([]",
[{[{({}]{}}([{[{{{}}([] "{<[[]]>}<{[{[{[]{()[[[]",
{<[[]]>}<{[{[{[]{()[[[] "[<(<(<(<{}))><([]([]()",
[<(<(<(<{}))><([]([]() "<{([([[(<>()){}]>(<<{{",
<{([([[(<>()){}]>(<<{{ "<{([{{}}[<[[[<>{}]]]>[]]",
<{([{{}}[<[[[<>{}]]]>[]]""".split('\n'), 26397, 288957) ], 26397, 288957