summary refs log tree commit diff homepage
path: root/2018
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2018-12-05 02:03:16 -0500
committerJune McEnroe <june@causal.agency>2018-12-05 02:03:16 -0500
commit46acbdc81dfe75a83718d075d6e966d8e5eb4001 (patch)
treee10d34ba23ef23659539329e9888ed39e093b7f8 /2018
parentSolve day 5 part 1 (diff)
downloadaoc-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.c28
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);
 }