diff --git a/day3.jai b/day3.jai index c44abb0..d82c073 100644 --- a/day3.jai +++ b/day3.jai @@ -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";