63 lines
1.6 KiB
Plaintext
63 lines
1.6 KiB
Plaintext
sample :: #string END
|
|
987654321111111
|
|
811111111111119
|
|
234234234234278
|
|
818181911112111
|
|
END;
|
|
|
|
main :: () {
|
|
content := read_entire_file("day3.input");
|
|
// solve(content, 2);
|
|
solve(content, 12);
|
|
}
|
|
|
|
solve :: (input: string, num_batteries: int) {
|
|
total := 0;
|
|
for line: split(input, "\n") {
|
|
if line.count == 0 continue;
|
|
assert(line.count > 1);
|
|
|
|
max_digit_index := line.count - num_batteries;
|
|
index := 0;
|
|
current_voltage := 0;
|
|
current_voltage_power := num_batteries;
|
|
while index <= max_digit_index && current_voltage_power > 0 {
|
|
biggest_digit := 0;
|
|
biggest_digit_index := index;
|
|
for i: index..max_digit_index {
|
|
char := line[i] - #char "0";
|
|
if char > biggest_digit {
|
|
biggest_digit = char;
|
|
biggest_digit_index = i;
|
|
}
|
|
}
|
|
|
|
current_voltage += biggest_digit * pow(10, current_voltage_power - 1);
|
|
current_voltage_power -= 1;
|
|
index = biggest_digit_index + 1;
|
|
max_digit_index = line.count - current_voltage_power;
|
|
//print_vars(current_voltage, biggest_digit, current_voltage_power, index, biggest_digit_index, max_digit_index);
|
|
}
|
|
|
|
print("%: %\n", it_index, current_voltage);
|
|
total += current_voltage;
|
|
}
|
|
print("%\n", total);
|
|
}
|
|
|
|
pow :: (base: s64, exp: s64) -> s64 {
|
|
if exp == 0 return 1;
|
|
if exp == 1 return base;
|
|
result := 1;
|
|
for 0..exp-1 {
|
|
result *= base;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
#import "Basic";
|
|
#import "File";
|
|
#import "Math";
|
|
#import "Print_Vars";
|
|
#import "String";
|