(io.input "input") (var sum1 0) (var sum2 0) (each [line (io.lines)] (let [pattern "(%d+)-(%d+),(%d+)-(%d+)" [ri1 rf1 ri2 rf2] (icollect [_ n (-> line (string.match pattern) (table.pack) (ipairs))] ; (-> ...) equivalent to: ; (ipairs (table.pack (string.match line pattern)))] (tonumber n))] (when (or (and (>= ri1 ri2) (<= rf1 rf2)) (and (>= ri2 ri1) (<= rf2 rf1))) (set sum1 (+ sum1 1))) (when (and (>= rf1 ri2) (<= ri1 rf2)) (set sum2 (+ sum2 1))))) (print "part 1" sum1) (print "part 2" sum2)