Sha256: a8c5ab5837f835388524e090d5ee49ceeee5c1ca8ae1b1f41c6002027004563e

Contents?: true

Size: 1.23 KB

Versions: 7

Compression:

Stored size: 1.23 KB

Contents

module KindergartenGarden

type Plant = Violets | Radishes | Clover | Grass

let plantsPerChildPerRow = 2
let rowSeparator = '\n'

let private defaultChildren = ["Alice"; "Bob"; "Charlie"; "David";
                               "Eve"; "Fred"; "Ginny"; "Harriet";
                               "Ileana"; "Joseph"; "Kincaid"; "Larry"]

let private plantFromCode code =
    match code with
    | 'V' -> Plant.Violets
    | 'R' -> Plant.Radishes
    | 'C' -> Plant.Clover
    | 'G' -> Plant.Grass
    | x -> failwithf "%c is an invalid plant code" x

let private plantsInRow (row: string) = 
    Seq.map plantFromCode row 
    |> Seq.chunkBySize plantsPerChildPerRow
    |> Seq.map List.ofArray

let toGarden children (windowSills: string) =     
    let rows = windowSills.Split rowSeparator
    let row1 = plantsInRow rows.[0]
    let row2 = plantsInRow rows.[1]
    Seq.zip3 (children |> List.sort) row1 row2 
    |> Seq.map (fun (child, plants1, plants2) -> (child, plants1 @ plants2))
    |> Map.ofSeq

let plantsForCustomStudents diagram student students = 
    let garden = toGarden students diagram
    defaultArg (Map.tryFind student garden) []

let plantsForDefaultStudents diagram student = plantsForCustomStudents diagram student defaultChildren

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
trackler-2.2.1.51 tracks/fsharp/exercises/kindergarten-garden/Example.fs
trackler-2.2.1.50 tracks/fsharp/exercises/kindergarten-garden/Example.fs
trackler-2.2.1.49 tracks/fsharp/exercises/kindergarten-garden/Example.fs
trackler-2.2.1.48 tracks/fsharp/exercises/kindergarten-garden/Example.fs
trackler-2.2.1.47 tracks/fsharp/exercises/kindergarten-garden/Example.fs
trackler-2.2.1.46 tracks/fsharp/exercises/kindergarten-garden/Example.fs
trackler-2.2.1.45 tracks/fsharp/exercises/kindergarten-garden/Example.fs