aboutsummaryrefslogtreecommitdiff
path: root/2016/04/puzzles.sh
diff options
context:
space:
mode:
Diffstat (limited to '2016/04/puzzles.sh')
-rw-r--r--2016/04/puzzles.sh27
1 files changed, 27 insertions, 0 deletions
diff --git a/2016/04/puzzles.sh b/2016/04/puzzles.sh
new file mode 100644
index 0000000..d874c75
--- /dev/null
+++ b/2016/04/puzzles.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+# This is slow, but it’s fun! That’s what counts!
+
+while IFS='[]' read -r line cksum; do
+ sid=`echo $line | grep -o '[0-9]*'`
+ echo $line \
+ | tr -d -- '-0-9\n' \
+ | sed 's/./&\n/g' \
+ | sort \
+ | uniq -c \
+ | sort -k1nr \
+ | head -n5 \
+# START PART 1
+ | awk "{ s = s \$2 } END { if (s == \"$cksum\") print $sid }"
+done <input | awk '{ s += $0 } END { print s }'
+# END PART 1 START PART 2
+ | awk "{ s = s \$2 } END { if (s == \"$cksum\") print \"$line\" }"
+done <input | \
+ while read -r line; do
+ for i in `seq 25`; do
+ echo $line | tr $(printf %${i}s | tr ' ' '.')\a-z a-za-z
+ done
+ # The call to head(1) allows us to exit the moment we find the
+ # first match.
+ done | grep north | grep -o '[0-9]*' | head -n1
+# END PART 2