finish day 3
This commit is contained in:
58
day3.jai
58
day3.jai
@@ -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";
|
||||||
|
|||||||
Reference in New Issue
Block a user