55 lines
2.1 KiB
C
55 lines
2.1 KiB
C
#define DJSTD_BASIC_ENTRY
|
|
#include "./djstdlib/core.c"
|
|
|
|
int djstd_entry(Arena *arena, StringList args) {
|
|
string input = os_readEntireFile(arena, s("./day2-input"));
|
|
|
|
StringList ranges = strSplit(arena, s(","), input);
|
|
|
|
int64 result = 0;
|
|
|
|
for (EachEl(ranges, string, range)) {
|
|
if (range->length) {
|
|
StringList startStop = strSplit(arena, s("-"), *range);
|
|
if (startStop.length == 2) {
|
|
Int64Result start = parsePositiveInt64(startStop.data[0]);
|
|
Int64Result stop = parsePositiveInt64(startStop.data[1]);
|
|
if (start.valid && stop.valid) {
|
|
for (int64 i = start.result; i <= stop.result; i++) {
|
|
Scratch scratch = scratchStart(0, 0);
|
|
string asStr = strPrintf(scratch.arena, "%zu", i);
|
|
for (int j = 1; j <= asStr.length/2; j++) {
|
|
if (asStr.length/j*j == asStr.length) {
|
|
StringList list = PushList(scratch.arena, StringList, asStr.length/j);
|
|
for (int k = 0; k < asStr.length/j; k++) {
|
|
ListAppend(list, strSlice(asStr, j * k, j*k + j));
|
|
}
|
|
string firstChunk = list.data[0];
|
|
bool matched = true;
|
|
for (EachEl(list, string, chunk)) {
|
|
if (!strEql(firstChunk, *chunk)) {
|
|
matched = false;
|
|
break;
|
|
}
|
|
}
|
|
if (matched) {
|
|
printStrList(list);
|
|
result += i;
|
|
i++;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
scratchEnd(scratch);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
println("%zu", result);
|
|
|
|
return 0;
|
|
}
|
|
|