diff options
-rwxr-xr-x | aoc/2022/09/part-one.tcl | 25 | ||||
-rwxr-xr-x | aoc/2022/09/part-two.tcl | 30 |
2 files changed, 55 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] diff --git a/aoc/2022/09/part-two.tcl b/aoc/2022/09/part-two.tcl new file mode 100755 index 0000000..e3d539f --- /dev/null +++ b/aoc/2022/09/part-two.tcl @@ -0,0 +1,30 @@ +#!/usr/bin/env tclsh +proc vec x {list [expr {abs($x)}] [expr {($x>0)-($x<0)}]} +for {set i 0} {$i < 10} {incr i} { + set kx($i) 0 + set ky($i) 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 kx(0) 1} + U {incr ky(0) 1} + L {incr kx(0) -1} + D {incr ky(0) -1} + } + for {set j 1} {$j < 10} {incr j} { + set p [expr {$j-1}] + lassign [vec [expr {$kx($p)-$kx($j)}]] mx dx + lassign [vec [expr {$ky($p)-$ky($j)}]] my dy + if {$mx == 2 || $my == 2} { + incr kx($j) $dx + incr ky($j) $dy + } + } + set v($kx(9),$ky(9)) 1 + } +} +puts [array size v] |