diff options
Diffstat (limited to '2024/tcl')
| -rwxr-xr-x | 2024/tcl/08.tcl | 69 | 
1 files changed, 69 insertions, 0 deletions
| diff --git a/2024/tcl/08.tcl b/2024/tcl/08.tcl new file mode 100755 index 0000000..e62ed69 --- /dev/null +++ b/2024/tcl/08.tcl @@ -0,0 +1,69 @@ +#!/bin/env tclsh + +source lib.tcl +setup 8 grid + +puts {Part 1: Antinode count in map} + +set antinodes {} +set resonant_antinodes {} +set antennae {} + +for {set x 0} {$x < $input(w)} {incr x} { +  for {set y 0} {$y < $input(h)} {incr y} { +    set cell [lindex $input(grid) $y $x] +    if {[regexp {[a-zA-Z0-9]} $cell]} { +      if [dict exists $antennae $cell] { +        foreach antenna [dict keys [dict get $antennae $cell]] { +          lassign $antenna x2 y2 +          dict set resonant_antinodes [list $x $y] 1 +          dict set resonant_antinodes [list $x2 $y2] 1 + +          set xoff [expr {$x - $x2}] +          set yoff [expr {$y - $y2}] + +          set ax [expr {$x + $xoff}] +          set ay [expr {$y + $yoff}] +          if {$ax >= 0 && $ax < $input(w) && $ay >= 0 && $ay < $input(h)} { +            dict set antinodes [list $ax $ay] 1 + +            while {$ax >= 0 && $ax < $input(w) && $ay >= 0 && $ay < $input(h)} { +              dict set resonant_antinodes [list $ax $ay] 1 +              set ax [expr {$ax + $xoff}] +              set ay [expr {$ay + $yoff}] +            } +          } + +          set ax [expr {$x2 - $xoff}] +          set ay [expr {$y2 - $yoff}] +          if {$ax >= 0 && $ax < $input(w) && $ay >= 0 && $ay < $input(h)} { +            dict set antinodes [list $ax $ay] 1 + +            while {$ax >= 0 && $ax < $input(w) && $ay >= 0 && $ay < $input(h)} { +              dict set resonant_antinodes [list $ax $ay] 1 +              set ax [expr {$ax - $xoff}] +              set ay [expr {$ay - $yoff}] +            } +          } +        } +      } +      dict set antennae $cell [list $x $y] 1 +    } +  } +} + +puts "Antinodes: [llength [dict keys $antinodes]]" + +puts "" +puts {Part 2: Resonant antinode count in map} + +puts "Resonant Antinodes: [llength [dict keys $resonant_antinodes]]" + +#foreach ra [dict keys $resonant_antinodes] { +#  lassign $ra x y +#  lset input(debug) $y $x "#" +#} + +#foreach line $input(debug) { +#  puts [join $line ""] +#} | 
