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