Sha256: 82dbf4178487790b26e96f1393260ced585007ef52bd2bc579cff3cb5432fbeb

Contents?: true

Size: 949 Bytes

Versions: 134

Compression:

Stored size: 949 Bytes

Contents

module AtbashCipher

open System

let rec mapMaybe f list = 
    match list with
    | [] -> []
    | x::xs -> 
        match f x with
        | Some(a) -> a :: mapMaybe f xs
        | None -> mapMaybe f xs

let stringFromChars (chars:char seq) = String(Array.ofSeq chars)
let chunksOfSize n xs = 
    xs 
    |> Seq.mapi(fun i x -> i / n, x)
    |> Seq.groupBy fst
    |> Seq.map (fun (_, g) -> Seq.map snd g)

let mapLetter letter = if Char.IsDigit letter then (letter, letter) else (letter, (char)((int)'z' - (int)letter + (int)'a'))
let lettersMap = ['a' .. 'z'] @ ['0'..'9'] |> List.map mapLetter |> Map.ofList

let encodeLetter letter = Map.tryFind (Char.ToLower letter) lettersMap
let encodeInChunks = String.concat " " << Seq.map stringFromChars << chunksOfSize 5
let encodeStr = encodeInChunks << mapMaybe encodeLetter
    
let encode (str:string) = str |> List.ofSeq |> encodeStr

let decode (str:string) = (encode str).Replace(" ", "")

Version data entries

134 entries across 134 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.179 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.178 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.177 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.176 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.175 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.174 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.173 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.172 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.171 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.170 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.169 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.167 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.166 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.165 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.164 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.163 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.162 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.161 tracks/fsharp/exercises/atbash-cipher/Example.fs
trackler-2.2.1.160 tracks/fsharp/exercises/atbash-cipher/Example.fs