summaryrefslogblamecommitdiffstats
path: root/2024/tcl/08.tcl
blob: e62ed69e4d346f8bd14db136220f49724d941b7a (plain) (tree)




































































                                                                                
#!/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 ""]
#}