Ver código fonte

Another exercism problem done

master
Lachlan Jacob 5 anos atrás
pai
commit
0bae70fe4e

+ 25
- 0
exercism/fsharp/kindergarten-garden/KindergartenGarden.fs Ver arquivo

@@ -0,0 +1,25 @@
module KindergartenGarden

open System

type Plant =
| Grass
| Clover
| Radishes
| Violets

let getNumFromName (student: string) = int (student.[0]) - int ('A')

let getPlantChars (row: string) num =
[ for c in (row.[(num * 2)..(num * 2 + 1)]) -> c ]

let plants (diagram: string) (student: string) =
diagram.Split [| '\n' |] // Split the rows up
|> Seq.map (fun i -> (getPlantChars i (getNumFromName student))) // Go over each row getting the child's plants
|> Seq.reduce List.append // This flattens the list becuase before this it looks like [['a', 'b']['c', 'd']] and we want ['a', 'b', 'c', 'd']
|> List.map (fun i -> // Now for each plant character return the relavant plant type
match i with
| 'G' -> Grass
| 'C' -> Clover
| 'R' -> Radishes
| _ -> Violets)

+ 21
- 0
exercism/fsharp/kindergarten-garden/KindergartenGarden.fsproj Ver arquivo

@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>

<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<Compile Include="KindergartenGarden.fs" />
<Compile Include="KindergartenGardenTests.fs" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" />
<PackageReference Include="FsUnit.xUnit" Version="3.8.1" />
</ItemGroup>

</Project>

+ 72
- 0
exercism/fsharp/kindergarten-garden/KindergartenGardenTests.fs Ver arquivo

@@ -0,0 +1,72 @@
// This file was auto-generated based on version 1.1.1 of the canonical data.

module KindergartenGardenTests

open FsUnit.Xunit
open Xunit

open KindergartenGarden

[<Fact>]
let ``Partial garden - garden with single student`` () =
let student = "Alice"
let diagram = "RC\nGG"
let expected = [Plant.Radishes; Plant.Clover; Plant.Grass; Plant.Grass]
plants diagram student |> should equal expected

[<Fact>]
let ``Partial garden - different garden with single student`` () =
let student = "Alice"
let diagram = "VC\nRC"
let expected = [Plant.Violets; Plant.Clover; Plant.Radishes; Plant.Clover]
plants diagram student |> should equal expected

[<Fact>]
let ``Partial garden - garden with two students`` () =
let student = "Bob"
let diagram = "VVCG\nVVRC"
let expected = [Plant.Clover; Plant.Grass; Plant.Radishes; Plant.Clover]
plants diagram student |> should equal expected

[<Fact>]
let ``Partial garden - multiple students for the same garden with three students - second student's garden`` () =
let student = "Bob"
let diagram = "VVCCGG\nVVCCGG"
let expected = [Plant.Clover; Plant.Clover; Plant.Clover; Plant.Clover]
plants diagram student |> should equal expected

[<Fact>]
let ``Partial garden - multiple students for the same garden with three students - third student's garden`` () =
let student = "Charlie"
let diagram = "VVCCGG\nVVCCGG"
let expected = [Plant.Grass; Plant.Grass; Plant.Grass; Plant.Grass]
plants diagram student |> should equal expected

[<Fact>]
let ``Full garden - first student's garden`` () =
let student = "Alice"
let diagram = "VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"
let expected = [Plant.Violets; Plant.Radishes; Plant.Violets; Plant.Radishes]
plants diagram student |> should equal expected

[<Fact>]
let ``Full garden - second student's garden`` () =
let student = "Bob"
let diagram = "VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"
let expected = [Plant.Clover; Plant.Grass; Plant.Clover; Plant.Clover]
plants diagram student |> should equal expected

[<Fact>]
let ``Full garden - second to last student's garden`` () =
let student = "Kincaid"
let diagram = "VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"
let expected = [Plant.Grass; Plant.Clover; Plant.Clover; Plant.Grass]
plants diagram student |> should equal expected

[<Fact>]
let ``Full garden - last student's garden`` () =
let student = "Larry"
let diagram = "VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"
let expected = [Plant.Grass; Plant.Violets; Plant.Clover; Plant.Violets]
plants diagram student |> should equal expected


+ 80
- 0
exercism/fsharp/kindergarten-garden/README.md Ver arquivo

@@ -0,0 +1,80 @@
# Kindergarten Garden

Given a diagram, determine which plants each child in the kindergarten class is
responsible for.

The kindergarten class is learning about growing plants. The teacher
thought it would be a good idea to give them actual seeds, plant them in
actual dirt, and grow actual plants.

They've chosen to grow grass, clover, radishes, and violets.

To this end, the children have put little cups along the window sills, and
planted one type of plant in each cup, choosing randomly from the available
types of seeds.

```text
[window][window][window]
........................ # each dot represents a cup
........................
```

There are 12 children in the class:

- Alice, Bob, Charlie, David,
- Eve, Fred, Ginny, Harriet,
- Ileana, Joseph, Kincaid, and Larry.

Each child gets 4 cups, two on each row. Their teacher assigns cups to
the children alphabetically by their names.

The following diagram represents Alice's plants:

```text
[window][window][window]
VR......................
RG......................
```

In the first row, nearest the windows, she has a violet and a radish. In the
second row she has a radish and some grass.

Your program will be given the plants from left-to-right starting with
the row nearest the windows. From this, it should be able to determine
which plants belong to each student.

For example, if it's told that the garden looks like so:

```text
[window][window][window]
VRCGVVRVCGGCCGVRGCVCGCGV
VRCCCGCRRGVCGCRVVCVGCGCV
```

Then if asked for Alice's plants, it should provide:

- Violets, radishes, violets, radishes

While asking for Bob's plants would yield:

- Clover, grass, clover, clover

## Running the tests

To run the tests, run the command `dotnet test` from within the exercise directory.

## Autoformatting the code

F# source code can be formatted with the [Fantomas](https://github.com/fsprojects/fantomas) tool.

After installing it with `dotnet tool restore`, run `dotnet fantomas .` to format code within the current directory.

## Further information

For more detailed information about the F# track, including how to get help if
you're having trouble, please visit the exercism.io [F# language page](http://exercism.io/languages/fsharp/resources).

## Source

Random musings during airplane trip. [http://jumpstartlab.com](http://jumpstartlab.com)


Carregando…
Cancelar
Salvar