use fmt; use io; use os; use regex; use strings; use strconv; export fn main() void = { do(os::stdin); }; fn do(h: io::handle) int = { const in = io::drain(h)!; const sin = strings::trim(strings::fromutf8_unsafe(in)); const re = regex::compile(`mul\([0-9]+,[0-9]+\)`)!; defer regex::finish(&re); const results = regex::findall(&re, sin); defer regex::result_freeall(results); let sum = 0; for (const result .. results) { for (let r .. result) { const idx1 = strings::index(r.content, ','); const idx2 = strings::index(r.content, ')'); const arg1 = strings::sub(r.content, 4, idx1: size); const arg2 = strings::sub(r.content, idx1: size + 1, idx2: size); const a1 = strconv::stoi(arg1)!; const a2 = strconv::stoi(arg2)!; sum += a1 * a2; fmt::printfln("{} * {} = {}", a1, a2, a1 * a2)!; }; }; fmt::printfln("{}", sum)!; return sum; };