summary refs log tree commit diff homepage
diff options
context:
space:
mode:
-rw-r--r--2019/day10.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/2019/day10.c b/2019/day10.c
new file mode 100644
index 0000000..dbc2352
--- /dev/null
+++ b/2019/day10.c
@@ -0,0 +1,57 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+static struct Point {
+	int x, y;
+} Point(int x, int y) {
+	return (struct Point) { x, y };
+}
+
+static int eq(struct Point a, struct Point b) {
+	return a.x == b.x && a.y == b.y;
+}
+
+static struct Point sub(struct Point a, struct Point b) {
+	return Point(a.x - b.x, a.y - b.y);
+}
+
+static struct Point reduce(struct Point p) {
+	int max = (abs(p.x) > abs(p.y) ? abs(p.x) : abs(p.y));
+	for (int i = max; i > 1; --i) {
+		if (p.x / i * i != p.x) continue;
+		if (p.y / i * i != p.y) continue;
+		return Point(p.x / i, p.y / i);
+	}
+	return p;
+}
+
+int main(void) {
+	struct Point ps[2048];
+	size_t len = 0;
+	int y = 0, x = 0;
+	int ch;
+	while (EOF != (ch = getchar())) {
+		switch (ch) {
+			break; case '.': x++;
+			break; case '#': ps[len++] = Point(x++, y);
+			break; case '\n': y++; x = 0;
+		}
+	}
+
+	size_t max = 0;
+	for (size_t i = 0; i < len; ++i) {
+		struct Point ds[2048];
+		size_t dlen = 0;
+		for (size_t j = 0; j < len; ++j) {
+			if (j == i) continue;
+			struct Point a = reduce(sub(ps[j], ps[i]));
+			size_t d;
+			for (d = 0; d < dlen; ++d) {
+				if (eq(ds[d], a)) break;
+			}
+			if (d == dlen) ds[dlen++] = a;
+		}
+		if (dlen > max) max = dlen;
+	}
+	printf("%zu\n", max);
+}
td>June McEnroe 2020-05-20Don't install rc scripts on other platformsJune McEnroe 2020-05-20Rewrite build and install like pounce 1.3June McEnroe 2020-05-20Update email addressesJune McEnroe 2020-04-23Call updateConsumer from handleError 1.2p1June McEnroe 2020-04-20Use . as ${LDLIBS.$@} separatorJune McEnroe 2020-04-05Error on invalid ISUPPORT values 1.2June McEnroe 2020-04-05Only set RCS on FreeBSDJune McEnroe 2020-04-05Log bans and unbansJune McEnroe 2020-04-05Parse mode types from ISUPPORTJune McEnroe 2020-04-05Add unscoop matchers for ban/unban eventsJune McEnroe 2020-04-05Check unscoop regexps with make testJune McEnroe 2020-04-05Add unscoop -n flag for checking regexpsJune McEnroe 2020-04-05Add Ban and Unban event typesJune McEnroe 2020-04-02Update styleJune McEnroe 2020-03-31Update unscoop catgirl matchersJune McEnroe 2020-03-31Fix writing verbose to stderrJune McEnroe 2020-03-02Include <>/-/* around nicks in scoop coloring 1.1June McEnroe 2020-03-02Replace .mk files with configure scriptJune McEnroe 2020-02-28Implement the causal.agency/consumer capabilityJune McEnroe 2020-02-22Include <>/-/* around nicks in coloringJune McEnroe 2020-02-22Use (almost) the full range of IRC colors for nicksJune McEnroe