-
Notifications
You must be signed in to change notification settings - Fork 0
/
10.bqn
47 lines (41 loc) · 1.23 KB
/
10.bqn
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
While ← {𝕨{𝕊∘𝔾⍟𝔽𝕩}𝕩@}´
in ← ⟨
"[({(<(())[]>[[{[]{<()<>>"
"[(()[<>])]({[<{<<[]>>("
"{([(<{}[<>[]}>{[]{[(<()>"
"(((({<>}<{<{<>}{[]{[]{}"
"[[<[([]))<([[{}[[()]]]"
"[{[{({}]{}}([{[{{{}}([]"
"{<[[]]>}<{[{[{[]{()[[[]"
"[<(<(<(<{}))><([]([]()"
"<{([([[(<>()){}]>(<<{{"
"<{([{{}}[<[[[<>{}]]]>[]]"
⟩
in ↩ •FLines "10.txt"
Score ← {(⊑")]}>"⊐𝕩) ⊑ 3‿57‿1197‿25137‿0}
# iterate the string, keeping stack of parens
# return stack and error score
Parse ← {𝕊 line:
stack ← ""
error ← 0
While {𝕤 ⋄ 0≠≠line}‿{𝕤
c ← ⊑line
line ↩ 1↓line
{⊑c∊"([{<"
? stack ↩ c∾stack
; p ← ⊑stack
stack ↩ 1↓stack
# check for correctness by seeing if ascii distance of
# parens is 1 or 2
{2<|c-p ? error ↩ c ⋄ line ↩ ""; 0}
}
}
stack ⋈ Score error
}
stacks_scores ← >Parse¨in
•Show +´1⊏˘stacks_scores
# incomplete inputs are those without errors
incomplete ← 0⊏˘{(0=1⊏˘𝕩)/𝕩}stacks_scores
CompletionScore ← {+´(" ([{<"⊸⊐˘𝕩) × ⌽5⋆↕≠𝕩}
# sort completion scores and print the middle one
•Show (⌊0.5×≠incomplete)⊑∧CompletionScore¨incomplete