Posted to tcl by schelte at Sat Dec 03 23:16:04 GMT 2022view pretty
#!/usr/bin/tclsh proc prio {ch} { set p [scan $ch "%c"] return [expr {$p > 96 ? $p - 96 : $p - 64 + 26}] } set input [read stdin] set t0 0 set t1 0 foreach line [split $input "\n"] { set items [split $line {}] set n [expr {[llength $items] / 2}] foreach ch [lrange $items 0 [expr {$n - 1}]] { if {[lsearch -exact -start $n $items $ch] >= 0} { incr t0 [prio $ch] break } } foreach ch [lsort -unique $items] { dict incr count $ch } if {([incr linenum] % 3) == 0} { foreach ch [dict keys [dict filter $count value 3]] { incr t1 [prio $ch] } set count {} } } puts "part1: $t0" puts "part2: $t1"