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";