summaryrefslogtreecommitdiff
path: root/3/3.ha
blob: f4d3ac5a4b5ed357458630acec72b78092eefcdf (plain)
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
use fmt;
use io;
use os;
use regex;
use strings;
use strconv;

export fn main() void = {
	const in = io::drain(os::stdin)!;
	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)!;
};