diff --git a/day02/sol.tcl b/day02/sol.tcl new file mode 100755 index 0000000..3474f39 --- /dev/null +++ b/day02/sol.tcl @@ -0,0 +1,23 @@ +#!/usr/bin/env tclsh +source ../prelude.tcl +set input stdin +set total 0 +set power 0 +while {[gets $input line] >= 0} { + regexp {Game (\d+): (.*)} $line _ num takes + set min(red) 0 + set min(blue) 0 + set min(green) 0 + foreach t [split $takes ";"] { + foreach {n color} [string map {, {}} $t] { + set min($color) [max $min($color) $n] + } + } + if {$min(red) <= 12 && $min(blue) <= 14 && $min(green) <= 13} { + incr total $num + } + incr power [expr {$min(red) * $min(blue) * $min(green)}] + #puts "${min(red)} ${min(blue)} ${min(green)}" +} +puts $total +puts $power diff --git a/prelude.tcl b/prelude.tcl new file mode 100644 index 0000000..19e91c1 --- /dev/null +++ b/prelude.tcl @@ -0,0 +1,16 @@ +package require Tcl 8.6 +namespace import tcl::mathfunc::min +namespace import tcl::mathfunc::max + +proc ladd {list} { + set t 0 + foreach x $list { incr t $x } + return $t +} + +proc lmul {list} { + set p 1 + foreach x $list { set p [eval {$p * $x}] } + return $p +} +