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 = helper ds (product ds) 1 {-ich fange mit 1er Würfeln an. Die Anzahl der 1er Würfel ist das Produkt der Zahlen aus ds. Danach kommen 2er Würfel: 2er Würfel haben je nach Dimension von ds verschiedene Größen. ds = 1 -> 2er Würfel sind 2^1=2 gross. ds = 2 -> 2er Würfel sind 2^2=4 gross. ds = 3 -> 2er Würfel sind 2^3=8 gross. ds = 4 -> 2er Würfel sind 2^4=16 gross. -} helper :: [Integer] -> Integer -> Integer -> [Integer] helper ds acc i | i > minimum ds = [] | otherwise = (acc - (2^length ds) * product [d `div` (i*2) | d <- ds]) : helper ds (product [d `div` (i*2) | d <- ds]) (i*2) {-TTEW-} {- aux :: [Integer] -> Integer -> [Integer] aux [] factor = [] aux [x] factor = [x] aux [x,y] factor = (y - (x * factor)) : [x] aux (x:y:xs) factor = aux (y - (x*factor):xs) factor ++ [x] -}