Posted to tcl by libertas at Mon Dec 07 22:20:32 GMT 2020view pretty

# Error: 
# 0  ->  dark blue   contains: {2 {dark violet}}    
# .... 2 .... dark violet
# 0  ->  dark violet   contains: {0 {other bags.}}    
# .... 0 .... other bags.
# 7 !!!!!!!!!!!!!!!!!!
# can't use empty string as operand of "*"
#    while executing
# "expr {$::cnt + $nr + $nr * [compute2 $b]}"
#    (procedure "compute2" line 9)

#!/usr/bin/env tclsh


set lall [list {shiny gold} {{2 {dark red}} {2 {dark pink}}} {dark red} {{2 {dark orange}}} {dark orange} {{2 {dark yellow}}} {dark yellow} {{2 {dark green}}} {dark green} {{2 {dark blue}}} {dark blue} {{2 {dark violet}}} {dark violet} {{0 {other bags.}}} {dark pink} {{2 {dark violet}}}]
set all [dict create {*}$lall]

set cnt 0
proc compute2 {tp} {
	set contains [dict get $::all $tp]
	puts "$::cnt  ->  $tp   contains: $contains    "
	foreach bagset $contains {
		set nr [lindex $bagset 0]
		set b [lindex $bagset 1]
		puts " .... $nr .... $b"
		if {$nr != 0} {
			set ::cnt [expr {$::cnt + $nr + $nr * [compute2 $b]}]
		} else {puts "[info level] !!!!!!!!!!!!!!!!!!"; return 0}
	}
}

puts ">> [compute2 "shiny gold"]"

puts "day 07 part2: $cnt"