Start w
# (io, w) = stdio w
# bag = fromList (makeBag (read io))
- = (one ['shiny gold'] bag, dec $ two ['shiny gold'] bag)
+ = (one bag ['shiny gold'], dec $ two bag ['shiny gold'])
-one color bag = dec $ length $ filter id $ map (canContain bag color) $ keys bag
-two color bag = inc $ sum [n*two c bag\\(n, c)<-findWithDefault [] color bag]
+one bag color = dec $ length $ filter id $ map (canContain bag color) $ keys bag
+two bag color = inc $ sum [n*two bag c\\(n, c)<-findWithDefault [] color bag]
makeBag :: [Char] -> [([Char], [(Int, [Char])])]
makeBag ls = [(b, mkItem c)\\[b,c]<-map (split [' contain ']) $ split ['.\n'] ls]