diff options
Diffstat (limited to '2024')
-rw-r--r-- | 2024/05/.gitignore | 1 | ||||
-rw-r--r-- | 2024/05/Makefile | 1 | ||||
-rw-r--r-- | 2024/05/puzzles.awk | 36 |
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 |