finish day 3

This commit is contained in:
2026-06-22 11:08:37 -04:00
parent db36cc6fa9
commit c7e1fb297a

View File

@@ -7,38 +7,56 @@ END;
main :: () { main :: () {
content := read_entire_file("day3.input"); content := read_entire_file("day3.input");
solve_first(content); // solve(content, 2);
solve(content, 12);
} }
solve_first :: (input: string) { solve :: (input: string, num_batteries: int) {
total := 0; total := 0;
for line: split(input, "\n") { for line: split(input, "\n") {
if line.count == 0 continue; if line.count == 0 continue;
assert(line.count > 1); assert(line.count > 1);
biggest_first_digit := 0;
biggest_first_digit_index := 0; max_digit_index := line.count - num_batteries;
for i: 0..line.count - 2 { index := 0;
char := line[i] - #char "0"; current_voltage := 0;
if char > biggest_first_digit { current_voltage_power := num_batteries;
biggest_first_digit = char; while index <= max_digit_index && current_voltage_power > 0 {
biggest_first_digit_index = i; 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);
} }
biggest_second_digit := 0;
print("-----\n"); print("%: %\n", it_index, current_voltage);
for i: biggest_first_digit_index + 1..line.count - 1 { total += current_voltage;
char := line[i] - #char "0";
print("%: %\n", i, char);
if char > biggest_second_digit {
biggest_second_digit = char;
}
}
total += biggest_first_digit * 10 + biggest_second_digit;
print("%: %\n", it_index, biggest_first_digit * 10 + biggest_second_digit);
} }
print("%\n", total); 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 "Basic";
#import "File"; #import "File";
#import "Math";
#import "Print_Vars";
#import "String"; #import "String";