proc setup {n {mode lines}} { puts "Advent of Code 2024 day $n Solution" puts "" puts "" set n [string range 0$n end-1 end] upvar input input set fd [open ../input.$n.txt] switch -- $mode { lines { set input [split [string trim [read $fd]] "\r\n"] close $fd } data { set input [string trim [read $fd]] close $fd } 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) } } } proc regroup {pat {var input}} { upvar $var list set list2 {} set cur {} foreach el $list { if {[string match $pat $el]} { if {$cur != {}} { lappend list2 $cur set cur {} } } else { lappend cur $el } } lappend list2 $cur set list $list2 } proc sindex {str args} { set ret {} foreach arg $args { append ret [string index $str $arg] } return $ret } proc lrindex {list args} { set ret {} foreach arg $args { lappend ret [lindex $list {*}$arg] } return $ret }