trackler 2.0.5.1 → 2.0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/common/exercises/tree-building/description.md +15 -3
- data/lib/trackler/version.rb +1 -1
- data/tracks/ecmascript/exercises/queen-attack/queen-attack.spec.js +1 -1
- data/tracks/elm/.gitignore +1 -0
- data/tracks/elm/.travis.yml +3 -3
- data/tracks/elm/SETUP.md +16 -3
- data/tracks/elm/bin/build.sh +10 -10
- data/tracks/elm/bin/install-elm-format +1 -1
- data/tracks/elm/docs/INSTALLATION.md +2 -2
- data/tracks/elm/docs/TESTS.md +3 -3
- data/tracks/elm/elm-package.json +5 -5
- data/tracks/elm/exercises/accumulate/{Accumulate.example → Accumulate.example.elm} +0 -0
- data/tracks/elm/exercises/accumulate/{AccumulateTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/accumulate/elm-package.json +4 -4
- data/tracks/elm/exercises/accumulate/package.json +13 -0
- data/tracks/elm/exercises/allergies/{Allergies.example → Allergies.example.elm} +2 -2
- data/tracks/elm/exercises/allergies/{AllergiesTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/allergies/elm-package.json +4 -4
- data/tracks/elm/exercises/allergies/package.json +13 -0
- data/tracks/elm/exercises/anagram/{Anagram.example → Anagram.example.elm} +0 -0
- data/tracks/elm/exercises/anagram/{AnagramTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/anagram/elm-package.json +4 -4
- data/tracks/elm/exercises/anagram/package.json +13 -0
- data/tracks/elm/exercises/atbash-cipher/{AtbashCipher.example → AtbashCipher.example.elm} +0 -0
- data/tracks/elm/exercises/atbash-cipher/{AtbashCipherTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/atbash-cipher/elm-package.json +4 -4
- data/tracks/elm/exercises/atbash-cipher/package.json +13 -0
- data/tracks/elm/exercises/bob/{Bob.example → Bob.example.elm} +0 -0
- data/tracks/elm/exercises/bob/{BobTests.elm → Tests.elm} +3 -3
- data/tracks/elm/exercises/bob/elm-package.json +4 -4
- data/tracks/elm/exercises/bob/package.json +13 -0
- data/tracks/elm/exercises/difference-of-squares/{DifferenceOfSquares.example → DifferenceOfSquares.example.elm} +1 -1
- data/tracks/elm/exercises/difference-of-squares/{DifferenceOfSquaresTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/difference-of-squares/elm-package.json +4 -4
- data/tracks/elm/exercises/difference-of-squares/package.json +13 -0
- data/tracks/elm/exercises/gigasecond/{Gigasecond.example → Gigasecond.example.elm} +0 -0
- data/tracks/elm/exercises/gigasecond/{GigasecondTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/gigasecond/elm-package.json +4 -4
- data/tracks/elm/exercises/gigasecond/package.json +13 -0
- data/tracks/elm/exercises/grade-school/{GradeSchool.example → GradeSchool.example.elm} +1 -1
- data/tracks/elm/exercises/grade-school/{GradeSchoolTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/grade-school/elm-package.json +4 -4
- data/tracks/elm/exercises/grade-school/package.json +13 -0
- data/tracks/elm/exercises/hamming/{Hamming.example → Hamming.example.elm} +0 -0
- data/tracks/elm/exercises/hamming/{HammingTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/hamming/elm-package.json +4 -4
- data/tracks/elm/exercises/hamming/package.json +13 -0
- data/tracks/elm/exercises/hello-world/HelloWorld.elm +8 -8
- data/tracks/elm/exercises/hello-world/{HelloWorld.example → HelloWorld.example.elm} +0 -0
- data/tracks/elm/exercises/hello-world/{HelloWorldTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/hello-world/elm-package.json +4 -4
- data/tracks/elm/exercises/hello-world/package.json +13 -0
- data/tracks/elm/exercises/hello-world/yarn.lock +1136 -0
- data/tracks/elm/exercises/largest-series-product/{LargestSeriesProduct.example → LargestSeriesProduct.example.elm} +0 -0
- data/tracks/elm/exercises/largest-series-product/{LargestSeriesProductTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/largest-series-product/elm-package.json +4 -4
- data/tracks/elm/exercises/largest-series-product/package.json +13 -0
- data/tracks/elm/exercises/leap/{Leap.example → Leap.example.elm} +0 -0
- data/tracks/elm/exercises/leap/{LeapTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/leap/elm-package.json +4 -4
- data/tracks/elm/exercises/leap/package.json +13 -0
- data/tracks/elm/exercises/list-ops/{ListOps.example → ListOps.example.elm} +0 -0
- data/tracks/elm/exercises/list-ops/{ListOpsTests.elm → Tests.elm} +14 -14
- data/tracks/elm/exercises/list-ops/elm-package.json +4 -4
- data/tracks/elm/exercises/list-ops/package.json +13 -0
- data/tracks/elm/exercises/nucleotide-count/{NucleotideCount.example → NucleotideCount.example.elm} +0 -0
- data/tracks/elm/exercises/nucleotide-count/{NucleotideCountTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/nucleotide-count/elm-package.json +4 -4
- data/tracks/elm/exercises/nucleotide-count/package.json +13 -0
- data/tracks/elm/exercises/pangram/{Pangram.example → Pangram.example.elm} +0 -0
- data/tracks/elm/exercises/pangram/{PangramTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/pangram/elm-package.json +4 -4
- data/tracks/elm/exercises/pangram/package.json +13 -0
- data/tracks/elm/exercises/phone-number/{PhoneNumber.example → PhoneNumber.example.elm} +0 -0
- data/tracks/elm/exercises/phone-number/{PhoneNumberTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/phone-number/elm-package.json +4 -4
- data/tracks/elm/exercises/phone-number/package.json +13 -0
- data/tracks/elm/exercises/raindrops/{Raindrops.example → Raindrops.example.elm} +0 -0
- data/tracks/elm/exercises/raindrops/{RaindropsTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/raindrops/elm-package.json +4 -4
- data/tracks/elm/exercises/raindrops/package.json +13 -0
- data/tracks/elm/exercises/rna-transcription/{RNATranscription.example → RNATranscription.example.elm} +0 -0
- data/tracks/elm/exercises/rna-transcription/{RNATranscriptionTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/rna-transcription/elm-package.json +4 -4
- data/tracks/elm/exercises/rna-transcription/package.json +13 -0
- data/tracks/elm/exercises/robot-simulator/{RobotSimulator.example → RobotSimulator.example.elm} +0 -0
- data/tracks/elm/exercises/robot-simulator/{RobotSimulatorTests.elm → Tests.elm} +4 -4
- data/tracks/elm/exercises/robot-simulator/elm-package.json +4 -4
- data/tracks/elm/exercises/robot-simulator/package.json +13 -0
- data/tracks/elm/exercises/roman-numerals/{RomanNumerals.example → RomanNumerals.example.elm} +0 -0
- data/tracks/elm/exercises/roman-numerals/{RomanNumeralsTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/roman-numerals/elm-package.json +4 -4
- data/tracks/elm/exercises/roman-numerals/package.json +13 -0
- data/tracks/elm/exercises/run-length-encoding/{RunLengthEncoding.example → RunLengthEncoding.example.elm} +2 -2
- data/tracks/elm/exercises/run-length-encoding/{RunLengthEncodingTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/run-length-encoding/elm-package.json +4 -4
- data/tracks/elm/exercises/run-length-encoding/package.json +13 -0
- data/tracks/elm/exercises/say/{Say.example → Say.example.elm} +0 -0
- data/tracks/elm/exercises/say/{SayTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/say/elm-package.json +4 -4
- data/tracks/elm/exercises/say/package.json +13 -0
- data/tracks/elm/exercises/scrabble-score/{ScrabbleScore.example → ScrabbleScore.example.elm} +0 -0
- data/tracks/elm/exercises/scrabble-score/{ScrabbleScoreTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/scrabble-score/elm-package.json +4 -4
- data/tracks/elm/exercises/scrabble-score/package.json +13 -0
- data/tracks/elm/exercises/series/{Series.example → Series.example.elm} +0 -0
- data/tracks/elm/exercises/series/{SeriesTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/series/elm-package.json +4 -4
- data/tracks/elm/exercises/series/package.json +13 -0
- data/tracks/elm/exercises/space-age/{SpaceAge.example → SpaceAge.example.elm} +0 -0
- data/tracks/elm/exercises/space-age/{SpaceAgeTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/space-age/elm-package.json +4 -4
- data/tracks/elm/exercises/space-age/package.json +13 -0
- data/tracks/elm/exercises/strain/{Strain.example → Strain.example.elm} +0 -0
- data/tracks/elm/exercises/strain/{StrainTests.elm → Tests.elm} +3 -3
- data/tracks/elm/exercises/strain/elm-package.json +4 -4
- data/tracks/elm/exercises/strain/package.json +13 -0
- data/tracks/elm/exercises/sublist/{Sublist.example → Sublist.example.elm} +0 -0
- data/tracks/elm/exercises/sublist/{SublistTests.elm → Tests.elm} +5 -5
- data/tracks/elm/exercises/sublist/elm-package.json +4 -4
- data/tracks/elm/exercises/sublist/package.json +13 -0
- data/tracks/elm/exercises/sum-of-multiples/{SumOfMultiples.example → SumOfMultiples.example.elm} +1 -1
- data/tracks/elm/exercises/sum-of-multiples/{SumOfMultiplesTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/sum-of-multiples/elm-package.json +4 -4
- data/tracks/elm/exercises/sum-of-multiples/package.json +13 -0
- data/tracks/elm/exercises/triangle/{TriangleTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/triangle/{Triangle.example → Triangle.example.elm} +1 -1
- data/tracks/elm/exercises/triangle/elm-package.json +4 -4
- data/tracks/elm/exercises/triangle/package.json +13 -0
- data/tracks/elm/exercises/word-count/{WordCountTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/word-count/{WordCount.example → WordCount.example.elm} +0 -0
- data/tracks/elm/exercises/word-count/elm-package.json +4 -4
- data/tracks/elm/exercises/word-count/package.json +13 -0
- data/tracks/elm/package.json +10 -0
- data/tracks/fsharp/exercises/beer-song/HINTS.md +2 -0
- data/tracks/fsharp/exercises/grade-school/HINTS.md +3 -0
- data/tracks/fsharp/exercises/tree-building/Example.fs +7 -3
- data/tracks/fsharp/exercises/tree-building/TreeBuilding.fs +7 -4
- data/tracks/fsharp/exercises/tree-building/TreeBuildingTest.fs +49 -49
- data/tracks/fsharp/exercises/wordy/HINTS.md +3 -0
- data/tracks/java/config.json +13 -1
- data/tracks/java/exercises/anagram/build.gradle +0 -1
- data/tracks/java/exercises/anagram/src/test/java/AnagramTest.java +17 -13
- data/tracks/java/exercises/etl/build.gradle +0 -2
- data/tracks/java/exercises/grade-school/build.gradle +0 -1
- data/tracks/java/exercises/grade-school/src/test/java/SchoolTest.java +17 -13
- data/tracks/java/exercises/linked-list/build.gradle +0 -1
- data/tracks/java/exercises/linked-list/src/test/java/DequeTest.java +16 -15
- data/tracks/java/exercises/meetup/build.gradle +0 -1
- data/tracks/java/exercises/meetup/src/test/java/MeetupTest.java +96 -95
- data/tracks/java/exercises/nth-prime/build.gradle +0 -1
- data/tracks/java/exercises/nth-prime/src/test/java/PrimeTest.java +6 -5
- data/tracks/java/exercises/palindrome-products/build.gradle +18 -0
- data/tracks/java/exercises/palindrome-products/src/example/java/Palindromes.java +77 -0
- data/tracks/java/exercises/palindrome-products/src/main/java/.keep +0 -0
- data/tracks/java/exercises/palindrome-products/src/test/java/PalindromesTest.java +162 -0
- data/tracks/java/exercises/settings.gradle +2 -0
- data/tracks/java/exercises/sum-of-multiples/src/example/java/SumOfMultiples.java +1 -2
- data/tracks/java/exercises/sum-of-multiples/src/main/java/SumOfMultiples.java +0 -1
- data/tracks/java/exercises/sum-of-multiples/src/test/{SumOfMultiplesTest.java → java/SumOfMultiplesTest.java} +12 -24
- data/tracks/java/exercises/wordy/build.gradle +17 -0
- data/tracks/java/exercises/wordy/src/example/java/WordProblemSolver.java +57 -0
- data/tracks/java/exercises/wordy/src/main/java/WordProblemSolver.java +5 -0
- data/tracks/java/exercises/wordy/src/test/java/WordProblemSolverTest.java +119 -0
- data/tracks/lua/docs/TESTS.md +1 -1
- data/tracks/ruby/lib/generator.rb +17 -8
- data/tracks/ruby/test/fixtures/exercises/alpha/.meta/.version +1 -0
- data/tracks/ruby/test/fixtures/exercises/alpha/alpha_test.rb +1 -0
- data/tracks/ruby/test/fixtures/exercises/alpha/example.rb +5 -0
- data/tracks/ruby/test/fixtures/exercises/alpha/example.tt +1 -0
- data/tracks/ruby/test/fixtures/metadata/exercises/alpha/canonical-data.json +11 -0
- data/tracks/ruby/test/generator_test.rb +54 -1
- data/tracks/swift/docs/TESTS.md +12 -12
- data/tracks/swift/{img/page_assets/001-splash.png → docs/img/tests_001-splash.png} +0 -0
- data/tracks/swift/{img/page_assets/002-templateChooser.png → docs/img/tests_002-templateChooser.png} +0 -0
- data/tracks/swift/{img/page_assets/003-nameProject.jpg → docs/img/tests_003-nameProject.jpg} +0 -0
- data/tracks/swift/{img/page_assets/004-saveProject.jpg → docs/img/tests_004-saveProject.jpg} +0 -0
- data/tracks/swift/{img/page_assets/005-folderLayout.png → docs/img/tests_005-folderLayout.png} +0 -0
- data/tracks/swift/{img/page_assets/006-newProjectInitial.jpg → docs/img/tests_006-newProjectInitial.jpg} +0 -0
- data/tracks/swift/{img/page_assets/007-fileInspectorUpdate.png → docs/img/tests_007-fileInspectorUpdate.png} +0 -0
- data/tracks/swift/{img/page_assets/008-templateChooserSwift.png → docs/img/tests_008-templateChooserSwift.png} +0 -0
- data/tracks/swift/{img/page_assets/009-importTestSource.png → docs/img/tests_009-importTestSource.png} +0 -0
- data/tracks/swift/{img/page_assets/010-testsImportExample.png → docs/img/tests_010-testsImportExample.png} +0 -0
- data/tracks/swift/{img/page_assets/011-finalLayoutExample.png → docs/img/tests_011-finalLayoutExample.png} +0 -0
- metadata +122 -134
- data/tracks/elm/exercises/accumulate/runtests.bat +0 -1
- data/tracks/elm/exercises/accumulate/runtests.sh +0 -2
- data/tracks/elm/exercises/allergies/runtests.bat +0 -1
- data/tracks/elm/exercises/allergies/runtests.sh +0 -2
- data/tracks/elm/exercises/anagram/runtests.bat +0 -1
- data/tracks/elm/exercises/anagram/runtests.sh +0 -2
- data/tracks/elm/exercises/atbash-cipher/runtests.bat +0 -1
- data/tracks/elm/exercises/atbash-cipher/runtests.sh +0 -2
- data/tracks/elm/exercises/bob/runtests.bat +0 -1
- data/tracks/elm/exercises/bob/runtests.sh +0 -2
- data/tracks/elm/exercises/difference-of-squares/runtests.bat +0 -1
- data/tracks/elm/exercises/difference-of-squares/runtests.sh +0 -2
- data/tracks/elm/exercises/gigasecond/runtests.bat +0 -1
- data/tracks/elm/exercises/gigasecond/runtests.sh +0 -2
- data/tracks/elm/exercises/grade-school/runtests.bat +0 -1
- data/tracks/elm/exercises/grade-school/runtests.sh +0 -2
- data/tracks/elm/exercises/hamming/runtests.bat +0 -1
- data/tracks/elm/exercises/hamming/runtests.sh +0 -2
- data/tracks/elm/exercises/hello-world/runtests.bat +0 -1
- data/tracks/elm/exercises/hello-world/runtests.sh +0 -2
- data/tracks/elm/exercises/largest-series-product/runtests.bat +0 -1
- data/tracks/elm/exercises/largest-series-product/runtests.sh +0 -2
- data/tracks/elm/exercises/leap/runtests.bat +0 -1
- data/tracks/elm/exercises/leap/runtests.sh +0 -2
- data/tracks/elm/exercises/list-ops/runtests.bat +0 -1
- data/tracks/elm/exercises/list-ops/runtests.sh +0 -2
- data/tracks/elm/exercises/nucleotide-count/runtests.bat +0 -1
- data/tracks/elm/exercises/nucleotide-count/runtests.sh +0 -2
- data/tracks/elm/exercises/pangram/runtests.bat +0 -1
- data/tracks/elm/exercises/pangram/runtests.sh +0 -2
- data/tracks/elm/exercises/phone-number/runtests.bat +0 -1
- data/tracks/elm/exercises/phone-number/runtests.sh +0 -2
- data/tracks/elm/exercises/raindrops/runtests.bat +0 -1
- data/tracks/elm/exercises/raindrops/runtests.sh +0 -2
- data/tracks/elm/exercises/rna-transcription/runtests.bat +0 -1
- data/tracks/elm/exercises/rna-transcription/runtests.sh +0 -2
- data/tracks/elm/exercises/robot-simulator/runtests.bat +0 -1
- data/tracks/elm/exercises/robot-simulator/runtests.sh +0 -2
- data/tracks/elm/exercises/roman-numerals/runtests.bat +0 -1
- data/tracks/elm/exercises/roman-numerals/runtests.sh +0 -2
- data/tracks/elm/exercises/run-length-encoding/runtests.bat +0 -1
- data/tracks/elm/exercises/run-length-encoding/runtests.sh +0 -2
- data/tracks/elm/exercises/say/runtests.bat +0 -1
- data/tracks/elm/exercises/say/runtests.sh +0 -2
- data/tracks/elm/exercises/scrabble-score/runtests.bat +0 -1
- data/tracks/elm/exercises/scrabble-score/runtests.sh +0 -2
- data/tracks/elm/exercises/series/runtests.bat +0 -1
- data/tracks/elm/exercises/series/runtests.sh +0 -2
- data/tracks/elm/exercises/space-age/runtests.bat +0 -1
- data/tracks/elm/exercises/space-age/runtests.sh +0 -2
- data/tracks/elm/exercises/strain/runtests.bat +0 -1
- data/tracks/elm/exercises/strain/runtests.sh +0 -2
- data/tracks/elm/exercises/sublist/runtests.bat +0 -1
- data/tracks/elm/exercises/sublist/runtests.sh +0 -2
- data/tracks/elm/exercises/sum-of-multiples/runtests.bat +0 -1
- data/tracks/elm/exercises/sum-of-multiples/runtests.sh +0 -2
- data/tracks/elm/exercises/triangle/runtests.bat +0 -1
- data/tracks/elm/exercises/triangle/runtests.sh +0 -2
- data/tracks/elm/exercises/word-count/runtests.bat +0 -1
- data/tracks/elm/exercises/word-count/runtests.sh +0 -2
File without changes
|
@@ -1,6 +1,6 @@
|
|
1
1
|
port module Main exposing (..)
|
2
2
|
|
3
|
-
import Test.Runner.Node exposing (run)
|
3
|
+
import Test.Runner.Node exposing (run, TestProgram)
|
4
4
|
import Json.Encode exposing (Value)
|
5
5
|
import Test exposing (..)
|
6
6
|
import Expect
|
@@ -31,9 +31,9 @@ tests =
|
|
31
31
|
, test "partially matching sublist at start" <|
|
32
32
|
\() -> Expect.equal Sublist (sublist [ 1, 1, 2 ] [ 1, 1, 1, 2 ])
|
33
33
|
, test "sublist early in huge list" <|
|
34
|
-
\() -> Expect.equal Sublist (sublist [ 3, 4, 5 ]
|
34
|
+
\() -> Expect.equal Sublist (sublist [ 3, 4, 5 ] (List.range 1 100000))
|
35
35
|
, test "huge sublist not in list" <|
|
36
|
-
\() -> Expect.equal Unequal (sublist
|
36
|
+
\() -> Expect.equal Unequal (sublist (List.range 10 5001) (List.range 1 5000))
|
37
37
|
, test "superlist at start" <|
|
38
38
|
\() -> Expect.equal Superlist (sublist [ 1, 2, 3, 4, 5 ] [ 1, 2, 3 ])
|
39
39
|
, test "superlist in middle" <|
|
@@ -43,7 +43,7 @@ tests =
|
|
43
43
|
, test "partially matching superlist at start" <|
|
44
44
|
\() -> Expect.equal Superlist (sublist [ 1, 1, 1, 2 ] [ 1, 1, 2 ])
|
45
45
|
, test "superlist early in huge list" <|
|
46
|
-
\() -> Expect.equal Superlist (sublist
|
46
|
+
\() -> Expect.equal Superlist (sublist (List.range 1 100000) [ 3, 4, 5 ])
|
47
47
|
, test "recurring values sublist" <|
|
48
48
|
\() -> Expect.equal Sublist (sublist [ 1, 2, 1, 2, 3 ] [ 1, 2, 3, 1, 2, 1, 2, 3, 2, 1 ])
|
49
49
|
, test "recurring values unequal" <|
|
@@ -51,7 +51,7 @@ tests =
|
|
51
51
|
]
|
52
52
|
|
53
53
|
|
54
|
-
main :
|
54
|
+
main : TestProgram
|
55
55
|
main =
|
56
56
|
run emit tests
|
57
57
|
|
@@ -8,9 +8,9 @@
|
|
8
8
|
],
|
9
9
|
"exposed-modules": [],
|
10
10
|
"dependencies": {
|
11
|
-
"elm-lang/core": "
|
12
|
-
"elm-community/elm-test": "
|
13
|
-
"rtfeldman/node-test-runner": "
|
11
|
+
"elm-lang/core": "5.0.0 <= v < 6.0.0",
|
12
|
+
"elm-community/elm-test": "3.0.0 <= v < 4.0.0",
|
13
|
+
"rtfeldman/node-test-runner": "3.0.0 <= v < 4.0.0"
|
14
14
|
},
|
15
|
-
"elm-version": "0.
|
15
|
+
"elm-version": "0.18.0 <= v < 0.19.0"
|
16
16
|
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
{
|
2
|
+
"description": "Excercism/Elm",
|
3
|
+
"repository": "https://github.com/exercism/xelm.git",
|
4
|
+
"license": "MIT",
|
5
|
+
"scripts": {
|
6
|
+
"postinstall": "elm-package install -y",
|
7
|
+
"test": "elm-test Tests.elm"
|
8
|
+
},
|
9
|
+
"dependencies": {
|
10
|
+
"elm": "^0.18.0",
|
11
|
+
"elm-test": "^0.18.0"
|
12
|
+
}
|
13
|
+
}
|
data/tracks/elm/exercises/sum-of-multiples/{SumOfMultiples.example → SumOfMultiples.example.elm}
RENAMED
@@ -3,7 +3,7 @@ module SumOfMultiples exposing (..)
|
|
3
3
|
|
4
4
|
sumOfMultiples : List Int -> Int -> Int
|
5
5
|
sumOfMultiples multiples limit =
|
6
|
-
List.sum (List.filter (inMultiples multiples)
|
6
|
+
List.sum (List.filter (inMultiples multiples) (List.range 1 (limit - 1)))
|
7
7
|
|
8
8
|
|
9
9
|
inMultiples : List Int -> Int -> Bool
|
@@ -1,6 +1,6 @@
|
|
1
1
|
port module Main exposing (..)
|
2
2
|
|
3
|
-
import Test.Runner.Node exposing (run)
|
3
|
+
import Test.Runner.Node exposing (run, TestProgram)
|
4
4
|
import Json.Encode exposing (Value)
|
5
5
|
import Test exposing (..)
|
6
6
|
import Expect
|
@@ -25,7 +25,7 @@ tests =
|
|
25
25
|
]
|
26
26
|
|
27
27
|
|
28
|
-
main :
|
28
|
+
main : TestProgram
|
29
29
|
main =
|
30
30
|
run emit tests
|
31
31
|
|
@@ -8,9 +8,9 @@
|
|
8
8
|
],
|
9
9
|
"exposed-modules": [],
|
10
10
|
"dependencies": {
|
11
|
-
"elm-lang/core": "
|
12
|
-
"elm-community/elm-test": "
|
13
|
-
"rtfeldman/node-test-runner": "
|
11
|
+
"elm-lang/core": "5.0.0 <= v < 6.0.0",
|
12
|
+
"elm-community/elm-test": "3.0.0 <= v < 4.0.0",
|
13
|
+
"rtfeldman/node-test-runner": "3.0.0 <= v < 4.0.0"
|
14
14
|
},
|
15
|
-
"elm-version": "0.
|
15
|
+
"elm-version": "0.18.0 <= v < 0.19.0"
|
16
16
|
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
{
|
2
|
+
"description": "Excercism/Elm",
|
3
|
+
"repository": "https://github.com/exercism/xelm.git",
|
4
|
+
"license": "MIT",
|
5
|
+
"scripts": {
|
6
|
+
"postinstall": "elm-package install -y",
|
7
|
+
"test": "elm-test Tests.elm"
|
8
|
+
},
|
9
|
+
"dependencies": {
|
10
|
+
"elm": "^0.18.0",
|
11
|
+
"elm-test": "^0.18.0"
|
12
|
+
}
|
13
|
+
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
port module Main exposing (..)
|
2
2
|
|
3
|
-
import Test.Runner.Node exposing (run)
|
3
|
+
import Test.Runner.Node exposing (run, TestProgram)
|
4
4
|
import Json.Encode exposing (Value)
|
5
5
|
import Test exposing (..)
|
6
6
|
import Expect
|
@@ -41,7 +41,7 @@ tests =
|
|
41
41
|
]
|
42
42
|
|
43
43
|
|
44
|
-
main :
|
44
|
+
main : TestProgram
|
45
45
|
main =
|
46
46
|
run emit tests
|
47
47
|
|
@@ -14,7 +14,7 @@ version =
|
|
14
14
|
2
|
15
15
|
|
16
16
|
|
17
|
-
triangleKind :
|
17
|
+
triangleKind : comparable -> comparable -> comparable -> Result String Triangle
|
18
18
|
triangleKind x y z =
|
19
19
|
if x <= 0 || y <= 0 || z <= 0 then
|
20
20
|
Err "Invalid lengths"
|
@@ -8,9 +8,9 @@
|
|
8
8
|
],
|
9
9
|
"exposed-modules": [],
|
10
10
|
"dependencies": {
|
11
|
-
"elm-lang/core": "
|
12
|
-
"elm-community/elm-test": "
|
13
|
-
"rtfeldman/node-test-runner": "
|
11
|
+
"elm-lang/core": "5.0.0 <= v < 6.0.0",
|
12
|
+
"elm-community/elm-test": "3.0.0 <= v < 4.0.0",
|
13
|
+
"rtfeldman/node-test-runner": "3.0.0 <= v < 4.0.0"
|
14
14
|
},
|
15
|
-
"elm-version": "0.
|
15
|
+
"elm-version": "0.18.0 <= v < 0.19.0"
|
16
16
|
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
{
|
2
|
+
"description": "Excercism/Elm",
|
3
|
+
"repository": "https://github.com/exercism/xelm.git",
|
4
|
+
"license": "MIT",
|
5
|
+
"scripts": {
|
6
|
+
"postinstall": "elm-package install -y",
|
7
|
+
"test": "elm-test Tests.elm"
|
8
|
+
},
|
9
|
+
"dependencies": {
|
10
|
+
"elm": "^0.18.0",
|
11
|
+
"elm-test": "^0.18.0"
|
12
|
+
}
|
13
|
+
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
port module Main exposing (..)
|
2
2
|
|
3
|
-
import Test.Runner.Node exposing (run)
|
3
|
+
import Test.Runner.Node exposing (run, TestProgram)
|
4
4
|
import Json.Encode exposing (Value)
|
5
5
|
import Test exposing (..)
|
6
6
|
import Expect
|
@@ -38,7 +38,7 @@ tests =
|
|
38
38
|
]
|
39
39
|
|
40
40
|
|
41
|
-
main :
|
41
|
+
main : TestProgram
|
42
42
|
main =
|
43
43
|
run emit tests
|
44
44
|
|
File without changes
|
@@ -8,9 +8,9 @@
|
|
8
8
|
],
|
9
9
|
"exposed-modules": [],
|
10
10
|
"dependencies": {
|
11
|
-
"elm-lang/core": "
|
12
|
-
"elm-community/elm-test": "
|
13
|
-
"rtfeldman/node-test-runner": "
|
11
|
+
"elm-lang/core": "5.0.0 <= v < 6.0.0",
|
12
|
+
"elm-community/elm-test": "3.0.0 <= v < 4.0.0",
|
13
|
+
"rtfeldman/node-test-runner": "3.0.0 <= v < 4.0.0"
|
14
14
|
},
|
15
|
-
"elm-version": "0.
|
15
|
+
"elm-version": "0.18.0 <= v < 0.19.0"
|
16
16
|
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
{
|
2
|
+
"description": "Excercism/Elm",
|
3
|
+
"repository": "https://github.com/exercism/xelm.git",
|
4
|
+
"license": "MIT",
|
5
|
+
"scripts": {
|
6
|
+
"postinstall": "elm-package install -y",
|
7
|
+
"test": "elm-test Tests.elm"
|
8
|
+
},
|
9
|
+
"dependencies": {
|
10
|
+
"elm": "^0.18.0",
|
11
|
+
"elm-test": "^0.18.0"
|
12
|
+
}
|
13
|
+
}
|
@@ -0,0 +1,3 @@
|
|
1
|
+
## Hints
|
2
|
+
For this exercise the following F# feature comes in handy:
|
3
|
+
- The [Map](https://en.wikibooks.org/wiki/F_Sharp_Programming/Sets_and_Maps#Maps) type associates keys with values. It is very similar to .NET's `Dictionary<TKey, TValue>` type, but with one major difference: `Map` is [immutable](https://fsharpforfunandprofit.com/posts/correctness-immutability/).
|
@@ -5,13 +5,16 @@ type Tree =
|
|
5
5
|
| Branch of int * Tree list
|
6
6
|
| Leaf of int
|
7
7
|
|
8
|
+
let rootNodeRecordId = 0
|
9
|
+
|
8
10
|
let addOrAppend key value map =
|
9
11
|
let list = defaultArg (Map.tryFind key map) []
|
10
12
|
Map.add key (list @ [value]) map
|
11
13
|
|
12
14
|
let invalidNode previous x =
|
13
|
-
|
14
|
-
x.
|
15
|
+
match x.RecordId with
|
16
|
+
| 0 -> x.ParentId <> rootNodeRecordId
|
17
|
+
| _ -> x.ParentId >= x.RecordId || x.RecordId <> previous + 1
|
15
18
|
|
16
19
|
let rec recordsToMap previous map remainder =
|
17
20
|
match remainder with
|
@@ -20,7 +23,8 @@ let rec recordsToMap previous map remainder =
|
|
20
23
|
| x::_ when invalidNode previous x ->
|
21
24
|
failwith "Invalid record"
|
22
25
|
| x::xs ->
|
23
|
-
let
|
26
|
+
let parentId = if x.RecordId = rootNodeRecordId then -1 else x.ParentId
|
27
|
+
let updatedMap = addOrAppend parentId x.RecordId map
|
24
28
|
recordsToMap x.RecordId updatedMap xs
|
25
29
|
|
26
30
|
let rec mapToTree map recordId =
|
@@ -11,7 +11,7 @@ let buildTree records =
|
|
11
11
|
if List.isEmpty records' then failwith "Empty input"
|
12
12
|
else
|
13
13
|
let root = records'.[0]
|
14
|
-
if (root.ParentId =
|
14
|
+
if (root.ParentId = 0 |> not) then
|
15
15
|
failwith "Root node is invalid"
|
16
16
|
else
|
17
17
|
if (root.RecordId = 0 |> not) then failwith "Root node is invalid"
|
@@ -20,14 +20,17 @@ let buildTree records =
|
|
20
20
|
let mutable leafs = []
|
21
21
|
|
22
22
|
for r in records' do
|
23
|
-
if (r.ParentId > r.RecordId || r.ParentId = r.RecordId) then
|
23
|
+
if (r.RecordId <> 0 && (r.ParentId > r.RecordId || r.ParentId = r.RecordId)) then
|
24
24
|
failwith "Nodes with invalid parents"
|
25
25
|
else
|
26
26
|
if r.RecordId <> prev + 1 then
|
27
27
|
failwith "Non-continuous list"
|
28
|
-
else
|
28
|
+
else
|
29
29
|
prev <- r.RecordId
|
30
|
-
|
30
|
+
if (r.RecordId = 0) then
|
31
|
+
leafs <- (-1, r.RecordId) :: leafs
|
32
|
+
else
|
33
|
+
leafs <- (r.ParentId, r.RecordId) :: leafs
|
31
34
|
|
32
35
|
leafs <- List.rev leafs
|
33
36
|
let root = leafs.[0]
|
@@ -8,7 +8,7 @@ open TreeBuilding
|
|
8
8
|
let ``One node`` () =
|
9
9
|
let input =
|
10
10
|
[
|
11
|
-
{ RecordId = 0; ParentId =
|
11
|
+
{ RecordId = 0; ParentId = 0 }
|
12
12
|
]
|
13
13
|
let expected = Leaf 0
|
14
14
|
Assert.That(buildTree input, Is.EqualTo(expected))
|
@@ -17,9 +17,9 @@ let ``One node`` () =
|
|
17
17
|
let ``Three nodes in order`` () =
|
18
18
|
let input =
|
19
19
|
[
|
20
|
-
{ RecordId = 0; ParentId =
|
21
|
-
{ RecordId = 1; ParentId =
|
22
|
-
{ RecordId = 2; ParentId =
|
20
|
+
{ RecordId = 0; ParentId = 0 };
|
21
|
+
{ RecordId = 1; ParentId = 0 };
|
22
|
+
{ RecordId = 2; ParentId = 0 };
|
23
23
|
]
|
24
24
|
let expected = Branch (0, [Leaf 1; Leaf 2])
|
25
25
|
Assert.That(buildTree input, Is.EqualTo(expected))
|
@@ -28,9 +28,9 @@ let ``Three nodes in order`` () =
|
|
28
28
|
let ``Three nodes in reverse order`` () =
|
29
29
|
let input =
|
30
30
|
[
|
31
|
-
{ RecordId = 2; ParentId =
|
32
|
-
{ RecordId = 1; ParentId =
|
33
|
-
{ RecordId = 0; ParentId =
|
31
|
+
{ RecordId = 2; ParentId = 0 };
|
32
|
+
{ RecordId = 1; ParentId = 0 };
|
33
|
+
{ RecordId = 0; ParentId = 0 };
|
34
34
|
]
|
35
35
|
let expected = Branch (0, [Leaf 1; Leaf 2])
|
36
36
|
Assert.That(buildTree input, Is.EqualTo(expected))
|
@@ -39,10 +39,10 @@ let ``Three nodes in reverse order`` () =
|
|
39
39
|
let ``More than two children`` () =
|
40
40
|
let input =
|
41
41
|
[
|
42
|
-
{ RecordId = 3; ParentId =
|
43
|
-
{ RecordId = 2; ParentId =
|
44
|
-
{ RecordId = 1; ParentId =
|
45
|
-
{ RecordId = 0; ParentId =
|
42
|
+
{ RecordId = 3; ParentId = 0 };
|
43
|
+
{ RecordId = 2; ParentId = 0 };
|
44
|
+
{ RecordId = 1; ParentId = 0 };
|
45
|
+
{ RecordId = 0; ParentId = 0 };
|
46
46
|
]
|
47
47
|
let expected = Branch (0, [Leaf 1; Leaf 2; Leaf 3])
|
48
48
|
Assert.That(buildTree input, Is.EqualTo(expected))
|
@@ -51,13 +51,13 @@ let ``More than two children`` () =
|
|
51
51
|
let ``Binary tree`` () =
|
52
52
|
let input =
|
53
53
|
[
|
54
|
-
{ RecordId = 5; ParentId =
|
55
|
-
{ RecordId = 3; ParentId =
|
56
|
-
{ RecordId = 2; ParentId =
|
57
|
-
{ RecordId = 4; ParentId =
|
58
|
-
{ RecordId = 1; ParentId =
|
59
|
-
{ RecordId = 0; ParentId =
|
60
|
-
{ RecordId = 6; ParentId =
|
54
|
+
{ RecordId = 5; ParentId = 1 };
|
55
|
+
{ RecordId = 3; ParentId = 2 };
|
56
|
+
{ RecordId = 2; ParentId = 0 };
|
57
|
+
{ RecordId = 4; ParentId = 1 };
|
58
|
+
{ RecordId = 1; ParentId = 0 };
|
59
|
+
{ RecordId = 0; ParentId = 0 };
|
60
|
+
{ RecordId = 6; ParentId = 2 }
|
61
61
|
]
|
62
62
|
let expected = Branch (0, [ Branch (1, [Leaf 4; Leaf 5]);
|
63
63
|
Branch (2, [Leaf 3; Leaf 6]) ])
|
@@ -67,13 +67,13 @@ let ``Binary tree`` () =
|
|
67
67
|
let ``Unbalanced tree`` () =
|
68
68
|
let input =
|
69
69
|
[
|
70
|
-
{ RecordId = 5; ParentId =
|
71
|
-
{ RecordId = 3; ParentId =
|
72
|
-
{ RecordId = 2; ParentId =
|
73
|
-
{ RecordId = 4; ParentId =
|
74
|
-
{ RecordId = 1; ParentId =
|
75
|
-
{ RecordId = 0; ParentId =
|
76
|
-
{ RecordId = 6; ParentId =
|
70
|
+
{ RecordId = 5; ParentId = 2 };
|
71
|
+
{ RecordId = 3; ParentId = 2 };
|
72
|
+
{ RecordId = 2; ParentId = 0 };
|
73
|
+
{ RecordId = 4; ParentId = 1 };
|
74
|
+
{ RecordId = 1; ParentId = 0 };
|
75
|
+
{ RecordId = 0; ParentId = 0 };
|
76
|
+
{ RecordId = 6; ParentId = 2 }
|
77
77
|
]
|
78
78
|
let expected = Branch (0, [ Branch (1, [Leaf 4]);
|
79
79
|
Branch (2, [Leaf 3; Leaf 5; Leaf 6]) ])
|
@@ -87,23 +87,23 @@ let ``Empty input`` () =
|
|
87
87
|
[<Test>]
|
88
88
|
let ``Root node has parent`` () =
|
89
89
|
let input =
|
90
|
-
[ { RecordId = 0; ParentId =
|
91
|
-
{ RecordId = 1; ParentId =
|
90
|
+
[ { RecordId = 0; ParentId = 1 };
|
91
|
+
{ RecordId = 1; ParentId = 0 } ]
|
92
92
|
Assert.That((fun () -> buildTree input |> ignore), Throws.Exception)
|
93
93
|
|
94
94
|
[<Test>]
|
95
95
|
let ``No root node`` () =
|
96
|
-
let input = [ { RecordId = 1; ParentId =
|
96
|
+
let input = [ { RecordId = 1; ParentId = 0 } ]
|
97
97
|
Assert.That((fun () -> buildTree input |> ignore), Throws.Exception)
|
98
98
|
|
99
99
|
[<Test>]
|
100
100
|
let ``Non-continuous`` () =
|
101
101
|
let input =
|
102
102
|
[
|
103
|
-
{ RecordId = 2; ParentId =
|
104
|
-
{ RecordId = 4; ParentId =
|
105
|
-
{ RecordId = 1; ParentId =
|
106
|
-
{ RecordId = 0; ParentId =
|
103
|
+
{ RecordId = 2; ParentId = 0 };
|
104
|
+
{ RecordId = 4; ParentId = 2 };
|
105
|
+
{ RecordId = 1; ParentId = 0 };
|
106
|
+
{ RecordId = 0; ParentId = 0 }
|
107
107
|
]
|
108
108
|
Assert.That((fun () -> buildTree input |> ignore), Throws.Exception)
|
109
109
|
|
@@ -111,13 +111,13 @@ let ``Non-continuous`` () =
|
|
111
111
|
let ``Cycle directly`` () =
|
112
112
|
let input =
|
113
113
|
[
|
114
|
-
{ RecordId = 5; ParentId =
|
115
|
-
{ RecordId = 3; ParentId =
|
116
|
-
{ RecordId = 2; ParentId =
|
117
|
-
{ RecordId = 4; ParentId =
|
118
|
-
{ RecordId = 1; ParentId =
|
119
|
-
{ RecordId = 0; ParentId =
|
120
|
-
{ RecordId = 6; ParentId =
|
114
|
+
{ RecordId = 5; ParentId = 2 };
|
115
|
+
{ RecordId = 3; ParentId = 2 };
|
116
|
+
{ RecordId = 2; ParentId = 2 };
|
117
|
+
{ RecordId = 4; ParentId = 1 };
|
118
|
+
{ RecordId = 1; ParentId = 0 };
|
119
|
+
{ RecordId = 0; ParentId = 0 };
|
120
|
+
{ RecordId = 6; ParentId = 3 }
|
121
121
|
]
|
122
122
|
Assert.That((fun () -> buildTree input |> ignore), Throws.Exception)
|
123
123
|
|
@@ -125,13 +125,13 @@ let ``Cycle directly`` () =
|
|
125
125
|
let ``Cycle indirectly`` () =
|
126
126
|
let input =
|
127
127
|
[
|
128
|
-
{ RecordId = 5; ParentId =
|
129
|
-
{ RecordId = 3; ParentId =
|
130
|
-
{ RecordId = 2; ParentId =
|
131
|
-
{ RecordId = 4; ParentId =
|
132
|
-
{ RecordId = 1; ParentId =
|
133
|
-
{ RecordId = 0; ParentId =
|
134
|
-
{ RecordId = 6; ParentId =
|
128
|
+
{ RecordId = 5; ParentId = 2 };
|
129
|
+
{ RecordId = 3; ParentId = 2 };
|
130
|
+
{ RecordId = 2; ParentId = 6 };
|
131
|
+
{ RecordId = 4; ParentId = 1 };
|
132
|
+
{ RecordId = 1; ParentId = 0 };
|
133
|
+
{ RecordId = 0; ParentId = 0 };
|
134
|
+
{ RecordId = 6; ParentId = 3 }
|
135
135
|
]
|
136
136
|
Assert.That((fun () -> buildTree input |> ignore), Throws.Exception)
|
137
137
|
|
@@ -139,8 +139,8 @@ let ``Cycle indirectly`` () =
|
|
139
139
|
let ``Higher id parent of lower id`` () =
|
140
140
|
let input =
|
141
141
|
[
|
142
|
-
{ RecordId = 0; ParentId =
|
143
|
-
{ RecordId = 2; ParentId =
|
144
|
-
{ RecordId = 1; ParentId =
|
142
|
+
{ RecordId = 0; ParentId = 0 };
|
143
|
+
{ RecordId = 2; ParentId = 0 };
|
144
|
+
{ RecordId = 1; ParentId = 2 }
|
145
145
|
]
|
146
146
|
Assert.That((fun () -> buildTree input |> ignore), Throws.Exception)
|