finish day 2 part 2

This commit is contained in:
2026-06-21 20:10:15 -04:00
parent 1bd2014c32
commit e07798d418
4 changed files with 144 additions and 0 deletions

66
day2.jai Normal file
View File

@@ -0,0 +1,66 @@
sample :: "11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124";
// sample :: "11-22";
Chunk :: struct {
chunks: [..]string;
original: string;
}
solve_second :: (input: string, enable_debug_logging := false) {
duplicate_sum := 0;
int_sb: String_Builder;
for range: split(input, ",") {
if enable_debug_logging print("%\n", range);
found, left_str, right_str := split_from_left(range, #char "-");
assert(found);
left := parse_int(*left_str);
right := parse_int(*right_str);
for i: left..right {
print_to_builder(*int_sb, "%", i);
i_str := builder_to_string(*int_sb);
for split_into_even_chunks(i_str) {
if all_equal(array_view(it.chunks, 0)) {
if enable_debug_logging print_vars(it);
duplicate_sum += i;
break;
}
}
}
}
print_vars(duplicate_sum);
}
main :: () {
content := read_entire_file("day2.input");
solve_second(content);
}
split_into_even_chunks :: (s: string) -> [..]Chunk {
result: [..]Chunk;
for chunk_len: 1..s.count / 2 {
if s.count % chunk_len != 0 continue;
chunks := Chunk.{original=s};
num_chunks := s.count / chunk_len;
chunk_i := 0;
for chunk_i: 0..num_chunks - 1 {
array_add(*chunks.chunks, string.{data=s.data + (chunk_i * chunk_len), count = chunk_len});
}
array_add(*result, chunks);
}
return result;
}
all_equal :: (strs: []string) -> bool {
for i: 0..strs.count - 2 {
if strs[i] != strs[i + 1] return false;
}
return true;
}
#import "Basic";
#import "File";
#import "String";
#import "Print_Vars";