summary refs log tree commit diff homepage
path: root/2020/day03.c
diff options
context:
space:
mode:
Diffstat (limited to '2020/day03.c')
-rw-r--r--2020/day03.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/2020/day03.c b/2020/day03.c
index cd792a7..f647681 100644
--- a/2020/day03.c
+++ b/2020/day03.c
@@ -1,16 +1,23 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+static char grid[512][32];
+static int h, w;
+static long trees(int dx, int dy) {
+	long trees = 0;
+	for (int x = 0, y = 0; y < h; x += dx, y += dy) {
+		trees += grid[y][x%w] == '#';
+	}
+	return trees;
+}
 int main(void) {
-	char grid[512][32];
-	int h = 0;
 	while (EOF != scanf("%s\n", grid[h])) {
 		h++;
 	}
-	int w = strlen(grid[0]);
-	int trees = 0;
-	for (int x = 0, y = 0; y < h; x += 3, y += 1) {
-		trees += grid[y][x%w] == '#';
-	}
-	printf("%d\n", trees);
+	w = strlen(grid[0]);
+	printf("%ld\n", trees(3, 1));
+	printf(
+		"%ld\n",
+		trees(1, 1) * trees(3, 1) * trees(5, 1) * trees(7, 1) * trees(1, 2)
+	);
 }
June McEnroe Since ctags only ever produces regular expressions of the form /^re$/ or /^re/ with no other special characters, instead unescape the pattern and simply use strncmp. Running on a sqlite3.c amalgamation, the regex version takes ~37s while the strncmp version takes ~1s, producing identical output. Big win! 2021-09-11Also defer printing comment for lone close-parensJune McEnroe 2021-09-10Publish "git-comment"June McEnroe 2021-09-10Add git comment --pretty optionJune McEnroe 2021-09-08Defer printing comment if line is blank or closing braceJune McEnroe This fixes badly indented comments. 2021-09-08Up default min-repeat to 30 linesJune McEnroe 2021-09-08Handle dirty lines in git-commentJune McEnroe 2021-09-08Document and install git-commentJune McEnroe 2021-09-08Add repeat and all options to git-commentJune McEnroe 2021-09-08Add group threshold to git-commentJune McEnroe