summary refs log tree commit diff homepage
diff options
context:
space:
mode:
-rw-r--r--2022/day08.awk39
1 files changed, 39 insertions, 0 deletions
diff --git a/2022/day08.awk b/2022/day08.awk
new file mode 100644
index 0000000..35505e4
--- /dev/null
+++ b/2022/day08.awk
@@ -0,0 +1,39 @@
+function visible(x, y) {
+	if (x == 1 || x == right) return 1;
+	if (y == 1 || y == bottom) return 1;
+	for (xx = x-1; xx >= 1; --xx) {
+		if (m[xx,y] >= m[x,y]) break;
+	}
+	if (!xx) return 1;
+	for (xx = x+1; xx <= right; ++xx) {
+		if (m[xx,y] >= m[x,y]) break;
+	}
+	if (xx > right) return 1;
+	for (yy = y-1; yy >= 1; --yy) {
+		if (m[x,yy] >= m[x,y]) break;
+	}
+	if (!yy) return 1;
+	for (yy = y+1; yy <= bottom; ++yy) {
+		if (m[x,yy] >= m[x,y]) break;
+	}
+	if (yy > bottom) return 1;
+	return 0;
+}
+BEGIN {
+	FS = "";
+}
+{
+	for (x = 1; x <= NF; ++x) {
+		m[x,NR] = $x;
+	}
+	right = NF;
+	bottom = NR;
+}
+END {
+	for (x = 1; x <= right; ++x) {
+		for (y = 1; y <= bottom; ++y) {
+			if (visible(x, y)) vis++;
+		}
+	}
+	print vis;
+}