summaryrefslogtreecommitdiffstats
path: root/2024/tcl
diff options
context:
space:
mode:
Diffstat (limited to '2024/tcl')
-rwxr-xr-x2024/tcl/08.tcl69
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 ""]
+#}