module Exercise05 where -- May or may not be useful: computes the logarithm base 2 (rounded down) of the given number. -- You don't have to move this into the WETT tags if you want to use it. log2 :: (Integral a, Num b) => a -> b log2 = let go acc n = if n <= 1 then acc else go (acc + 1) (n `div` 2) in go 0 {-WETT-} decompose :: [Integer] -> [Integer] decompose ds = alldims ds $ minimum ds alldims :: [Integer] -> Integer -> [Integer] alldims _ 0 = [] alldims xs min | any odd xs = pr : half | otherwise = 0 : half where pr = product xs - product (map (\x -> if odd x then x-1 else x) xs) half = alldims (map (`div` 2) xs) (min `div` 2) {-TTEW-}