Sha256: a2e70bc8fc5bef5e552e2ec0ba5053fff6ffa6671937a22749ec30ec54260110

Contents?: true

Size: 1.17 KB

Versions: 268

Compression:

Stored size: 1.17 KB

Contents

module AtbashCipher
  ( decode
  , encode
  ) where

import Prelude
import Data.Array (drop, filter, take, zip, (:))
import Data.Char.Unicode (isPunctuation, isSpace)
import Data.Map (Map, fromFoldable, lookup)
import Data.Maybe (Maybe)
import Data.String (fromCharArray, joinWith, toCharArray, toLower)
import Data.Traversable (traverse)

plain :: Array Char
plain = toCharArray "abcdefghijklmnopqrstuvwxyz0123456789"

cipher :: Array Char
cipher = toCharArray "zyxwvutsrqponmlkjihgfedcba0123456789"

decMap :: Map Char Char
decMap = fromFoldable (zip cipher plain)

encMap :: Map Char Char
encMap = fromFoldable (zip plain cipher)

decode :: String -> Maybe String
decode s = fromCharArray <$> dec (toCharArray s)
  where dec = filter ((/=) ' ')
              >>> traverse (_ `lookup` decMap)

chunks :: forall a. Int -> Array a -> Array (Array a)
chunks n [] = []
chunks n a = take n a : chunks n (drop n a)

encode :: String -> Maybe String
encode s = group <$> enc (toLower s # toCharArray)
  where enc = filter (not (isPunctuation || isSpace))
              >>> traverse (_ `lookup` encMap)
        group = chunks 5
                >>> map fromCharArray
                >>> joinWith " "

Version data entries

268 entries across 268 versions & 1 rubygems

Version Path
trackler-2.1.0.20 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.19 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.18 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.17 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.16 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.15 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.14 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.13 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.12 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.11 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.10 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.9 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.8 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.7 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.6 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.5 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.4 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.3 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.2 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
trackler-2.1.0.1 tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs