aboutsummaryrefslogtreecommitdiff
path: root/2019/06
diff options
context:
space:
mode:
Diffstat (limited to '2019/06')
-rwxr-xr-x2019/06/puzzle-1.awk21
-rwxr-xr-x2019/06/puzzle-2.awk32
2 files changed, 53 insertions, 0 deletions
diff --git a/2019/06/puzzle-1.awk b/2019/06/puzzle-1.awk
new file mode 100755
index 0000000..e694b4d
--- /dev/null
+++ b/2019/06/puzzle-1.awk
@@ -0,0 +1,21 @@
+#!/usr/bin/awk -f
+
+function norbits(o)
+{
+ if (o in memo)
+ return memo[o]
+ return memo[o] = 1 + norbits(orbits[o])
+}
+
+BEGIN {
+ FS = ")"
+ memo["COM"] = 0
+}
+
+{ orbits[$2] = $1 }
+
+END {
+ for (o in orbits)
+ n += norbits(o)
+ print n
+} \ No newline at end of file
diff --git a/2019/06/puzzle-2.awk b/2019/06/puzzle-2.awk
new file mode 100755
index 0000000..3d0e42c
--- /dev/null
+++ b/2019/06/puzzle-2.awk
@@ -0,0 +1,32 @@
+#!/usr/bin/awk -f
+
+function trace_to_com(xs, o)
+{
+ if (o == "COM")
+ return
+ o = orbits[o]
+ xs[length(xs) + 1] = o
+ trace_to_com(xs, o)
+}
+
+BEGIN { FS = ")" }
+
+{ orbits[$2] = $1 }
+
+END {
+ # Declare ‘xs’ and ‘ys’ as arrays
+ xs[0]; delete xs
+ ys[0]; delete ys
+
+ trace_to_com(xs, "YOU")
+ trace_to_com(ys, "SAN")
+
+ for (i = 1; i <= length(xs); i++) {
+ for (j = 1; j <= length(ys); j++) {
+ if (xs[i] == ys[j]) {
+ print i + j - 2
+ exit
+ }
+ }
+ }
+} \ No newline at end of file