summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleteoryx <alyx@aleteoryx.me>2024-12-09 20:42:52 -0500
committerAleteoryx <alyx@aleteoryx.me>2024-12-09 20:42:52 -0500
commit2807186474128e9d0fb52149630dc675b169cbfa (patch)
tree2d299fa9ae2db353b368b3be313e7fadd786bfc5
parentb16625cf6797da68f9c3c82a48509c7697d01040 (diff)
downloadadventofcode-2807186474128e9d0fb52149630dc675b169cbfa.tar.gz
adventofcode-2807186474128e9d0fb52149630dc675b169cbfa.tar.bz2
adventofcode-2807186474128e9d0fb52149630dc675b169cbfa.zip
grid mode in tcl helper
-rw-r--r--2024/input.01.txt (renamed from 2024/tcl/input.01.txt)0
-rw-r--r--2024/input.02.txt (renamed from 2024/tcl/input.02.txt)0
-rw-r--r--2024/input.03.txt (renamed from 2024/tcl/input.03.txt)0
-rw-r--r--2024/input.04.txt (renamed from 2024/tcl/input.04.txt)0
-rw-r--r--2024/input.05.txt (renamed from 2024/tcl/input.05.txt)0
-rw-r--r--2024/input.06.txt (renamed from 2024/tcl/input.06.txt)0
-rw-r--r--2024/input.07.txt (renamed from 2024/tcl/input.07.txt)0
-rwxr-xr-x2024/tcl/06.tcl49
-rw-r--r--2024/tcl/lib.tcl13
9 files changed, 33 insertions, 29 deletions
diff --git a/2024/tcl/input.01.txt b/2024/input.01.txt
index cf109b6..cf109b6 100644
--- a/2024/tcl/input.01.txt
+++ b/2024/input.01.txt
diff --git a/2024/tcl/input.02.txt b/2024/input.02.txt
index 4eeead7..4eeead7 100644
--- a/2024/tcl/input.02.txt
+++ b/2024/input.02.txt
diff --git a/2024/tcl/input.03.txt b/2024/input.03.txt
index 1da07fc..1da07fc 100644
--- a/2024/tcl/input.03.txt
+++ b/2024/input.03.txt
diff --git a/2024/tcl/input.04.txt b/2024/input.04.txt
index a6917f0..a6917f0 100644
--- a/2024/tcl/input.04.txt
+++ b/2024/input.04.txt
diff --git a/2024/tcl/input.05.txt b/2024/input.05.txt
index f8e5b0d..f8e5b0d 100644
--- a/2024/tcl/input.05.txt
+++ b/2024/input.05.txt
diff --git a/2024/tcl/input.06.txt b/2024/input.06.txt
index 0cfd1af..0cfd1af 100644
--- a/2024/tcl/input.06.txt
+++ b/2024/input.06.txt
diff --git a/2024/tcl/input.07.txt b/2024/input.07.txt
index 19ed730..19ed730 100644
--- a/2024/tcl/input.07.txt
+++ b/2024/input.07.txt
diff --git a/2024/tcl/06.tcl b/2024/tcl/06.tcl
index fa48061..39f980e 100755
--- a/2024/tcl/06.tcl
+++ b/2024/tcl/06.tcl
@@ -1,37 +1,30 @@
#!/bin/env tclsh
source lib.tcl
-setup 6
+setup 6 grid
puts {Part 1: Count unique guard coords}
-set map(grid) {}
-foreach line $input {
- lappend map(grid) [split $line ""]
-}
-set map(h) [llength $map(grid)]
-set map(w) [llength [lindex $map(grid) 0]]
-set map(visits) {}
-set map(debug) $map(grid)
-set guard(y) [lsearch $map(grid) *^*]
-set guard(x) [lsearch [lindex $map(grid) $guard(y)] ^]
+set input(visits) {}
+set guard(y) [lsearch $input(grid) *^*]
+set guard(x) [lsearch [lindex $input(grid) $guard(y)] ^]
set guard(dir) 0
set placed_obstructions {}
set rot_map {{-1 0} {0 1} {1 0} {0 -1}}
proc step_guard {} {
- global guard rot_map map
- dict set map(visits) [list $guard(y) $guard(x)] $guard(dir) 1
- lset map(debug) $guard(y) $guard(x) [lindex {^ > v <} $guard(dir)]
+ global guard rot_map input
+ dict set input(visits) [list $guard(y) $guard(x)] $guard(dir) 1
+ lset input(debug) $guard(y) $guard(x) [lindex {^ > v <} $guard(dir)]
lassign [lindex $rot_map $guard(dir)] ydir xdir
set ynew [expr {$guard(y) + $ydir}]
set xnew [expr {$guard(x) + $xdir}]
- if {$ynew < 0 || $ynew >= $map(h) || $xnew < 0 || $xnew >= $map(w)} { return 0 }
+ if {$ynew < 0 || $ynew >= $input(h) || $xnew < 0 || $xnew >= $input(w)} { return 0 }
- if {[lindex $map(grid) $ynew $xnew] == "#"} {
+ if {[lindex $input(grid) $ynew $xnew] == "#"} {
set guard(dir) [expr {($guard(dir) + 1) % 4}]
return 1
}
@@ -44,45 +37,45 @@ proc step_guard {} {
# sigh
set potential_loops 0
while {[step_guard]} {
- puts -nonewline "Unique coords: [llength [dict keys $map(visits)]]\r"
+ puts -nonewline "Unique coords: [llength [dict keys $input(visits)]]\r"
flush stdout
lassign [lindex $rot_map $guard(dir)] ydir xdir
set ynew [expr {$guard(y) + $ydir}]
set xnew [expr {$guard(x) + $xdir}]
- if {$ynew < 0 || $ynew >= $map(h) || $xnew < 0 || $xnew >= $map(w)} continue
+ if {$ynew < 0 || $ynew >= $input(h) || $xnew < 0 || $xnew >= $input(w)} continue
# it took me. 2 hours. to realize i needed the clause after the ||. god dammit.
- if {[dict exists $placed_obstructions [list $ynew $xnew]] || [dict exists $map(visits) [list $ynew $xnew]]} {
+ if {[dict exists $placed_obstructions [list $ynew $xnew]] || [dict exists $input(visits) [list $ynew $xnew]]} {
continue
}
- if {[dict exists $map(visits) [list $guard(y) $guard(x)] [expr {($guard(dir) + 1) % 4}]]} {
-# foreach line $map(debug) {
+ if {[dict exists $input(visits) [list $guard(y) $guard(x)] [expr {($guard(dir) + 1) % 4}]]} {
+# foreach line $input(debug) {
# puts [join $line ""]
# }
dict incr placed_obstructions [list $ynew $xnew] 1
incr potential_loops
- } elseif {[lindex $map(grid) $ynew $xnew] != "#"} {
- set map_backup [array get map]
+ } elseif {[lindex $input(grid) $ynew $xnew] != "#"} {
+ set input_backup [array get input]
set guard_backup [array get guard]
- lset map(grid) $ynew $xnew "#"
- lset map(debug) $ynew $xnew "#"
+ lset input(grid) $ynew $xnew "#"
+ lset input(debug) $ynew $xnew "#"
while {[step_guard]} {
- if {[dict exists $map(visits) [list $guard(y) $guard(x)] $guard(dir)]} {
+ if {[dict exists $input(visits) [list $guard(y) $guard(x)] $guard(dir)]} {
dict incr placed_obstructions [list $ynew $xnew] 2
incr potential_loops
break
}
}
- array set map $map_backup
+ array set input $input_backup
array set guard $guard_backup
}
}
-puts "Unique coords: [llength [dict keys $map(visits)]]"
+puts "Unique coords: [llength [dict keys $input(visits)]]"
puts ""
puts {Part 2: Number of potential looping obstructions}
diff --git a/2024/tcl/lib.tcl b/2024/tcl/lib.tcl
index 048bce5..588a5e8 100644
--- a/2024/tcl/lib.tcl
+++ b/2024/tcl/lib.tcl
@@ -5,7 +5,7 @@ proc setup {n {mode lines}} {
set n [string range 0$n end-1 end]
upvar input input
- set fd [open input.$n.txt]
+ set fd [open ../input.$n.txt]
switch -- $mode {
lines {
@@ -19,6 +19,17 @@ proc setup {n {mode lines}} {
fd {
set input $fd
}
+ grid {
+ set input(raw) [string trim [read $fd]]
+ set input(lines) [split $input(raw) "\r\n"]
+ set input(grid) {}
+ foreach line $input(lines) {
+ lappend input(grid) [split $line ""]
+ }
+ set input(h) [llength $input(grid)]
+ set input(w) [llength [lindex $input(grid) 0]]
+ set input(debug) $input(grid)
+ }
}
}