Sha256: b50484dde57013d1d68325a6ce74b10cc15f3eeacc0a6fe0dd50879437bdd0cc

Contents?: true

Size: 1.1 KB

Versions: 134

Compression:

Stored size: 1.1 KB

Contents

module CryptoSquare

open System

let private charsToString chars = String(Array.ofSeq chars)

let private chunksOfSize n seq = 
    seq 
    |> Seq.mapi(fun i x -> i / n, x)
    |> Seq.groupBy fst
    |> Seq.map (fun (_, g) -> g |> Seq.map snd |> charsToString)

let private transpose seq = 
    seq
    |> Seq.collect(fun s -> s |> Seq.mapi(fun i e -> (i, e)))
    |> Seq.groupBy(fst)
    |> Seq.map(fun (_, s) -> s |> Seq.map snd |> charsToString)    

let private normalizedPlaintext (input: string) = seq { for c in input do if Char.IsLetterOrDigit c then yield Char.ToLowerInvariant c } |> charsToString

let private size (input: string) = 
    input 
    |> normalizedPlaintext 
    |> String.length 
    |> float 
    |> Math.Sqrt 
    |> ceil 
    |> int

let private plaintextSegments (input: string) = 
    chunksOfSize (size input) (normalizedPlaintext input) 
    |> List.ofSeq

let ciphertext (input: string) = 
    let chunks = plaintextSegments input 
    let numberOfChunks = List.length chunks
    
    chunks
    |> transpose 
    |> Seq.map (fun x -> x.PadRight(numberOfChunks))
    |> String.concat " "

Version data entries

134 entries across 134 versions & 1 rubygems

Version Path
trackler-2.2.1.119 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.118 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.117 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.116 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.115 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.114 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.113 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.111 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.110 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.109 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.108 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.107 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.106 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.105 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.104 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.103 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.102 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.101 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.100 tracks/fsharp/exercises/crypto-square/Example.fs
trackler-2.2.1.99 tracks/fsharp/exercises/crypto-square/Example.fs