(defun corrupt (str) (if-match (@pos . @len) (search-str-tree str '("(]" "(}" "(>" "[)" "[}" "[>" "{)" "{]" "{>" "<)" "<]" "<}")) pos)) (defun reduxe (str) (while-match (@pos . @len) (search-str-tree str '("()" "[]" "{}" "<>")) (del [str pos..(ssucc pos)])) str) (defun solve-part-one (: (name "input")) (with-stream (s (open-file name)) (let ((score 0)) (whilet ((line (get-line s))) (let ((rline (reduxe line))) (iflet ((pos (corrupt rline))) (inc score (ecaseq [rline (succ pos)] (#\) 3) (#\] 57) (#\} 1197) (#\> 25137)))))) score))) (defun solve-part-two (: (name "input")) (flow (file-get-lines name) (mapcar reduxe) (remove-if [orf corrupt empty]) (mapcar (opip (mapcar (relate "([{<" #(1 2 3 4))) (rpoly 5))) (sort) [callf ref use [chain len (lop trunc 2)]]))