aboutsummaryrefslogtreecommitdiff
path: root/2024/05
diff options
context:
space:
mode:
Diffstat (limited to '2024/05')
-rw-r--r--2024/05/.gitignore1
-rw-r--r--2024/05/Makefile1
-rw-r--r--2024/05/puzzles.awk36
3 files changed, 38 insertions, 0 deletions
diff --git a/2024/05/.gitignore b/2024/05/.gitignore
new file mode 100644
index 0000000..82eaf49
--- /dev/null
+++ b/2024/05/.gitignore
@@ -0,0 +1 @@
+./puzzle-[12].awk \ No newline at end of file
diff --git a/2024/05/Makefile b/2024/05/Makefile
new file mode 100644
index 0000000..e7d8b6c
--- /dev/null
+++ b/2024/05/Makefile
@@ -0,0 +1 @@
+include ../../Makefiles/awk.mk \ No newline at end of file
diff --git a/2024/05/puzzles.awk b/2024/05/puzzles.awk
new file mode 100644
index 0000000..6dbfcd2
--- /dev/null
+++ b/2024/05/puzzles.awk
@@ -0,0 +1,36 @@
+#!/usr/bin/gawk -f
+
+function record_valid( seen)
+{
+ for (i = 1; i <= NF; i++) {
+ for (j in seen) {
+ if (j in rules[$i])
+ return 0
+ }
+ seen[$i] = 1
+ }
+ return 1
+}
+
+function sort_page_numbers(i1, v1, i2, v2)
+{
+ if (v1 in rules[v2])
+ return +1
+ if (v2 in rules[v1])
+ return -1
+ return 0
+}
+
+BEGIN { FS = "[|,]" }
+/\|/ { rules[$1][$2] = 1 }
+END { print mid }
+
+# START PART 1
+/,/ && record_valid() { mid += $(i / 2) }
+# END PART 1 START PART 2
+/,/ && !record_valid() {
+ split($0, xs)
+ asort(xs, xs, "sort_page_numbers")
+ mid += xs[(NF + 1) / 2]
+}
+# END PART 2 \ No newline at end of file