mirror of
https://github.com/correl/elm.git
synced 2025-03-07 04:35:48 -10:00
Add triangle exercise (closes #30)
This commit is contained in:
parent
14cf73ed94
commit
eed2e19e56
6 changed files with 105 additions and 2 deletions
|
@ -15,7 +15,8 @@
|
|||
"run-length-encoding",
|
||||
"difference-of-squares",
|
||||
"anagram",
|
||||
"raindrops"
|
||||
"raindrops",
|
||||
"triangle"
|
||||
],
|
||||
"deprecated": [
|
||||
|
||||
|
|
|
@ -15,7 +15,8 @@
|
|||
"./exercises/run-length-encoding",
|
||||
"./exercises/difference-of-squares",
|
||||
"./exercises/anagram",
|
||||
"./exercises/raindrops"
|
||||
"./exercises/raindrops",
|
||||
"./exercises/triangle"
|
||||
],
|
||||
"exposed-modules": [],
|
||||
"dependencies": {
|
||||
|
|
1
exercises/triangle/Triangle.elm
Normal file
1
exercises/triangle/Triangle.elm
Normal file
|
@ -0,0 +1 @@
|
|||
module Triangle (..) where
|
21
exercises/triangle/Triangle.example
Normal file
21
exercises/triangle/Triangle.example
Normal file
|
@ -0,0 +1,21 @@
|
|||
module Triangle (..) where
|
||||
|
||||
import Set
|
||||
|
||||
|
||||
triangleKind : number -> number -> number -> Result String String
|
||||
triangleKind x y z =
|
||||
if x <= 0 || y <= 0 || z <= 0 then
|
||||
Err "Invalid lengths"
|
||||
else if x + y <= z || x + z <= y || y + z <= x then
|
||||
Err "Violates inequality"
|
||||
else
|
||||
case Set.size (Set.fromList [ x, y, z ]) of
|
||||
1 ->
|
||||
Ok "equilateral"
|
||||
|
||||
2 ->
|
||||
Ok "isosceles"
|
||||
|
||||
_ ->
|
||||
Ok "scalene"
|
63
exercises/triangle/TriangleTests.elm
Normal file
63
exercises/triangle/TriangleTests.elm
Normal file
|
@ -0,0 +1,63 @@
|
|||
module Main (..) where
|
||||
|
||||
import Task
|
||||
import Console
|
||||
import ElmTest exposing (..)
|
||||
import Triangle exposing (triangleKind)
|
||||
|
||||
|
||||
tests : Test
|
||||
tests =
|
||||
suite
|
||||
"triangleKind"
|
||||
[ test
|
||||
"equilateral triangles have equal sides"
|
||||
(assertEqual (Ok "equilateral") (triangleKind 2 2 2))
|
||||
, test
|
||||
"larger equilateral triangles also have equal sides"
|
||||
(assertEqual (Ok "equilateral") (triangleKind 10 10 10))
|
||||
, test
|
||||
"isosceles triangles have last two sides equal"
|
||||
(assertEqual (Ok "isosceles") (triangleKind 3 4 4))
|
||||
, test
|
||||
"isosceles triangles have first and last sides equal"
|
||||
(assertEqual (Ok "isosceles") (triangleKind 4 3 4))
|
||||
, test
|
||||
"isosceles triangles have two first sides equal"
|
||||
(assertEqual (Ok "isosceles") (triangleKind 4 4 3))
|
||||
, test
|
||||
"isosceles triangles have in fact exactly two sides equal"
|
||||
(assertEqual (Ok "isosceles") (triangleKind 10 10 2))
|
||||
, test
|
||||
"scalene triangles have no equal sides"
|
||||
(assertEqual (Ok "scalene") (triangleKind 3 4 5))
|
||||
, test
|
||||
"scalene triangles have no equal sides at a larger scale too"
|
||||
(assertEqual (Ok "scalene") (triangleKind 10 11 12))
|
||||
, test
|
||||
"scalene triangles have no equal sides at a larger scale too 2"
|
||||
(assertEqual (Ok "scalene") (triangleKind 5 4 2))
|
||||
, test
|
||||
"very small triangles are legal"
|
||||
(assertEqual (Ok "scalene") (triangleKind 0.4 0.6 0.3))
|
||||
, test
|
||||
"triangles with no size are illegal"
|
||||
(assertEqual (Err "Invalid lengths") (triangleKind 0 0 0))
|
||||
, test
|
||||
"triangles with negative sides are illegal"
|
||||
(assertEqual (Err "Invalid lengths") (triangleKind 3 4 -5))
|
||||
, test
|
||||
"triangles violating triangle inequality are illegal 1"
|
||||
(assertEqual (Err "Violates inequality") (triangleKind 1 1 3))
|
||||
, test
|
||||
"triangles violating triangle inequality are illegal 2"
|
||||
(assertEqual (Err "Violates inequality") (triangleKind 2 4 2))
|
||||
, test
|
||||
"triangles violating triangle inequality are illegal 3"
|
||||
(assertEqual (Err "Violates inequality") (triangleKind 7 3 2))
|
||||
]
|
||||
|
||||
|
||||
port runner : Signal (Task.Task x ())
|
||||
port runner =
|
||||
Console.run (consoleRunner tests)
|
16
exercises/triangle/elm-package.json
Normal file
16
exercises/triangle/elm-package.json
Normal file
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"version": "1.0.0",
|
||||
"summary": "Exercism problems in Elm.",
|
||||
"repository": "https://github.com/exercism/xelm.git",
|
||||
"license": "BSD3",
|
||||
"source-directories": [
|
||||
"."
|
||||
],
|
||||
"exposed-modules": [],
|
||||
"dependencies": {
|
||||
"deadfoxygrandpa/elm-test": "3.0.1 <= v < 4.0.0",
|
||||
"elm-lang/core": "2.0.0 <= v < 4.0.0",
|
||||
"laszlopandy/elm-console": "1.1.0 <= v < 2.0.0"
|
||||
},
|
||||
"elm-version": "0.15.0 <= v < 0.17.0"
|
||||
}
|
Loading…
Add table
Reference in a new issue