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 :: () {
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;
for line: split(input, "\n") {
if line.count == 0 continue;
assert(line.count > 1);
biggest_first_digit := 0;
biggest_first_digit_index := 0;
for i: 0..line.count - 2 {
char := line[i] - #char "0";
if char > biggest_first_digit {
biggest_first_digit = char;
biggest_first_digit_index = i;
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);
}
biggest_second_digit := 0;
print("-----\n");
for i: biggest_first_digit_index + 1..line.count - 1 {
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", 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";