module Exercise_12 where import Data.List (nub, elemIndex, (\\), sortBy) import Data.Maybe import Data.Ord 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 = s' id ++ s' not where s' p = [s!!(i-1) | i <- [1..length s], p $ isPrime i] decrypt :: String -> String decrypt s = map fst $ sortBy (comparing snd) $ zip s $ p id ++ p not where p f = filter (f . isPrime) [1..length s] {-TTEW-}