Cleanup
This commit is contained in:
parent
54d110bddb
commit
7552c3ea12
68
2021/ten.nim
68
2021/ten.nim
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue