finish day6 part 1
This commit is contained in:
87
day6.jai
Normal file
87
day6.jai
Normal file
@@ -0,0 +1,87 @@
|
||||
sample :: #string END
|
||||
123 328 51 64
|
||||
45 64 387 23
|
||||
6 98 215 314
|
||||
* + * +
|
||||
END
|
||||
|
||||
Operation_Kind :: enum {
|
||||
Plus;
|
||||
Mult;
|
||||
}
|
||||
|
||||
Operation :: struct {
|
||||
values: [..]int;
|
||||
op: Operation_Kind;
|
||||
}
|
||||
|
||||
main :: () {
|
||||
content := read_entire_file("day6.input");
|
||||
solve_first(content);
|
||||
}
|
||||
|
||||
solve_first :: (input: string) {
|
||||
operations := parse_input(input);
|
||||
total := 0;
|
||||
for operations {
|
||||
result := 0;
|
||||
if it.op == .Plus {
|
||||
for it.values {
|
||||
result += it;
|
||||
}
|
||||
} else {
|
||||
result = 1;
|
||||
for it.values {
|
||||
result *= it;
|
||||
}
|
||||
}
|
||||
total += result;
|
||||
}
|
||||
|
||||
print("%\n", total);
|
||||
}
|
||||
|
||||
parse_input :: (input: string) -> [..]Operation {
|
||||
result: [..]Operation;
|
||||
lines := split(input, #char "\n");
|
||||
assert(lines.count > 0);
|
||||
|
||||
for line, line_index: lines {
|
||||
found := true;
|
||||
right := line;
|
||||
op_index := 0;
|
||||
while found {
|
||||
defer op_index += 1;
|
||||
found, left:, right = split_from_left(right, #char " ");
|
||||
while left.count == 0 && found {
|
||||
found, left, right = split_from_left(right, #char " ");
|
||||
}
|
||||
|
||||
if found || left.count != 0 {
|
||||
l := left;
|
||||
val, success := parse_int(*l);
|
||||
if !success {
|
||||
if left == {
|
||||
case "*"; result[op_index].op = .Mult;
|
||||
case "+"; result[op_index].op = .Plus;
|
||||
}
|
||||
} else {
|
||||
if line_index == 0 {
|
||||
values: [..]int;
|
||||
array_add(*values, val);
|
||||
array_add(*result, .{values=values});
|
||||
} else {
|
||||
array_add(*result[op_index].values, val);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#import "Basic";
|
||||
#import "File";
|
||||
#import "Print_Vars";
|
||||
#import "String";
|
||||
Reference in New Issue
Block a user