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.
Files changed (246) hide show
  1. checksums.yaml +4 -4
  2. data/common/exercises/tree-building/description.md +15 -3
  3. data/lib/trackler/version.rb +1 -1
  4. data/tracks/ecmascript/exercises/queen-attack/queen-attack.spec.js +1 -1
  5. data/tracks/elm/.gitignore +1 -0
  6. data/tracks/elm/.travis.yml +3 -3
  7. data/tracks/elm/SETUP.md +16 -3
  8. data/tracks/elm/bin/build.sh +10 -10
  9. data/tracks/elm/bin/install-elm-format +1 -1
  10. data/tracks/elm/docs/INSTALLATION.md +2 -2
  11. data/tracks/elm/docs/TESTS.md +3 -3
  12. data/tracks/elm/elm-package.json +5 -5
  13. data/tracks/elm/exercises/accumulate/{Accumulate.example → Accumulate.example.elm} +0 -0
  14. data/tracks/elm/exercises/accumulate/{AccumulateTests.elm → Tests.elm} +2 -2
  15. data/tracks/elm/exercises/accumulate/elm-package.json +4 -4
  16. data/tracks/elm/exercises/accumulate/package.json +13 -0
  17. data/tracks/elm/exercises/allergies/{Allergies.example → Allergies.example.elm} +2 -2
  18. data/tracks/elm/exercises/allergies/{AllergiesTests.elm → Tests.elm} +2 -2
  19. data/tracks/elm/exercises/allergies/elm-package.json +4 -4
  20. data/tracks/elm/exercises/allergies/package.json +13 -0
  21. data/tracks/elm/exercises/anagram/{Anagram.example → Anagram.example.elm} +0 -0
  22. data/tracks/elm/exercises/anagram/{AnagramTests.elm → Tests.elm} +2 -2
  23. data/tracks/elm/exercises/anagram/elm-package.json +4 -4
  24. data/tracks/elm/exercises/anagram/package.json +13 -0
  25. data/tracks/elm/exercises/atbash-cipher/{AtbashCipher.example → AtbashCipher.example.elm} +0 -0
  26. data/tracks/elm/exercises/atbash-cipher/{AtbashCipherTests.elm → Tests.elm} +2 -2
  27. data/tracks/elm/exercises/atbash-cipher/elm-package.json +4 -4
  28. data/tracks/elm/exercises/atbash-cipher/package.json +13 -0
  29. data/tracks/elm/exercises/bob/{Bob.example → Bob.example.elm} +0 -0
  30. data/tracks/elm/exercises/bob/{BobTests.elm → Tests.elm} +3 -3
  31. data/tracks/elm/exercises/bob/elm-package.json +4 -4
  32. data/tracks/elm/exercises/bob/package.json +13 -0
  33. data/tracks/elm/exercises/difference-of-squares/{DifferenceOfSquares.example → DifferenceOfSquares.example.elm} +1 -1
  34. data/tracks/elm/exercises/difference-of-squares/{DifferenceOfSquaresTests.elm → Tests.elm} +2 -2
  35. data/tracks/elm/exercises/difference-of-squares/elm-package.json +4 -4
  36. data/tracks/elm/exercises/difference-of-squares/package.json +13 -0
  37. data/tracks/elm/exercises/gigasecond/{Gigasecond.example → Gigasecond.example.elm} +0 -0
  38. data/tracks/elm/exercises/gigasecond/{GigasecondTests.elm → Tests.elm} +2 -2
  39. data/tracks/elm/exercises/gigasecond/elm-package.json +4 -4
  40. data/tracks/elm/exercises/gigasecond/package.json +13 -0
  41. data/tracks/elm/exercises/grade-school/{GradeSchool.example → GradeSchool.example.elm} +1 -1
  42. data/tracks/elm/exercises/grade-school/{GradeSchoolTests.elm → Tests.elm} +2 -2
  43. data/tracks/elm/exercises/grade-school/elm-package.json +4 -4
  44. data/tracks/elm/exercises/grade-school/package.json +13 -0
  45. data/tracks/elm/exercises/hamming/{Hamming.example → Hamming.example.elm} +0 -0
  46. data/tracks/elm/exercises/hamming/{HammingTests.elm → Tests.elm} +2 -2
  47. data/tracks/elm/exercises/hamming/elm-package.json +4 -4
  48. data/tracks/elm/exercises/hamming/package.json +13 -0
  49. data/tracks/elm/exercises/hello-world/HelloWorld.elm +8 -8
  50. data/tracks/elm/exercises/hello-world/{HelloWorld.example → HelloWorld.example.elm} +0 -0
  51. data/tracks/elm/exercises/hello-world/{HelloWorldTests.elm → Tests.elm} +2 -2
  52. data/tracks/elm/exercises/hello-world/elm-package.json +4 -4
  53. data/tracks/elm/exercises/hello-world/package.json +13 -0
  54. data/tracks/elm/exercises/hello-world/yarn.lock +1136 -0
  55. data/tracks/elm/exercises/largest-series-product/{LargestSeriesProduct.example → LargestSeriesProduct.example.elm} +0 -0
  56. data/tracks/elm/exercises/largest-series-product/{LargestSeriesProductTests.elm → Tests.elm} +2 -2
  57. data/tracks/elm/exercises/largest-series-product/elm-package.json +4 -4
  58. data/tracks/elm/exercises/largest-series-product/package.json +13 -0
  59. data/tracks/elm/exercises/leap/{Leap.example → Leap.example.elm} +0 -0
  60. data/tracks/elm/exercises/leap/{LeapTests.elm → Tests.elm} +2 -2
  61. data/tracks/elm/exercises/leap/elm-package.json +4 -4
  62. data/tracks/elm/exercises/leap/package.json +13 -0
  63. data/tracks/elm/exercises/list-ops/{ListOps.example → ListOps.example.elm} +0 -0
  64. data/tracks/elm/exercises/list-ops/{ListOpsTests.elm → Tests.elm} +14 -14
  65. data/tracks/elm/exercises/list-ops/elm-package.json +4 -4
  66. data/tracks/elm/exercises/list-ops/package.json +13 -0
  67. data/tracks/elm/exercises/nucleotide-count/{NucleotideCount.example → NucleotideCount.example.elm} +0 -0
  68. data/tracks/elm/exercises/nucleotide-count/{NucleotideCountTests.elm → Tests.elm} +2 -2
  69. data/tracks/elm/exercises/nucleotide-count/elm-package.json +4 -4
  70. data/tracks/elm/exercises/nucleotide-count/package.json +13 -0
  71. data/tracks/elm/exercises/pangram/{Pangram.example → Pangram.example.elm} +0 -0
  72. data/tracks/elm/exercises/pangram/{PangramTests.elm → Tests.elm} +2 -2
  73. data/tracks/elm/exercises/pangram/elm-package.json +4 -4
  74. data/tracks/elm/exercises/pangram/package.json +13 -0
  75. data/tracks/elm/exercises/phone-number/{PhoneNumber.example → PhoneNumber.example.elm} +0 -0
  76. data/tracks/elm/exercises/phone-number/{PhoneNumberTests.elm → Tests.elm} +2 -2
  77. data/tracks/elm/exercises/phone-number/elm-package.json +4 -4
  78. data/tracks/elm/exercises/phone-number/package.json +13 -0
  79. data/tracks/elm/exercises/raindrops/{Raindrops.example → Raindrops.example.elm} +0 -0
  80. data/tracks/elm/exercises/raindrops/{RaindropsTests.elm → Tests.elm} +2 -2
  81. data/tracks/elm/exercises/raindrops/elm-package.json +4 -4
  82. data/tracks/elm/exercises/raindrops/package.json +13 -0
  83. data/tracks/elm/exercises/rna-transcription/{RNATranscription.example → RNATranscription.example.elm} +0 -0
  84. data/tracks/elm/exercises/rna-transcription/{RNATranscriptionTests.elm → Tests.elm} +2 -2
  85. data/tracks/elm/exercises/rna-transcription/elm-package.json +4 -4
  86. data/tracks/elm/exercises/rna-transcription/package.json +13 -0
  87. data/tracks/elm/exercises/robot-simulator/{RobotSimulator.example → RobotSimulator.example.elm} +0 -0
  88. data/tracks/elm/exercises/robot-simulator/{RobotSimulatorTests.elm → Tests.elm} +4 -4
  89. data/tracks/elm/exercises/robot-simulator/elm-package.json +4 -4
  90. data/tracks/elm/exercises/robot-simulator/package.json +13 -0
  91. data/tracks/elm/exercises/roman-numerals/{RomanNumerals.example → RomanNumerals.example.elm} +0 -0
  92. data/tracks/elm/exercises/roman-numerals/{RomanNumeralsTests.elm → Tests.elm} +2 -2
  93. data/tracks/elm/exercises/roman-numerals/elm-package.json +4 -4
  94. data/tracks/elm/exercises/roman-numerals/package.json +13 -0
  95. data/tracks/elm/exercises/run-length-encoding/{RunLengthEncoding.example → RunLengthEncoding.example.elm} +2 -2
  96. data/tracks/elm/exercises/run-length-encoding/{RunLengthEncodingTests.elm → Tests.elm} +2 -2
  97. data/tracks/elm/exercises/run-length-encoding/elm-package.json +4 -4
  98. data/tracks/elm/exercises/run-length-encoding/package.json +13 -0
  99. data/tracks/elm/exercises/say/{Say.example → Say.example.elm} +0 -0
  100. data/tracks/elm/exercises/say/{SayTests.elm → Tests.elm} +2 -2
  101. data/tracks/elm/exercises/say/elm-package.json +4 -4
  102. data/tracks/elm/exercises/say/package.json +13 -0
  103. data/tracks/elm/exercises/scrabble-score/{ScrabbleScore.example → ScrabbleScore.example.elm} +0 -0
  104. data/tracks/elm/exercises/scrabble-score/{ScrabbleScoreTests.elm → Tests.elm} +2 -2
  105. data/tracks/elm/exercises/scrabble-score/elm-package.json +4 -4
  106. data/tracks/elm/exercises/scrabble-score/package.json +13 -0
  107. data/tracks/elm/exercises/series/{Series.example → Series.example.elm} +0 -0
  108. data/tracks/elm/exercises/series/{SeriesTests.elm → Tests.elm} +2 -2
  109. data/tracks/elm/exercises/series/elm-package.json +4 -4
  110. data/tracks/elm/exercises/series/package.json +13 -0
  111. data/tracks/elm/exercises/space-age/{SpaceAge.example → SpaceAge.example.elm} +0 -0
  112. data/tracks/elm/exercises/space-age/{SpaceAgeTests.elm → Tests.elm} +2 -2
  113. data/tracks/elm/exercises/space-age/elm-package.json +4 -4
  114. data/tracks/elm/exercises/space-age/package.json +13 -0
  115. data/tracks/elm/exercises/strain/{Strain.example → Strain.example.elm} +0 -0
  116. data/tracks/elm/exercises/strain/{StrainTests.elm → Tests.elm} +3 -3
  117. data/tracks/elm/exercises/strain/elm-package.json +4 -4
  118. data/tracks/elm/exercises/strain/package.json +13 -0
  119. data/tracks/elm/exercises/sublist/{Sublist.example → Sublist.example.elm} +0 -0
  120. data/tracks/elm/exercises/sublist/{SublistTests.elm → Tests.elm} +5 -5
  121. data/tracks/elm/exercises/sublist/elm-package.json +4 -4
  122. data/tracks/elm/exercises/sublist/package.json +13 -0
  123. data/tracks/elm/exercises/sum-of-multiples/{SumOfMultiples.example → SumOfMultiples.example.elm} +1 -1
  124. data/tracks/elm/exercises/sum-of-multiples/{SumOfMultiplesTests.elm → Tests.elm} +2 -2
  125. data/tracks/elm/exercises/sum-of-multiples/elm-package.json +4 -4
  126. data/tracks/elm/exercises/sum-of-multiples/package.json +13 -0
  127. data/tracks/elm/exercises/triangle/{TriangleTests.elm → Tests.elm} +2 -2
  128. data/tracks/elm/exercises/triangle/{Triangle.example → Triangle.example.elm} +1 -1
  129. data/tracks/elm/exercises/triangle/elm-package.json +4 -4
  130. data/tracks/elm/exercises/triangle/package.json +13 -0
  131. data/tracks/elm/exercises/word-count/{WordCountTests.elm → Tests.elm} +2 -2
  132. data/tracks/elm/exercises/word-count/{WordCount.example → WordCount.example.elm} +0 -0
  133. data/tracks/elm/exercises/word-count/elm-package.json +4 -4
  134. data/tracks/elm/exercises/word-count/package.json +13 -0
  135. data/tracks/elm/package.json +10 -0
  136. data/tracks/fsharp/exercises/beer-song/HINTS.md +2 -0
  137. data/tracks/fsharp/exercises/grade-school/HINTS.md +3 -0
  138. data/tracks/fsharp/exercises/tree-building/Example.fs +7 -3
  139. data/tracks/fsharp/exercises/tree-building/TreeBuilding.fs +7 -4
  140. data/tracks/fsharp/exercises/tree-building/TreeBuildingTest.fs +49 -49
  141. data/tracks/fsharp/exercises/wordy/HINTS.md +3 -0
  142. data/tracks/java/config.json +13 -1
  143. data/tracks/java/exercises/anagram/build.gradle +0 -1
  144. data/tracks/java/exercises/anagram/src/test/java/AnagramTest.java +17 -13
  145. data/tracks/java/exercises/etl/build.gradle +0 -2
  146. data/tracks/java/exercises/grade-school/build.gradle +0 -1
  147. data/tracks/java/exercises/grade-school/src/test/java/SchoolTest.java +17 -13
  148. data/tracks/java/exercises/linked-list/build.gradle +0 -1
  149. data/tracks/java/exercises/linked-list/src/test/java/DequeTest.java +16 -15
  150. data/tracks/java/exercises/meetup/build.gradle +0 -1
  151. data/tracks/java/exercises/meetup/src/test/java/MeetupTest.java +96 -95
  152. data/tracks/java/exercises/nth-prime/build.gradle +0 -1
  153. data/tracks/java/exercises/nth-prime/src/test/java/PrimeTest.java +6 -5
  154. data/tracks/java/exercises/palindrome-products/build.gradle +18 -0
  155. data/tracks/java/exercises/palindrome-products/src/example/java/Palindromes.java +77 -0
  156. data/tracks/java/exercises/palindrome-products/src/main/java/.keep +0 -0
  157. data/tracks/java/exercises/palindrome-products/src/test/java/PalindromesTest.java +162 -0
  158. data/tracks/java/exercises/settings.gradle +2 -0
  159. data/tracks/java/exercises/sum-of-multiples/src/example/java/SumOfMultiples.java +1 -2
  160. data/tracks/java/exercises/sum-of-multiples/src/main/java/SumOfMultiples.java +0 -1
  161. data/tracks/java/exercises/sum-of-multiples/src/test/{SumOfMultiplesTest.java → java/SumOfMultiplesTest.java} +12 -24
  162. data/tracks/java/exercises/wordy/build.gradle +17 -0
  163. data/tracks/java/exercises/wordy/src/example/java/WordProblemSolver.java +57 -0
  164. data/tracks/java/exercises/wordy/src/main/java/WordProblemSolver.java +5 -0
  165. data/tracks/java/exercises/wordy/src/test/java/WordProblemSolverTest.java +119 -0
  166. data/tracks/lua/docs/TESTS.md +1 -1
  167. data/tracks/ruby/lib/generator.rb +17 -8
  168. data/tracks/ruby/test/fixtures/exercises/alpha/.meta/.version +1 -0
  169. data/tracks/ruby/test/fixtures/exercises/alpha/alpha_test.rb +1 -0
  170. data/tracks/ruby/test/fixtures/exercises/alpha/example.rb +5 -0
  171. data/tracks/ruby/test/fixtures/exercises/alpha/example.tt +1 -0
  172. data/tracks/ruby/test/fixtures/metadata/exercises/alpha/canonical-data.json +11 -0
  173. data/tracks/ruby/test/generator_test.rb +54 -1
  174. data/tracks/swift/docs/TESTS.md +12 -12
  175. data/tracks/swift/{img/page_assets/001-splash.png → docs/img/tests_001-splash.png} +0 -0
  176. data/tracks/swift/{img/page_assets/002-templateChooser.png → docs/img/tests_002-templateChooser.png} +0 -0
  177. data/tracks/swift/{img/page_assets/003-nameProject.jpg → docs/img/tests_003-nameProject.jpg} +0 -0
  178. data/tracks/swift/{img/page_assets/004-saveProject.jpg → docs/img/tests_004-saveProject.jpg} +0 -0
  179. data/tracks/swift/{img/page_assets/005-folderLayout.png → docs/img/tests_005-folderLayout.png} +0 -0
  180. data/tracks/swift/{img/page_assets/006-newProjectInitial.jpg → docs/img/tests_006-newProjectInitial.jpg} +0 -0
  181. data/tracks/swift/{img/page_assets/007-fileInspectorUpdate.png → docs/img/tests_007-fileInspectorUpdate.png} +0 -0
  182. data/tracks/swift/{img/page_assets/008-templateChooserSwift.png → docs/img/tests_008-templateChooserSwift.png} +0 -0
  183. data/tracks/swift/{img/page_assets/009-importTestSource.png → docs/img/tests_009-importTestSource.png} +0 -0
  184. data/tracks/swift/{img/page_assets/010-testsImportExample.png → docs/img/tests_010-testsImportExample.png} +0 -0
  185. data/tracks/swift/{img/page_assets/011-finalLayoutExample.png → docs/img/tests_011-finalLayoutExample.png} +0 -0
  186. metadata +122 -134
  187. data/tracks/elm/exercises/accumulate/runtests.bat +0 -1
  188. data/tracks/elm/exercises/accumulate/runtests.sh +0 -2
  189. data/tracks/elm/exercises/allergies/runtests.bat +0 -1
  190. data/tracks/elm/exercises/allergies/runtests.sh +0 -2
  191. data/tracks/elm/exercises/anagram/runtests.bat +0 -1
  192. data/tracks/elm/exercises/anagram/runtests.sh +0 -2
  193. data/tracks/elm/exercises/atbash-cipher/runtests.bat +0 -1
  194. data/tracks/elm/exercises/atbash-cipher/runtests.sh +0 -2
  195. data/tracks/elm/exercises/bob/runtests.bat +0 -1
  196. data/tracks/elm/exercises/bob/runtests.sh +0 -2
  197. data/tracks/elm/exercises/difference-of-squares/runtests.bat +0 -1
  198. data/tracks/elm/exercises/difference-of-squares/runtests.sh +0 -2
  199. data/tracks/elm/exercises/gigasecond/runtests.bat +0 -1
  200. data/tracks/elm/exercises/gigasecond/runtests.sh +0 -2
  201. data/tracks/elm/exercises/grade-school/runtests.bat +0 -1
  202. data/tracks/elm/exercises/grade-school/runtests.sh +0 -2
  203. data/tracks/elm/exercises/hamming/runtests.bat +0 -1
  204. data/tracks/elm/exercises/hamming/runtests.sh +0 -2
  205. data/tracks/elm/exercises/hello-world/runtests.bat +0 -1
  206. data/tracks/elm/exercises/hello-world/runtests.sh +0 -2
  207. data/tracks/elm/exercises/largest-series-product/runtests.bat +0 -1
  208. data/tracks/elm/exercises/largest-series-product/runtests.sh +0 -2
  209. data/tracks/elm/exercises/leap/runtests.bat +0 -1
  210. data/tracks/elm/exercises/leap/runtests.sh +0 -2
  211. data/tracks/elm/exercises/list-ops/runtests.bat +0 -1
  212. data/tracks/elm/exercises/list-ops/runtests.sh +0 -2
  213. data/tracks/elm/exercises/nucleotide-count/runtests.bat +0 -1
  214. data/tracks/elm/exercises/nucleotide-count/runtests.sh +0 -2
  215. data/tracks/elm/exercises/pangram/runtests.bat +0 -1
  216. data/tracks/elm/exercises/pangram/runtests.sh +0 -2
  217. data/tracks/elm/exercises/phone-number/runtests.bat +0 -1
  218. data/tracks/elm/exercises/phone-number/runtests.sh +0 -2
  219. data/tracks/elm/exercises/raindrops/runtests.bat +0 -1
  220. data/tracks/elm/exercises/raindrops/runtests.sh +0 -2
  221. data/tracks/elm/exercises/rna-transcription/runtests.bat +0 -1
  222. data/tracks/elm/exercises/rna-transcription/runtests.sh +0 -2
  223. data/tracks/elm/exercises/robot-simulator/runtests.bat +0 -1
  224. data/tracks/elm/exercises/robot-simulator/runtests.sh +0 -2
  225. data/tracks/elm/exercises/roman-numerals/runtests.bat +0 -1
  226. data/tracks/elm/exercises/roman-numerals/runtests.sh +0 -2
  227. data/tracks/elm/exercises/run-length-encoding/runtests.bat +0 -1
  228. data/tracks/elm/exercises/run-length-encoding/runtests.sh +0 -2
  229. data/tracks/elm/exercises/say/runtests.bat +0 -1
  230. data/tracks/elm/exercises/say/runtests.sh +0 -2
  231. data/tracks/elm/exercises/scrabble-score/runtests.bat +0 -1
  232. data/tracks/elm/exercises/scrabble-score/runtests.sh +0 -2
  233. data/tracks/elm/exercises/series/runtests.bat +0 -1
  234. data/tracks/elm/exercises/series/runtests.sh +0 -2
  235. data/tracks/elm/exercises/space-age/runtests.bat +0 -1
  236. data/tracks/elm/exercises/space-age/runtests.sh +0 -2
  237. data/tracks/elm/exercises/strain/runtests.bat +0 -1
  238. data/tracks/elm/exercises/strain/runtests.sh +0 -2
  239. data/tracks/elm/exercises/sublist/runtests.bat +0 -1
  240. data/tracks/elm/exercises/sublist/runtests.sh +0 -2
  241. data/tracks/elm/exercises/sum-of-multiples/runtests.bat +0 -1
  242. data/tracks/elm/exercises/sum-of-multiples/runtests.sh +0 -2
  243. data/tracks/elm/exercises/triangle/runtests.bat +0 -1
  244. data/tracks/elm/exercises/triangle/runtests.sh +0 -2
  245. data/tracks/elm/exercises/word-count/runtests.bat +0 -1
  246. data/tracks/elm/exercises/word-count/runtests.sh +0 -2
@@ -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 ] [1..100000])
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 [10..5001] [1..5000])
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 [1..100000] [ 3, 4, 5 ])
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 : Program Value
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": "4.0.0 <= v < 5.0.0",
12
- "elm-community/elm-test": "2.0.0 <= v < 3.0.0",
13
- "rtfeldman/node-test-runner": "2.0.0 <= v < 3.0.0"
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.17.0 <= v < 0.18.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
+ }
@@ -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) [1..(limit - 1)])
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 : Program Value
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": "4.0.0 <= v < 5.0.0",
12
- "elm-community/elm-test": "2.0.0 <= v < 3.0.0",
13
- "rtfeldman/node-test-runner": "2.0.0 <= v < 3.0.0"
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.17.0 <= v < 0.18.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 : Program Value
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 : number -> number -> number -> Result String Triangle
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": "4.0.0 <= v < 5.0.0",
12
- "elm-community/elm-test": "2.0.0 <= v < 3.0.0",
13
- "rtfeldman/node-test-runner": "2.0.0 <= v < 3.0.0"
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.17.0 <= v < 0.18.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 : Program Value
41
+ main : TestProgram
42
42
  main =
43
43
  run emit tests
44
44
 
@@ -8,9 +8,9 @@
8
8
  ],
9
9
  "exposed-modules": [],
10
10
  "dependencies": {
11
- "elm-lang/core": "4.0.0 <= v < 5.0.0",
12
- "elm-community/elm-test": "2.0.0 <= v < 3.0.0",
13
- "rtfeldman/node-test-runner": "2.0.0 <= v < 3.0.0"
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.17.0 <= v < 0.18.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,10 @@
1
+ {
2
+ "scripts": {
3
+ "postinstall": "elm package install -y",
4
+ "test": "elm-test"
5
+ },
6
+ "dependencies": {
7
+ "elm": "^0.18.0",
8
+ "elm-test": "^0.18.0"
9
+ }
10
+ }
@@ -0,0 +1,2 @@
1
+ ## Hints
2
+ - Try to capture the structure of the song in your code, where you build up the song by composing its parts.
@@ -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
- x.ParentId >= x.RecordId ||
14
- x.RecordId <> previous + 1
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 updatedMap = addOrAppend x.ParentId x.RecordId map
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 = -1 |> not) then
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
- leafs <- (r.ParentId, r.RecordId) :: leafs
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 = -1 }
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 = -1 };
21
- { RecordId = 1; ParentId = 0 };
22
- { RecordId = 2; ParentId = 0 };
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 = 0 };
32
- { RecordId = 1; ParentId = 0 };
33
- { RecordId = 0; ParentId = -1 };
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 = 0 };
43
- { RecordId = 2; ParentId = 0 };
44
- { RecordId = 1; ParentId = 0 };
45
- { RecordId = 0; ParentId = -1 };
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 = 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 = -1 };
60
- { RecordId = 6; ParentId = 2 }
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 = 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 = -1 };
76
- { RecordId = 6; ParentId = 2 }
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 = 1 };
91
- { RecordId = 1; ParentId = -1 } ]
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 = -1 } ]
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 = 0 };
104
- { RecordId = 4; ParentId = 2 };
105
- { RecordId = 1; ParentId = 0 };
106
- { RecordId = 0; ParentId = -1 }
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 = 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 = -1 };
120
- { RecordId = 6; ParentId = 3 }
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 = 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 = -1 };
134
- { RecordId = 6; ParentId = 3 }
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 = -1 };
143
- { RecordId = 2; ParentId = 0 };
144
- { RecordId = 1; ParentId = 2 }
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)