mirror of
https://github.com/correl/elm.git
synced 2024-12-22 19:17:27 +00:00
add pascals-triangle exercise
This commit is contained in:
parent
243915c4eb
commit
ecccfcbef0
9 changed files with 2291 additions and 0 deletions
11
config.json
11
config.json
|
@ -321,6 +321,17 @@
|
|||
"topics": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"uuid": "a730ca85-057d-db80-e44e-25b8028acede6337cca",
|
||||
"slug": "pascals-triangle",
|
||||
"core": false,
|
||||
"unlocked_by": null,
|
||||
"difficulty": 4,
|
||||
"topics": [
|
||||
"Lists",
|
||||
"Control-flow"
|
||||
]
|
||||
}
|
||||
],
|
||||
"foregone": [
|
||||
|
|
51
exercises/pascals-triangle/README.md
Normal file
51
exercises/pascals-triangle/README.md
Normal file
|
@ -0,0 +1,51 @@
|
|||
# Pascals Triangle
|
||||
|
||||
Compute Pascal's triangle up to a given number of rows.
|
||||
|
||||
In Pascal's Triangle each number is computed by adding the numbers to
|
||||
the right and left of the current position in the previous row.
|
||||
|
||||
```text
|
||||
1
|
||||
1 1
|
||||
1 2 1
|
||||
1 3 3 1
|
||||
1 4 6 4 1
|
||||
# ... etc
|
||||
```
|
||||
|
||||
## Elm Installation
|
||||
|
||||
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
||||
installation and learning resources.
|
||||
|
||||
## Writing the Code
|
||||
|
||||
The first time you start an exercise, you'll need to ensure you have the
|
||||
appropriate dependencies installed.
|
||||
|
||||
```bash
|
||||
$ npm install
|
||||
```
|
||||
|
||||
Execute the tests with:
|
||||
|
||||
```bash
|
||||
$ npm test
|
||||
```
|
||||
|
||||
Automatically run tests again when you save changes:
|
||||
|
||||
```bash
|
||||
$ npm run watch
|
||||
```
|
||||
|
||||
As you work your way through the test suite, be sure to remove the `skip <|`
|
||||
calls from each test until you get them all passing!
|
||||
|
||||
## Source
|
||||
|
||||
Pascal's Triangle at Wolfram Math World [http://mathworld.wolfram.com/PascalsTriangle.html](http://mathworld.wolfram.com/PascalsTriangle.html)
|
||||
|
||||
## Submitting Incomplete Solutions
|
||||
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
1
exercises/pascals-triangle/Triangle.elm
Normal file
1
exercises/pascals-triangle/Triangle.elm
Normal file
|
@ -0,0 +1 @@
|
|||
module Triangle exposing (..)
|
23
exercises/pascals-triangle/Triangle.example.elm
Normal file
23
exercises/pascals-triangle/Triangle.example.elm
Normal file
|
@ -0,0 +1,23 @@
|
|||
module Triangle exposing (rows)
|
||||
|
||||
import List
|
||||
|
||||
|
||||
nextRow : List Int -> List Int
|
||||
nextRow row =
|
||||
List.map2 (+) (0 :: row) (row ++ [ 0 ])
|
||||
|
||||
|
||||
rows : Int -> List (List Int)
|
||||
rows n =
|
||||
let
|
||||
loop i row =
|
||||
if i == n then
|
||||
[]
|
||||
else
|
||||
row :: loop (i + 1) (nextRow row)
|
||||
in
|
||||
if n < 0 then
|
||||
[]
|
||||
else
|
||||
loop 0 [ 1 ]
|
14
exercises/pascals-triangle/elm-package.json
Normal file
14
exercises/pascals-triangle/elm-package.json
Normal file
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"version": "3.0.0",
|
||||
"summary": "Exercism problems in Elm.",
|
||||
"repository": "https://github.com/exercism/elm.git",
|
||||
"license": "BSD3",
|
||||
"source-directories": [
|
||||
"."
|
||||
],
|
||||
"exposed-modules": [],
|
||||
"dependencies": {
|
||||
"elm-lang/core": "5.0.0 <= v < 6.0.0"
|
||||
},
|
||||
"elm-version": "0.18.0 <= v < 0.19.0"
|
||||
}
|
2127
exercises/pascals-triangle/package-lock.json
generated
Normal file
2127
exercises/pascals-triangle/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
14
exercises/pascals-triangle/package.json
Normal file
14
exercises/pascals-triangle/package.json
Normal file
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"description": "Exercism/Elm",
|
||||
"repository": "https://github.com/exercism/elm.git",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"postinstall": "elm-package install -y",
|
||||
"watch": "elm-test --watch",
|
||||
"test": "elm-test"
|
||||
},
|
||||
"dependencies": {
|
||||
"elm": "0.18.0",
|
||||
"elm-test": "0.18.3"
|
||||
}
|
||||
}
|
34
exercises/pascals-triangle/tests/Tests.elm
Normal file
34
exercises/pascals-triangle/tests/Tests.elm
Normal file
|
@ -0,0 +1,34 @@
|
|||
module Tests exposing (..)
|
||||
|
||||
import Expect
|
||||
import Test exposing (..)
|
||||
import Triangle exposing (rows)
|
||||
|
||||
|
||||
tests : Test
|
||||
tests =
|
||||
describe "Triangle"
|
||||
[ test "no rows" <|
|
||||
\() ->
|
||||
Expect.equal [] (rows 0)
|
||||
, skip <|
|
||||
test "single row" <|
|
||||
\() ->
|
||||
Expect.equal [ [ 1 ] ] (rows 1)
|
||||
, skip <|
|
||||
test "two rows" <|
|
||||
\() ->
|
||||
Expect.equal [ [ 1 ], [ 1, 1 ] ] (rows 2)
|
||||
, skip <|
|
||||
test "three rows" <|
|
||||
\() ->
|
||||
Expect.equal [ [ 1 ], [ 1, 1 ], [ 1, 2, 1 ] ] (rows 3)
|
||||
, skip <|
|
||||
test "four rows" <|
|
||||
\() ->
|
||||
Expect.equal [ [ 1 ], [ 1, 1 ], [ 1, 2, 1 ], [ 1, 3, 3, 1 ] ] (rows 4)
|
||||
, skip <|
|
||||
test "negative rows" <|
|
||||
\() ->
|
||||
Expect.equal [] (rows -1)
|
||||
]
|
16
exercises/pascals-triangle/tests/elm-package.json
Normal file
16
exercises/pascals-triangle/tests/elm-package.json
Normal file
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"version": "3.0.0",
|
||||
"summary": "Exercism problems in Elm.",
|
||||
"repository": "https://github.com/exercism/elm.git",
|
||||
"license": "BSD3",
|
||||
"source-directories": [
|
||||
".",
|
||||
".."
|
||||
],
|
||||
"exposed-modules": [],
|
||||
"dependencies": {
|
||||
"elm-lang/core": "5.0.0 <= v < 6.0.0",
|
||||
"elm-community/elm-test": "4.0.0 <= v < 5.0.0"
|
||||
},
|
||||
"elm-version": "0.18.0 <= v < 0.19.0"
|
||||
}
|
Loading…
Reference in a new issue