diff options
author | June McEnroe <june@causal.agency> | 2018-12-05 02:03:16 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2018-12-05 02:03:16 -0500 |
commit | 46acbdc81dfe75a83718d075d6e966d8e5eb4001 (patch) | |
tree | e10d34ba23ef23659539329e9888ed39e093b7f8 /2018 | |
parent | Solve day 5 part 1 (diff) | |
download | aoc-46acbdc81dfe75a83718d075d6e966d8e5eb4001.tar.gz aoc-46acbdc81dfe75a83718d075d6e966d8e5eb4001.zip |
Solve day 5 part 2
It's slow but whatever.
Diffstat (limited to '2018')
-rw-r--r-- | 2018/day05.c | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/2018/day05.c b/2018/day05.c index 5cb9366..1a80e2a 100644 --- a/2018/day05.c +++ b/2018/day05.c @@ -3,9 +3,7 @@ #include <stdlib.h> #include <string.h> -int main() { - char buf[50000]; - size_t len = fread(buf, 1, sizeof(buf), stdin); +static size_t react(char *buf, size_t len) { for (size_t i = 0; i < len - 1; ++i) { if (tolower(buf[i]) != tolower(buf[i + 1])) continue; if (islower(buf[i]) == islower(buf[i + 1])) continue; @@ -13,5 +11,27 @@ int main() { memmove(&buf[i], &buf[i + 2], len - i); i = (size_t)-1; } - printf("%zu\n", len); + return len; +} + +int main() { + char buf[50000]; + size_t len = fread(buf, 1, sizeof(buf), stdin); + + char buf1[50000]; + memcpy(buf1, buf, len); + printf("%zu\n", react(buf1, len)); + + size_t min = len; + for (char x = 'a'; x <= 'z'; ++x) { + char buf2[50000]; + size_t len2 = 0; + for (size_t i = 0; i < len; ++i) { + if (tolower(buf[i]) == x) continue; + buf2[len2++] = buf[i]; + } + len2 = react(buf2, len2); + if (len2 < min) min = len2; + } + printf("%zu\n", min); } |