about summary refs log tree commit diff
path: root/aoc/2022/09/part-one.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'aoc/2022/09/part-one.tcl')
-rwxr-xr-xaoc/2022/09/part-one.tcl25
1 files changed, 25 insertions, 0 deletions
diff --git a/aoc/2022/09/part-one.tcl b/aoc/2022/09/part-one.tcl
new file mode 100755
index 0000000..3e7716a
--- /dev/null
+++ b/aoc/2022/09/part-one.tcl
@@ -0,0 +1,25 @@
+#!/usr/bin/env tclsh
+proc vec x {list [expr {abs($x)}] [expr {($x>0)-($x<0)}]}
+set tx [set hx 0]
+set ty [set hy 0]
+while {1} {
+    set line [gets stdin]
+    if {[eof stdin] || $line == ""} then break
+    lassign [split $line] d n
+    for {set i 0} {$i < $n} {incr i} {
+        switch $d {
+            R {incr hx 1}
+            U {incr hy 1}
+            L {incr hx -1}
+            D {incr hy -1}
+        }
+        lassign [vec [expr {$hx-$tx}]] mx dx
+        lassign [vec [expr {$hy-$ty}]] my dy
+        if {$mx == 2 || $my == 2} {
+            incr tx $dx
+            incr ty $dy
+        }
+        set v($tx,$ty) 1
+    }
+}
+puts [array size v]