blob: eb57bf0458242a6dfad1d29613f99ee78028629f (
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
use errors;
use fmt;
use io;
use os;
use strconv::{stoi};
use strings::{dupall, freeall, fromutf8_unsafe, split};
fn solve(problems: []([32]int, str)) (u64 | errors::invalid) = {
let result = 0u64;
for (let (numbers, operation) .. problems) {
let problem_result = 1u64;
if (operation == "*") {
for (let number .. numbers) {
if (number == 0) break;
problem_result *= number: u64;
};
} else if (operation == "+") {
problem_result = 0;
for (let number .. numbers) {
if (number == 0) break;
problem_result += number: u64;
};
} else return errors::invalid;
result += problem_result;
};
return result;
};
export fn main() void = {
let handle = os::open("input.txt")!;
defer io::close(handle)!;
let buf = io::drain(handle)!;
defer free(buf);
let lines = split(fromutf8_unsafe(buf), "\n")!;
delete(lines[len(lines) - 1]);
defer free(lines);
let problems: []([32]int, str) = [];
defer free(problems);
for (let i = 0z; i < len(lines); i += 1) {
let values = split(lines[i], " ")!;
defer free(values);
let value_offset = 0z;
for (let j = 0z; j < len(values); j += 1) {
if (values[j] == "") {
value_offset += 1;
continue;
};
if (i == 0) {
append(problems, ([0...], " "))!;
problems[j - value_offset].0[i] = stoi(values[j])!;
} else if (i == len(lines) - 1) {
problems[j - value_offset].1 = values[j];
} else {
problems[j - value_offset].0[i] = stoi(values[j])!;
};
};
};
let answer = solve(problems)!;
fmt::printfln("Answer: {}", answer)!;
};
|