module Exercise_6 where import Data.Ratio import Data.Foldable import Data.Maybe {-WETT-} traceFractran :: [Rational] -> Integer -> [Integer] traceFractran fs 0 = [] traceFractran fs n = n:(traceFractran fs $ toInteger $ ceiling $ fromMaybe 0 $ find (\q -> denominator q == 1) $ map (fromInteger n*) fs) {-TTEW-} {-traceFractran fs n = traceFractranAux fs n [] --5 where -- traceFractranAux fs n acc 0 = acc traceFractranAux fs n acc = --c = let t = map ((fromInteger n)*) fs d = [q | q <- t, denominator q == 1] in if null d then reverse (n:acc) else reverse (traceFractranAux fs (toInteger (ceiling (head d))) (n:acc)) --(c-1)) -} {-traceFractran fs n = let t = map ((fromInteger n)*) fs d = [q | q <- t, denominator q == 1] in if null d then [n] else n:(traceFractran fs $ toInteger $ ceiling $ head d) -} --traceFractran fs n = -- let t:ts = filter (\q -> denominator q == 1) $ map ((fromInteger n)*) fs -- in n:(traceFractran fs $ toInteger $ ceiling $ t) isPowerOfTwo :: Integral a => a -> Bool isPowerOfTwo n | n == 1 = True | mod n 2 == 1 = False | otherwise = True && isPowerOfTwo (div n 2)