module Exercise_12 where import Data.List (nub, elemIndex) import Data.Maybe (fromJust) {-H12-} 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 !! (k-1) | k <- sc] where sc = scheme $ length s scheme n = primes n ++ [k | k <- [1..n], not (isPrime k)] decrypt :: String -> String decrypt s = [s !! (fromJust $ elemIndex k sc) | k <- [1..n] ] where sc = scheme $ n n = length s {-TTEW-}