trackler 2.0.5.1 → 2.0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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)