66 lines
1.3 KiB
C3
66 lines
1.3 KiB
C3
module main;
|
|
import std::io;
|
|
|
|
fn int main(String[] args) {
|
|
|
|
if (args.len < 2) {
|
|
io::printn("Usage: HelloWorld <filename>");
|
|
return -1;
|
|
}
|
|
String filename = args[1];
|
|
|
|
int? answer = getSum(filename);
|
|
if (catch error = answer) {
|
|
io::printfn("error opening file: %s", error);
|
|
return -1;
|
|
}
|
|
io::printfn("%d", answer);
|
|
|
|
|
|
return 0;
|
|
}
|
|
|
|
fn int? getSum(String filename) {
|
|
File? file = file::open(filename, "r")!;
|
|
|
|
defer (void)file.close();
|
|
|
|
int sum = 0;
|
|
|
|
while (try line = io::treadline(&file)) {
|
|
char first = getFirst(line);
|
|
char last = getLast(line);
|
|
String digits = {first, last};
|
|
int? number = digits.to_int();
|
|
if (catch error = number) {
|
|
io::printfn("Error converting to number: %s", error);
|
|
continue;
|
|
}
|
|
sum += number;
|
|
}
|
|
return sum;
|
|
}
|
|
|
|
fn char getLast(String line) {
|
|
char last;
|
|
int length = line.len - 1;
|
|
for (int i=length; i>=0; i--) {
|
|
if (ascii::is_digit(line[i])) {
|
|
last = line[i];
|
|
break;
|
|
}
|
|
}
|
|
return last;
|
|
}
|
|
|
|
fn char getFirst(String line) {
|
|
char first;
|
|
foreach (ch : line) {
|
|
if (ascii::is_digit(ch)) {
|
|
first = ch;
|
|
break;
|
|
}
|
|
}
|
|
return first;
|
|
}
|