about summary refs log tree commit diff
path: root/aoc/2022/09/part-two.tcl
blob: e3d539fc465f33fa089b1f7a9f5cb43dee04f717 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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]