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