Sha256: d0d0b8b8603bd197dfe3c20fbca7ffa30159d414b44a1ad5f1adca43cf36b33c

Contents?: true

Size: 1.31 KB

Versions: 322

Compression:

Stored size: 1.31 KB

Contents

module AtbashCipher exposing (..)

import String
import Dict
import Char
import Regex exposing (HowMany(All), regex)


encode : String -> String
encode plain =
    let
        translate =
            toTranslator alphabet reversedAlphabet
    in
        plain
            |> String.toLower
            |> String.filter (\c -> Char.isLower c || Char.isDigit c)
            |> String.map translate
            |> insertEvery 5 " "


decode : String -> String
decode cipher =
    let
        translate =
            toTranslator reversedAlphabet alphabet
    in
        cipher
            |> String.filter ((/=) ' ')
            |> String.map translate


alphabet : String
alphabet =
    "abcdefghijklmnopqrstuvwxyz"


reversedAlphabet : String
reversedAlphabet =
    -- AKA tebahpla
    String.reverse alphabet


toTranslator : String -> String -> Char -> Char
toTranslator from to =
    let
        table =
            List.map2 (,) (String.toList from) (String.toList to)
                |> Dict.fromList

        translate key =
            Dict.get key table
                |> Maybe.withDefault key
    in
        translate


insertEvery : Int -> String -> String -> String
insertEvery size insertion string =
    Regex.replace All
        (regex (".{" ++ toString size ++ "}(?!$)"))
        (\{ match } -> match ++ insertion)
        string

Version data entries

322 entries across 322 versions & 1 rubygems

Version Path
trackler-2.2.1.104 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.103 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.102 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.101 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.100 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.99 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.98 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.97 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.96 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.95 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.94 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.93 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.92 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.91 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.90 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.89 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.88 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.87 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.86 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm
trackler-2.2.1.85 tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm