diff options
| -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-x | 2024/tcl/06.tcl | 49 | ||||
| -rw-r--r-- | 2024/tcl/lib.tcl | 13 | 
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) +    }    }  } | 
