Sha256: 280909617946919eac18155235f50f01956c8fc53b7e1d3f5fe5ee645b54ab76

Contents?: true

Size: 769 Bytes

Versions: 396

Compression:

Stored size: 769 Bytes

Contents

module RailFenceCipher

open System

let track rails index = 
    let size = rails * 2 - 2
    let correct i = i % size = 0

    if correct index then 0
    elif correct (index - rails + 1) then rails - 1
    else [1 .. (rails - 2)] |> List.find (fun i -> correct (index - i) || correct (index - size + i))

let encode rails message = 
    message
    |> Seq.mapi (fun i c -> track rails i, c)
    |> Seq.groupBy fst
    |> Seq.map (fun (_, sequence) -> sequence|> Seq.map snd |> Array.ofSeq |> String)
    |> Seq.reduce (fun x y -> x + y)

let decode rails (message: string) =    
    [0 .. message.Length - 1]
    |> Seq.groupBy (track rails) 
    |> Seq.collect snd
    |> Seq.zip message
    |> Seq.sortBy snd
    |> Seq.map (fst >> string)
    |> Seq.reduce (+)

Version data entries

396 entries across 396 versions & 1 rubygems

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