module Exercise_12 where import Prelude hiding (lookup) import Data.List (nub) import Data.List (sortOn) isPrime :: Int -> Bool isPrime n | n <= 1 = False | otherwise = primeAux (n-1) where primeAux 1 = True primeAux i = n `mod` i /= 0 && primeAux (i-1) -- returns all primes up to the passed number primes :: Int -> [Int] primes n = [i | i<-[2..n], isPrime i] {-WETT-} encrypt :: String -> String encrypt s = fst $ unzip $ filter zippedIsPrime mapped ++ filter (not . zippedIsPrime) mapped where mapped = zip s $ enumFromTo 1 $ length s zippedIsPrime x = isPrime $ snd x decrypt :: String -> String -- 51 Token -- decrypt s = snd $ unzip $ sortOn fst $ (zip p $ take pl s) ++ (zip withoutprimes $ drop pl s) -- where sl = length s -- p = primes sl -- pl = length p -- withoutprimes = filter (`notElem` p) $ enumFromTo 1 sl -- 50 Token decrypt s = snd $ unzip $ sortOn fst $ (zip p $ take pl s) ++ (zip (filter (`notElem` p) $ enumFromTo 1 sl) $ drop pl s) where sl = length s p = primes sl pl = length p -- decrypt s = snd $ unzip $ sortOn fst $ (zip p $ take pl s) ++ (zip (filter (`notElem` p) $ enumFromTo 1 sl) $ drop pl s) -- where sl = length s -- p = primes sl -- pl = length p {-TTEW-}