trackler 2.2.1.41 → 2.2.1.42

Sign up to get free protection for your applications and to get access to all the features.
Files changed (289) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +0 -3
  3. data/lib/trackler/version.rb +1 -1
  4. data/problem-specifications/exercises/change/metadata.yml +0 -3
  5. data/tracks/c/exercises/allergies/src/allergies.h +12 -12
  6. data/tracks/c/exercises/allergies/src/example.c +4 -4
  7. data/tracks/c/exercises/allergies/src/example.h +14 -14
  8. data/tracks/c/exercises/allergies/test/test_allergies.c +45 -45
  9. data/tracks/cfml/config.json +139 -193
  10. data/tracks/cfml/config/maintainers.json +11 -11
  11. data/tracks/csharp/exercises/etl/Etl.cs +1 -1
  12. data/tracks/csharp/exercises/etl/EtlTest.cs +102 -0
  13. data/tracks/csharp/exercises/etl/Example.cs +1 -1
  14. data/tracks/csharp/exercises/pascals-triangle/Example.cs +10 -1
  15. data/tracks/csharp/exercises/pascals-triangle/PascalsTriangle.cs +1 -0
  16. data/tracks/csharp/exercises/pascals-triangle/PascalsTriangleTest.cs +17 -50
  17. data/tracks/csharp/exercises/saddle-points/SaddlePointsTest.cs +75 -0
  18. data/tracks/csharp/generators/Exercises/Etl.cs +61 -0
  19. data/tracks/csharp/generators/Exercises/PascalsTriangle.cs +28 -0
  20. data/tracks/csharp/generators/Exercises/SaddlePoints.cs +50 -0
  21. data/tracks/csharp/generators/Output/ValueFormatter.cs +29 -0
  22. data/tracks/java/config.json +40 -5
  23. data/tracks/java/exercises/triangle/.meta/src/reference/java/Triangle.java +11 -10
  24. data/tracks/java/exercises/triangle/src/main/java/Triangle.java +9 -1
  25. data/tracks/java/exercises/triangle/src/test/java/TriangleTest.java +12 -12
  26. data/tracks/python/exercises/phone-number/phone_number.py +1 -1
  27. data/tracks/python/exercises/rna-transcription/rna_transcription.py +1 -1
  28. data/tracks/python/exercises/run-length-encoding/run_length_encoding.py +2 -2
  29. data/tracks/python/exercises/saddle-points/saddle_points.py +1 -1
  30. data/tracks/rust/exercises/etl/README.md +1 -1
  31. data/tracks/rust/exercises/ocr-numbers/README.md +1 -1
  32. data/tracks/rust/exercises/pascals-triangle/README.md +1 -1
  33. data/tracks/rust/exercises/rna-transcription/README.md +1 -1
  34. data/tracks/scala/exercises/meetup/src/test/scala/MeetupTest.scala +118 -93
  35. data/tracks/scala/testgen/src/main/scala/MeetupTestGenerator.scala +48 -0
  36. data/tracks/scala/testgen/src/main/scala/testgen/CanonicalDataParser.scala +1 -1
  37. data/tracks/typescript/config.json +13 -0
  38. data/tracks/typescript/exercises/bob/bob.ts +7 -0
  39. data/tracks/typescript/exercises/hello-world/hello-world.ts +7 -0
  40. data/tracks/typescript/exercises/leap/leap.ts +5 -0
  41. data/tracks/typescript/exercises/pangram/pangram.ts +11 -0
  42. data/tracks/typescript/exercises/prime-factors/README.md +73 -0
  43. data/tracks/typescript/exercises/prime-factors/package.json +36 -0
  44. data/tracks/typescript/exercises/prime-factors/prime-factors.example.ts +14 -0
  45. data/tracks/typescript/exercises/prime-factors/prime-factors.test.ts +25 -0
  46. data/tracks/{coldfusion/exercises/acronym/.meta/HINTS.md → typescript/exercises/prime-factors/prime-factors.ts} +0 -0
  47. data/tracks/typescript/exercises/prime-factors/tsconfig.json +22 -0
  48. data/tracks/typescript/exercises/prime-factors/tslint.json +127 -0
  49. data/tracks/typescript/exercises/prime-factors/yarn.lock +2305 -0
  50. data/tracks/typescript/exercises/rna-transcription/rna-transcription.ts +7 -0
  51. metadata +16 -242
  52. data/tracks/coldfusion/.gitignore +0 -5
  53. data/tracks/coldfusion/.travis.yml +0 -18
  54. data/tracks/coldfusion/CONTRIBUTING.md +0 -10
  55. data/tracks/coldfusion/LICENSE +0 -21
  56. data/tracks/coldfusion/README.md +0 -92
  57. data/tracks/coldfusion/bin/fetch-configlet +0 -32
  58. data/tracks/coldfusion/config.json +0 -223
  59. data/tracks/coldfusion/config/exercise_readme.go.tmpl +0 -16
  60. data/tracks/coldfusion/config/maintainers.json +0 -13
  61. data/tracks/coldfusion/docs/ABOUT.md +0 -10
  62. data/tracks/coldfusion/docs/EXERCISE_README_INSERT.md +0 -15
  63. data/tracks/coldfusion/docs/INSTALLATION.md +0 -35
  64. data/tracks/coldfusion/docs/LEARNING.md +0 -37
  65. data/tracks/coldfusion/docs/RESOURCES.md +0 -29
  66. data/tracks/coldfusion/docs/SNIPPET.txt +0 -8
  67. data/tracks/coldfusion/docs/TESTS.md +0 -13
  68. data/tracks/coldfusion/exercises/acronym/Acronym.cfc +0 -13
  69. data/tracks/coldfusion/exercises/acronym/AcronymTest.cfc +0 -43
  70. data/tracks/coldfusion/exercises/acronym/Solution.cfc +0 -22
  71. data/tracks/coldfusion/exercises/acronym/SolutionTest.cfc +0 -7
  72. data/tracks/coldfusion/exercises/acronym/TestRunner.cfc +0 -103
  73. data/tracks/coldfusion/exercises/acronym/box.json +0 -8
  74. data/tracks/coldfusion/exercises/acronym/index.cfm +0 -37
  75. data/tracks/coldfusion/exercises/atbash-cipher/.meta/HINTS.md +0 -0
  76. data/tracks/coldfusion/exercises/atbash-cipher/AtbashCipher.cfc +0 -14
  77. data/tracks/coldfusion/exercises/atbash-cipher/AtbashCipherTest.cfc +0 -71
  78. data/tracks/coldfusion/exercises/atbash-cipher/Solution.cfc +0 -56
  79. data/tracks/coldfusion/exercises/atbash-cipher/SolutionTest.cfc +0 -7
  80. data/tracks/coldfusion/exercises/atbash-cipher/TestRunner.cfc +0 -103
  81. data/tracks/coldfusion/exercises/atbash-cipher/box.json +0 -8
  82. data/tracks/coldfusion/exercises/atbash-cipher/index.cfm +0 -37
  83. data/tracks/coldfusion/exercises/bob/.meta/HINTS.md +0 -0
  84. data/tracks/coldfusion/exercises/bob/Bob.cfc +0 -13
  85. data/tracks/coldfusion/exercises/bob/BobTest.cfc +0 -115
  86. data/tracks/coldfusion/exercises/bob/Solution.cfc +0 -27
  87. data/tracks/coldfusion/exercises/bob/SolutionTest.cfc +0 -7
  88. data/tracks/coldfusion/exercises/bob/TestRunner.cfc +0 -103
  89. data/tracks/coldfusion/exercises/bob/box.json +0 -8
  90. data/tracks/coldfusion/exercises/bob/index.cfm +0 -37
  91. data/tracks/coldfusion/exercises/diamond/.meta/HINTS.md +0 -0
  92. data/tracks/coldfusion/exercises/diamond/Diamond.cfc +0 -13
  93. data/tracks/coldfusion/exercises/diamond/DiamondTest.cfc +0 -35
  94. data/tracks/coldfusion/exercises/diamond/Solution.cfc +0 -35
  95. data/tracks/coldfusion/exercises/diamond/SolutionTest.cfc +0 -7
  96. data/tracks/coldfusion/exercises/diamond/TestRunner.cfc +0 -103
  97. data/tracks/coldfusion/exercises/diamond/box.json +0 -8
  98. data/tracks/coldfusion/exercises/diamond/index.cfm +0 -37
  99. data/tracks/coldfusion/exercises/difference-of-squares/.meta/HINTS.md +0 -0
  100. data/tracks/coldfusion/exercises/difference-of-squares/DifferenceOfSquares.cfc +0 -18
  101. data/tracks/coldfusion/exercises/difference-of-squares/DifferenceOfSquaresTest.cfc +0 -63
  102. data/tracks/coldfusion/exercises/difference-of-squares/Solution.cfc +0 -28
  103. data/tracks/coldfusion/exercises/difference-of-squares/SolutionTest.cfc +0 -7
  104. data/tracks/coldfusion/exercises/difference-of-squares/TestRunner.cfc +0 -103
  105. data/tracks/coldfusion/exercises/difference-of-squares/box.json +0 -8
  106. data/tracks/coldfusion/exercises/difference-of-squares/index.cfm +0 -37
  107. data/tracks/coldfusion/exercises/flatten-array/.meta/HINTS.md +0 -0
  108. data/tracks/coldfusion/exercises/flatten-array/FlattenArray.cfc +0 -13
  109. data/tracks/coldfusion/exercises/flatten-array/FlattenArrayTest.cfc +0 -42
  110. data/tracks/coldfusion/exercises/flatten-array/Solution.cfc +0 -26
  111. data/tracks/coldfusion/exercises/flatten-array/SolutionTest.cfc +0 -7
  112. data/tracks/coldfusion/exercises/flatten-array/TestRunner.cfc +0 -103
  113. data/tracks/coldfusion/exercises/flatten-array/box.json +0 -8
  114. data/tracks/coldfusion/exercises/flatten-array/index.cfm +0 -37
  115. data/tracks/coldfusion/exercises/gigasecond/.meta/HINTS.md +0 -0
  116. data/tracks/coldfusion/exercises/gigasecond/Gigasecond.cfc +0 -13
  117. data/tracks/coldfusion/exercises/gigasecond/GigasecondTest.cfc +0 -39
  118. data/tracks/coldfusion/exercises/gigasecond/Solution.cfc +0 -16
  119. data/tracks/coldfusion/exercises/gigasecond/SolutionTest.cfc +0 -7
  120. data/tracks/coldfusion/exercises/gigasecond/TestRunner.cfc +0 -103
  121. data/tracks/coldfusion/exercises/gigasecond/box.json +0 -8
  122. data/tracks/coldfusion/exercises/gigasecond/index.cfm +0 -37
  123. data/tracks/coldfusion/exercises/grains/.meta/HINTS.md +0 -0
  124. data/tracks/coldfusion/exercises/grains/Grains.cfc +0 -14
  125. data/tracks/coldfusion/exercises/grains/GrainsTest.cfc +0 -63
  126. data/tracks/coldfusion/exercises/grains/Solution.cfc +0 -22
  127. data/tracks/coldfusion/exercises/grains/SolutionTest.cfc +0 -7
  128. data/tracks/coldfusion/exercises/grains/TestRunner.cfc +0 -103
  129. data/tracks/coldfusion/exercises/grains/box.json +0 -8
  130. data/tracks/coldfusion/exercises/grains/index.cfm +0 -37
  131. data/tracks/coldfusion/exercises/hamming/.meta/HINTS.md +0 -0
  132. data/tracks/coldfusion/exercises/hamming/Hamming.cfc +0 -13
  133. data/tracks/coldfusion/exercises/hamming/HammingTest.cfc +0 -75
  134. data/tracks/coldfusion/exercises/hamming/Solution.cfc +0 -25
  135. data/tracks/coldfusion/exercises/hamming/SolutionTest.cfc +0 -7
  136. data/tracks/coldfusion/exercises/hamming/TestRunner.cfc +0 -103
  137. data/tracks/coldfusion/exercises/hamming/box.json +0 -8
  138. data/tracks/coldfusion/exercises/hamming/index.cfm +0 -37
  139. data/tracks/coldfusion/exercises/hello-world/HelloWorld.cfc +0 -13
  140. data/tracks/coldfusion/exercises/hello-world/HelloWorldTest.cfc +0 -18
  141. data/tracks/coldfusion/exercises/hello-world/Solution.cfc +0 -13
  142. data/tracks/coldfusion/exercises/hello-world/SolutionTest.cfc +0 -7
  143. data/tracks/coldfusion/exercises/hello-world/TestRunner.cfc +0 -103
  144. data/tracks/coldfusion/exercises/hello-world/box.json +0 -8
  145. data/tracks/coldfusion/exercises/hello-world/index.cfm +0 -37
  146. data/tracks/coldfusion/exercises/isogram/.meta/HINTS.md +0 -0
  147. data/tracks/coldfusion/exercises/isogram/Isogram.cfc +0 -13
  148. data/tracks/coldfusion/exercises/isogram/IsogramTest.cfc +0 -55
  149. data/tracks/coldfusion/exercises/isogram/Solution.cfc +0 -23
  150. data/tracks/coldfusion/exercises/isogram/SolutionTest.cfc +0 -7
  151. data/tracks/coldfusion/exercises/isogram/TestRunner.cfc +0 -103
  152. data/tracks/coldfusion/exercises/isogram/box.json +0 -8
  153. data/tracks/coldfusion/exercises/isogram/index.cfm +0 -37
  154. data/tracks/coldfusion/exercises/largest-series-product/.meta/HINTS.md +0 -0
  155. data/tracks/coldfusion/exercises/largest-series-product/LargestSeriesProduct.cfc +0 -13
  156. data/tracks/coldfusion/exercises/largest-series-product/LargestSeriesProductTest.cfc +0 -75
  157. data/tracks/coldfusion/exercises/largest-series-product/Solution.cfc +0 -41
  158. data/tracks/coldfusion/exercises/largest-series-product/SolutionTest.cfc +0 -7
  159. data/tracks/coldfusion/exercises/largest-series-product/TestRunner.cfc +0 -103
  160. data/tracks/coldfusion/exercises/largest-series-product/box.json +0 -8
  161. data/tracks/coldfusion/exercises/largest-series-product/index.cfm +0 -37
  162. data/tracks/coldfusion/exercises/leap/Leap.cfc +0 -15
  163. data/tracks/coldfusion/exercises/leap/LeapTest.cfc +0 -39
  164. data/tracks/coldfusion/exercises/leap/README.md +0 -33
  165. data/tracks/coldfusion/exercises/leap/Solution.cfc +0 -19
  166. data/tracks/coldfusion/exercises/leap/SolutionTest.cfc +0 -7
  167. data/tracks/coldfusion/exercises/leap/TestRunner.cfc +0 -103
  168. data/tracks/coldfusion/exercises/leap/box.json +0 -8
  169. data/tracks/coldfusion/exercises/leap/index.cfm +0 -37
  170. data/tracks/coldfusion/exercises/luhn/.meta/HINTS.md +0 -0
  171. data/tracks/coldfusion/exercises/luhn/Luhn.cfc +0 -13
  172. data/tracks/coldfusion/exercises/luhn/LuhnTest.cfc +0 -67
  173. data/tracks/coldfusion/exercises/luhn/Solution.cfc +0 -38
  174. data/tracks/coldfusion/exercises/luhn/SolutionTest.cfc +0 -7
  175. data/tracks/coldfusion/exercises/luhn/TestRunner.cfc +0 -103
  176. data/tracks/coldfusion/exercises/luhn/box.json +0 -8
  177. data/tracks/coldfusion/exercises/luhn/index.cfm +0 -37
  178. data/tracks/coldfusion/exercises/nth-prime/.meta/HINTS.md +0 -0
  179. data/tracks/coldfusion/exercises/nth-prime/NthPrime.cfc +0 -13
  180. data/tracks/coldfusion/exercises/nth-prime/NthPrimeTest.cfc +0 -35
  181. data/tracks/coldfusion/exercises/nth-prime/Solution.cfc +0 -33
  182. data/tracks/coldfusion/exercises/nth-prime/SolutionTest.cfc +0 -7
  183. data/tracks/coldfusion/exercises/nth-prime/TestRunner.cfc +0 -103
  184. data/tracks/coldfusion/exercises/nth-prime/box.json +0 -8
  185. data/tracks/coldfusion/exercises/nth-prime/index.cfm +0 -37
  186. data/tracks/coldfusion/exercises/pangram/.meta/HINTS.md +0 -0
  187. data/tracks/coldfusion/exercises/pangram/Pangram.cfc +0 -13
  188. data/tracks/coldfusion/exercises/pangram/PangramTest.cfc +0 -55
  189. data/tracks/coldfusion/exercises/pangram/Solution.cfc +0 -21
  190. data/tracks/coldfusion/exercises/pangram/SolutionTest.cfc +0 -7
  191. data/tracks/coldfusion/exercises/pangram/TestRunner.cfc +0 -103
  192. data/tracks/coldfusion/exercises/pangram/box.json +0 -8
  193. data/tracks/coldfusion/exercises/pangram/index.cfm +0 -37
  194. data/tracks/coldfusion/exercises/pig-latin/.meta/HINTS.md +0 -0
  195. data/tracks/coldfusion/exercises/pig-latin/PigLatin.cfc +0 -13
  196. data/tracks/coldfusion/exercises/pig-latin/PigLatinTest.cfc +0 -115
  197. data/tracks/coldfusion/exercises/pig-latin/Solution.cfc +0 -30
  198. data/tracks/coldfusion/exercises/pig-latin/SolutionTest.cfc +0 -7
  199. data/tracks/coldfusion/exercises/pig-latin/TestRunner.cfc +0 -103
  200. data/tracks/coldfusion/exercises/pig-latin/box.json +0 -8
  201. data/tracks/coldfusion/exercises/pig-latin/index.cfm +0 -37
  202. data/tracks/coldfusion/exercises/raindrops/.meta/HINTS.md +0 -0
  203. data/tracks/coldfusion/exercises/raindrops/Raindrops.cfc +0 -13
  204. data/tracks/coldfusion/exercises/raindrops/RaindropsTest.cfc +0 -87
  205. data/tracks/coldfusion/exercises/raindrops/Solution.cfc +0 -33
  206. data/tracks/coldfusion/exercises/raindrops/SolutionTest.cfc +0 -7
  207. data/tracks/coldfusion/exercises/raindrops/TestRunner.cfc +0 -103
  208. data/tracks/coldfusion/exercises/raindrops/box.json +0 -8
  209. data/tracks/coldfusion/exercises/raindrops/index.cfm +0 -37
  210. data/tracks/coldfusion/exercises/rna-transcription/.meta/HINTS.md +0 -0
  211. data/tracks/coldfusion/exercises/rna-transcription/RnaTranscription.cfc +0 -13
  212. data/tracks/coldfusion/exercises/rna-transcription/RnaTranscriptionTest.cfc +0 -47
  213. data/tracks/coldfusion/exercises/rna-transcription/Solution.cfc +0 -35
  214. data/tracks/coldfusion/exercises/rna-transcription/SolutionTest.cfc +0 -7
  215. data/tracks/coldfusion/exercises/rna-transcription/TestRunner.cfc +0 -103
  216. data/tracks/coldfusion/exercises/rna-transcription/box.json +0 -8
  217. data/tracks/coldfusion/exercises/rna-transcription/index.cfm +0 -37
  218. data/tracks/coldfusion/exercises/saddle-points/.meta/HINTS.md +0 -0
  219. data/tracks/coldfusion/exercises/saddle-points/SaddlePoints.cfc +0 -13
  220. data/tracks/coldfusion/exercises/saddle-points/SaddlePointsTest.cfc +0 -35
  221. data/tracks/coldfusion/exercises/saddle-points/Solution.cfc +0 -59
  222. data/tracks/coldfusion/exercises/saddle-points/SolutionTest.cfc +0 -7
  223. data/tracks/coldfusion/exercises/saddle-points/TestRunner.cfc +0 -103
  224. data/tracks/coldfusion/exercises/saddle-points/box.json +0 -8
  225. data/tracks/coldfusion/exercises/saddle-points/index.cfm +0 -37
  226. data/tracks/coldfusion/exercises/scrabble-score/.meta/HINTS.md +0 -0
  227. data/tracks/coldfusion/exercises/scrabble-score/ScrabbleScore.cfc +0 -13
  228. data/tracks/coldfusion/exercises/scrabble-score/ScrabbleScoreTest.cfc +0 -59
  229. data/tracks/coldfusion/exercises/scrabble-score/Solution.cfc +0 -50
  230. data/tracks/coldfusion/exercises/scrabble-score/SolutionTest.cfc +0 -7
  231. data/tracks/coldfusion/exercises/scrabble-score/TestRunner.cfc +0 -103
  232. data/tracks/coldfusion/exercises/scrabble-score/box.json +0 -8
  233. data/tracks/coldfusion/exercises/scrabble-score/index.cfm +0 -37
  234. data/tracks/coldfusion/exercises/secret-handshake/.meta/HINTS.md +0 -0
  235. data/tracks/coldfusion/exercises/secret-handshake/SecretHandshake.cfc +0 -13
  236. data/tracks/coldfusion/exercises/secret-handshake/SecretHandshakeTest.cfc +0 -63
  237. data/tracks/coldfusion/exercises/secret-handshake/Solution.cfc +0 -31
  238. data/tracks/coldfusion/exercises/secret-handshake/SolutionTest.cfc +0 -7
  239. data/tracks/coldfusion/exercises/secret-handshake/TestRunner.cfc +0 -103
  240. data/tracks/coldfusion/exercises/secret-handshake/box.json +0 -8
  241. data/tracks/coldfusion/exercises/secret-handshake/index.cfm +0 -37
  242. data/tracks/coldfusion/exercises/space-age/.meta/HINTS.md +0 -0
  243. data/tracks/coldfusion/exercises/space-age/Solution.cfc +0 -28
  244. data/tracks/coldfusion/exercises/space-age/SolutionTest.cfc +0 -7
  245. data/tracks/coldfusion/exercises/space-age/SpaceAge.cfc +0 -13
  246. data/tracks/coldfusion/exercises/space-age/SpaceAgeTest.cfc +0 -47
  247. data/tracks/coldfusion/exercises/space-age/TestRunner.cfc +0 -103
  248. data/tracks/coldfusion/exercises/space-age/box.json +0 -8
  249. data/tracks/coldfusion/exercises/space-age/index.cfm +0 -37
  250. data/tracks/coldfusion/exercises/sum-of-multiples/.meta/HINTS.md +0 -0
  251. data/tracks/coldfusion/exercises/sum-of-multiples/Solution.cfc +0 -27
  252. data/tracks/coldfusion/exercises/sum-of-multiples/SolutionTest.cfc +0 -7
  253. data/tracks/coldfusion/exercises/sum-of-multiples/SumOfMultiples.cfc +0 -13
  254. data/tracks/coldfusion/exercises/sum-of-multiples/SumOfMultiplesTest.cfc +0 -63
  255. data/tracks/coldfusion/exercises/sum-of-multiples/TestRunner.cfc +0 -103
  256. data/tracks/coldfusion/exercises/sum-of-multiples/box.json +0 -8
  257. data/tracks/coldfusion/exercises/sum-of-multiples/index.cfm +0 -37
  258. data/tracks/coldfusion/exercises/triangle/.meta/HINTS.md +0 -0
  259. data/tracks/coldfusion/exercises/triangle/Solution.cfc +0 -53
  260. data/tracks/coldfusion/exercises/triangle/SolutionTest.cfc +0 -7
  261. data/tracks/coldfusion/exercises/triangle/TestRunner.cfc +0 -103
  262. data/tracks/coldfusion/exercises/triangle/Triangle.cfc +0 -18
  263. data/tracks/coldfusion/exercises/triangle/TriangleTest.cfc +0 -95
  264. data/tracks/coldfusion/exercises/triangle/box.json +0 -8
  265. data/tracks/coldfusion/exercises/triangle/index.cfm +0 -37
  266. data/tracks/coldfusion/exercises/word-count/.meta/HINTS.md +0 -0
  267. data/tracks/coldfusion/exercises/word-count/Solution.cfc +0 -22
  268. data/tracks/coldfusion/exercises/word-count/SolutionTest.cfc +0 -7
  269. data/tracks/coldfusion/exercises/word-count/TestRunner.cfc +0 -103
  270. data/tracks/coldfusion/exercises/word-count/WordCount.cfc +0 -13
  271. data/tracks/coldfusion/exercises/word-count/WordCountTest.cfc +0 -55
  272. data/tracks/coldfusion/exercises/word-count/box.json +0 -8
  273. data/tracks/coldfusion/exercises/word-count/index.cfm +0 -37
  274. data/tracks/coldfusion/img/icon.png +0 -0
  275. data/tracks/coldfusion/tasks/GenerateTests.cfc +0 -179
  276. data/tracks/coldfusion/tasks/ScaffoldExercise.cfc +0 -85
  277. data/tracks/coldfusion/tasks/TestAllSolutions.cfc +0 -24
  278. data/tracks/coldfusion/tasks/exercise_template/.meta/HINTS.md +0 -0
  279. data/tracks/coldfusion/tasks/exercise_template/@@name@@.cfc +0 -13
  280. data/tracks/coldfusion/tasks/exercise_template/@@name@@Test.cfc +0 -15
  281. data/tracks/coldfusion/tasks/exercise_template/Solution.cfc +0 -6
  282. data/tracks/coldfusion/tasks/exercise_template/SolutionTest.cfc +0 -7
  283. data/tracks/coldfusion/tasks/exercise_template/TestRunner.cfc +0 -103
  284. data/tracks/coldfusion/tasks/exercise_template/box.json +0 -8
  285. data/tracks/coldfusion/tasks/exercise_template/index.cfm +0 -37
  286. data/tracks/csharp/exercises/etl/ETLTest.cs +0 -51
  287. data/tracks/csharp/exercises/saddle-points/SaddlePointTest.cs +0 -68
  288. data/tracks/java/exercises/triangle/.meta/src/reference/java/TriangleKind.java +0 -5
  289. data/tracks/java/exercises/triangle/src/main/java/TriangleKind.java +0 -5
@@ -1,13 +1,13 @@
1
1
  {
2
+ "docs_url": "https://github.com/exercism/docs/blob/master/maintaining-a-track/maintainer-configuration.md",
2
3
  "maintainers": [
3
- {
4
- "github_username": "bdw429s",
5
- "show_on_website": true,
6
- "name": "Brad Wood",
7
- "bio": "ColdBox/CommandBox Developer Advocate. Lucee Member. System Architect. CFML dev. DBA. Dad. Handyman. Ready for a revolution.",
8
- "link_text": "Tech Blog",
9
- "link_url": "http://www.codersrevolution.com/"
10
- }
11
- ],
12
- "docs_url": "https://github.com/exercism/docs/blob/master/maintaining-a-track/maintainer-configuration.md"
13
- }
4
+ {
5
+ "bio": "ColdBox/CommandBox Developer Advocate. Lucee Member. System Architect. CFML dev. DBA. Dad. Handyman. Ready for a revolution.",
6
+ "github_username": "bdw429s",
7
+ "link_text": "Tech Blog",
8
+ "link_url": "http://www.codersrevolution.com/",
9
+ "name": "Brad Wood",
10
+ "show_on_website": true
11
+ }
12
+ ]
13
+ }
@@ -1,7 +1,7 @@
1
1
  using System;
2
2
  using System.Collections.Generic;
3
3
 
4
- public static class ETL
4
+ public static class Etl
5
5
  {
6
6
  public static IDictionary<string, int> Transform(IDictionary<int, IList<string>> old)
7
7
  {
@@ -0,0 +1,102 @@
1
+ // This file was auto-generated based on version 1.0.0 of the canonical data.
2
+
3
+ using Xunit;
4
+ using System.Collections.Generic;
5
+
6
+ public class EtlTest
7
+ {
8
+ [Fact]
9
+ public void A_single_letter()
10
+ {
11
+ var input = new Dictionary<int, IList<string>>
12
+ {
13
+ [1] = new[] { "A" }
14
+ };
15
+ var expected = new Dictionary<string, int>
16
+ {
17
+ ["a"] = 1
18
+ };
19
+ Assert.Equal(expected, Etl.Transform(input));
20
+ }
21
+
22
+ [Fact(Skip = "Remove to run test")]
23
+ public void Single_score_with_multiple_letters()
24
+ {
25
+ var input = new Dictionary<int, IList<string>>
26
+ {
27
+ [1] = new[] { "A", "E", "I", "O", "U" }
28
+ };
29
+ var expected = new Dictionary<string, int>
30
+ {
31
+ ["a"] = 1,
32
+ ["e"] = 1,
33
+ ["i"] = 1,
34
+ ["o"] = 1,
35
+ ["u"] = 1
36
+ };
37
+ Assert.Equal(expected, Etl.Transform(input));
38
+ }
39
+
40
+ [Fact(Skip = "Remove to run test")]
41
+ public void Multiple_scores_with_multiple_letters()
42
+ {
43
+ var input = new Dictionary<int, IList<string>>
44
+ {
45
+ [1] = new[] { "A", "E" },
46
+ [2] = new[] { "D", "G" }
47
+ };
48
+ var expected = new Dictionary<string, int>
49
+ {
50
+ ["a"] = 1,
51
+ ["d"] = 2,
52
+ ["e"] = 1,
53
+ ["g"] = 2
54
+ };
55
+ Assert.Equal(expected, Etl.Transform(input));
56
+ }
57
+
58
+ [Fact(Skip = "Remove to run test")]
59
+ public void Multiple_scores_with_differing_numbers_of_letters()
60
+ {
61
+ var input = new Dictionary<int, IList<string>>
62
+ {
63
+ [1] = new[] { "A", "E", "I", "O", "U", "L", "N", "R", "S", "T" },
64
+ [2] = new[] { "D", "G" },
65
+ [3] = new[] { "B", "C", "M", "P" },
66
+ [4] = new[] { "F", "H", "V", "W", "Y" },
67
+ [5] = new[] { "K" },
68
+ [8] = new[] { "J", "X" },
69
+ [10] = new[] { "Q", "Z" }
70
+ };
71
+ var expected = new Dictionary<string, int>
72
+ {
73
+ ["a"] = 1,
74
+ ["b"] = 3,
75
+ ["c"] = 3,
76
+ ["d"] = 2,
77
+ ["e"] = 1,
78
+ ["f"] = 4,
79
+ ["g"] = 2,
80
+ ["h"] = 4,
81
+ ["i"] = 1,
82
+ ["j"] = 8,
83
+ ["k"] = 5,
84
+ ["l"] = 1,
85
+ ["m"] = 3,
86
+ ["n"] = 1,
87
+ ["o"] = 1,
88
+ ["p"] = 3,
89
+ ["q"] = 10,
90
+ ["r"] = 1,
91
+ ["s"] = 1,
92
+ ["t"] = 1,
93
+ ["u"] = 1,
94
+ ["v"] = 4,
95
+ ["w"] = 4,
96
+ ["x"] = 8,
97
+ ["y"] = 4,
98
+ ["z"] = 10
99
+ };
100
+ Assert.Equal(expected, Etl.Transform(input));
101
+ }
102
+ }
@@ -1,6 +1,6 @@
1
1
  using System.Collections.Generic;
2
2
 
3
- public static class ETL
3
+ public static class Etl
4
4
  {
5
5
  public static IDictionary<string, int> Transform(IDictionary<int, IList<string>> old)
6
6
  {
@@ -1,15 +1,24 @@
1
1
  using System.Collections.Generic;
2
+ using System;
2
3
 
3
4
  public static class PascalsTriangle
4
5
  {
5
6
  public static IEnumerable<IEnumerable<int>> Calculate(int rows)
7
+ {
8
+ if (rows < 0)
9
+ throw new ArgumentOutOfRangeException();
10
+
11
+ return IterateRows(rows);
12
+ }
13
+
14
+ private static IEnumerable<IEnumerable<int>> IterateRows(int rows)
6
15
  {
7
16
  for (var i = 1; i <= rows; i++)
8
17
  {
9
18
  yield return Row(i);
10
19
  }
11
20
  }
12
-
21
+
13
22
  private static IEnumerable<int> Row(int row)
14
23
  {
15
24
  yield return 1;
@@ -7,4 +7,5 @@ public static IEnumerable<IEnumerable<int>> Calculate(int rows)
7
7
  {
8
8
  throw new NotImplementedException();
9
9
  }
10
+
10
11
  }
@@ -1,80 +1,47 @@
1
- using System;
2
- using System.Collections.Generic;
3
- using System.Linq;
1
+ // This file was auto-generated based on version 1.0.0 of the canonical data.
2
+
4
3
  using Xunit;
4
+ using System;
5
5
 
6
6
  public class PascalsTriangleTest
7
7
  {
8
8
  [Fact]
9
- public void One_row()
9
+ public void Zero_rows()
10
+ {
11
+ Assert.Empty(PascalsTriangle.Calculate(0));
12
+ }
13
+
14
+ [Fact(Skip = "Remove to run test")]
15
+ public void Single_row()
10
16
  {
11
- var actual = PascalsTriangle.Calculate(1);
12
17
  var expected = new[] { new[] { 1 } };
13
- Assert.Equal(expected, actual, NestedEnumerableEqualityComparer<int>.Instance);
18
+ Assert.Equal(expected, PascalsTriangle.Calculate(1));
14
19
  }
15
-
20
+
16
21
  [Fact(Skip = "Remove to run test")]
17
22
  public void Two_rows()
18
23
  {
19
- var actual = PascalsTriangle.Calculate(2).ToArray();
20
24
  var expected = new[] { new[] { 1 }, new[] { 1, 1 } };
21
- Assert.Equal(expected, actual, NestedEnumerableEqualityComparer<int>.Instance);
25
+ Assert.Equal(expected, PascalsTriangle.Calculate(2));
22
26
  }
23
27
 
24
28
  [Fact(Skip = "Remove to run test")]
25
29
  public void Three_rows()
26
30
  {
27
- var actual = PascalsTriangle.Calculate(3);
28
31
  var expected = new[] { new[] { 1 }, new[] { 1, 1 }, new[] { 1, 2, 1 } };
29
- Assert.Equal(expected, actual, NestedEnumerableEqualityComparer<int>.Instance);
32
+ Assert.Equal(expected, PascalsTriangle.Calculate(3));
30
33
  }
31
34
 
32
35
  [Fact(Skip = "Remove to run test")]
33
36
  public void Four_rows()
34
37
  {
35
- var actual = PascalsTriangle.Calculate(4);
36
38
  var expected = new[] { new[] { 1 }, new[] { 1, 1 }, new[] { 1, 2, 1 }, new[] { 1, 3, 3, 1 } };
37
- Assert.Equal(expected, actual, NestedEnumerableEqualityComparer<int>.Instance);
38
- }
39
-
40
- [Fact(Skip = "Remove to run test")]
41
- public void Five_rows()
42
- {
43
- var actual = PascalsTriangle.Calculate(5);
44
- var expected = new[] { new[] { 1 }, new[] { 1, 1 }, new[] { 1, 2, 1 }, new[] { 1, 3, 3, 1 }, new[] { 1, 4, 6, 4, 1 } };
45
- Assert.Equal(expected, actual, NestedEnumerableEqualityComparer<int>.Instance);
39
+ Assert.Equal(expected, PascalsTriangle.Calculate(4));
46
40
  }
47
41
 
48
42
  [Fact(Skip = "Remove to run test")]
49
- public void Twenty_rows()
43
+ public void Negative_rows()
50
44
  {
51
- var actual = PascalsTriangle.Calculate(20).Last();
52
- var expected = new[] { 1, 19, 171, 969, 3876, 11628, 27132, 50388, 75582, 92378, 92378, 75582, 50388, 27132, 11628, 3876, 969, 171, 19, 1 };
53
- Assert.Equal(expected, actual);
54
- }
55
-
56
- private class EnumerableEqualityComparer<T> : IEqualityComparer<IEnumerable<T>>
57
- {
58
- public static readonly EnumerableEqualityComparer<T> Instance = new EnumerableEqualityComparer<T>();
59
-
60
- public bool Equals(IEnumerable<T> x, IEnumerable<T> y) => x.SequenceEqual(y);
61
-
62
- public int GetHashCode(IEnumerable<T> obj)
63
- {
64
- throw new NotImplementedException();
65
- }
66
- }
67
-
68
- private class NestedEnumerableEqualityComparer<T> : IEqualityComparer<IEnumerable<IEnumerable<T>>>
69
- {
70
- public static readonly NestedEnumerableEqualityComparer<T> Instance = new NestedEnumerableEqualityComparer<T>();
71
-
72
- public bool Equals(IEnumerable<IEnumerable<T>> x, IEnumerable<IEnumerable<T>> y)
73
- => x.SequenceEqual(y, EnumerableEqualityComparer<T>.Instance);
74
-
75
- public int GetHashCode(IEnumerable<IEnumerable<T>> obj)
76
- {
77
- throw new NotImplementedException();
78
- }
45
+ Assert.Throws<ArgumentOutOfRangeException>(() => PascalsTriangle.Calculate(-1));
79
46
  }
80
47
  }
@@ -0,0 +1,75 @@
1
+ // This file was auto-generated based on version 1.0.0 of the canonical data.
2
+
3
+ using Xunit;
4
+ using System;
5
+
6
+ public class SaddlePointsTest
7
+ {
8
+ [Fact]
9
+ public void Can_identify_single_saddle_point()
10
+ {
11
+ var input = new[,]
12
+ {
13
+ { 9, 8, 7 },
14
+ { 5, 3, 2 },
15
+ { 6, 6, 7 }
16
+ };
17
+ var sut = new SaddlePoints(input);
18
+ var actual = sut.Calculate();
19
+ var expected = new[] { Tuple.Create(1, 0) };
20
+ Assert.Equal(expected, actual);
21
+ }
22
+
23
+ [Fact(Skip = "Remove to run test")]
24
+ public void Can_identify_that_empty_matrix_has_no_saddle_points()
25
+ {
26
+ var input = new int[,] { };
27
+ var sut = new SaddlePoints(input);
28
+ var actual = sut.Calculate();
29
+ Assert.Empty(actual);
30
+ }
31
+
32
+ [Fact(Skip = "Remove to run test")]
33
+ public void Can_identify_lack_of_saddle_points_when_there_are_none()
34
+ {
35
+ var input = new[,]
36
+ {
37
+ { 1, 2, 3 },
38
+ { 3, 1, 2 },
39
+ { 2, 3, 1 }
40
+ };
41
+ var sut = new SaddlePoints(input);
42
+ var actual = sut.Calculate();
43
+ Assert.Empty(actual);
44
+ }
45
+
46
+ [Fact(Skip = "Remove to run test")]
47
+ public void Can_identify_multiple_saddle_points()
48
+ {
49
+ var input = new[,]
50
+ {
51
+ { 4, 5, 4 },
52
+ { 3, 5, 5 },
53
+ { 1, 5, 4 }
54
+ };
55
+ var sut = new SaddlePoints(input);
56
+ var actual = sut.Calculate();
57
+ var expected = new[] { Tuple.Create(0, 1), Tuple.Create(1, 1), Tuple.Create(2, 1) };
58
+ Assert.Equal(expected, actual);
59
+ }
60
+
61
+ [Fact(Skip = "Remove to run test")]
62
+ public void Can_identify_saddle_point_in_bottom_right_corner()
63
+ {
64
+ var input = new[,]
65
+ {
66
+ { 8, 7, 9 },
67
+ { 6, 7, 6 },
68
+ { 3, 2, 5 }
69
+ };
70
+ var sut = new SaddlePoints(input);
71
+ var actual = sut.Calculate();
72
+ var expected = new[] { Tuple.Create(2, 2) };
73
+ Assert.Equal(expected, actual);
74
+ }
75
+ }
@@ -0,0 +1,61 @@
1
+ using Generators.Input;
2
+ using Generators.Output;
3
+ using System.Collections.Generic;
4
+ using System.Linq;
5
+
6
+ namespace Generators.Exercises
7
+ {
8
+ public class Etl : Exercise
9
+ {
10
+ protected override void UpdateCanonicalData(CanonicalData canonicalData)
11
+ {
12
+ foreach (var canonicalDataCase in canonicalData.Cases)
13
+ {
14
+ canonicalDataCase.UseVariablesForInput = true;
15
+ canonicalDataCase.UseVariableForExpected = true;
16
+ // Make sure to convert keys to ints as stated in canonical data
17
+ canonicalDataCase.Properties["input"] = ConvertInput(canonicalDataCase.Properties["input"]);
18
+ canonicalDataCase.Expected = ConvertExpected(canonicalDataCase.Expected);
19
+ }
20
+ }
21
+
22
+ protected override string RenderTestMethodBodyArrange(TestMethodBody testMethodBody)
23
+ {
24
+ // The ValueFormatter doesn't handle Dictionary<int, IList<string>>. Need to format manually.
25
+ Dictionary<int, string[]> inputDictionary = testMethodBody.CanonicalDataCase.Properties["input"];
26
+ var newInput = FormatMultiLineEnumerable(
27
+ inputDictionary.Keys.Select((key, i) => $"[{ValueFormatter.Format(key)}] = {ValueFormatter.Format(inputDictionary[key])}" + (i < inputDictionary.Keys.Count - 1 ? "," : "")),
28
+ "input", "new Dictionary<int, IList<string>>");
29
+ newInput = AddTrailingSemicolon(newInput);
30
+
31
+ var arrangeVariables = testMethodBody.Data.Variables.ToList();
32
+ arrangeVariables.RemoveAt(0);
33
+ arrangeVariables.InsertRange(0, newInput);
34
+ testMethodBody.ArrangeTemplateParameters = new { Variables = arrangeVariables };
35
+
36
+ return base.RenderTestMethodBodyArrange(testMethodBody);
37
+ }
38
+
39
+ private static dynamic ConvertExpected(dynamic expected)
40
+ => ((Dictionary<string, object>)expected).ToDictionary(kv => kv.Key, kv => int.Parse($"{kv.Value}"));
41
+
42
+ private static dynamic ConvertInput(dynamic input)
43
+ => ((Dictionary<string, object>)input).ToDictionary(kv => int.Parse(kv.Key), kv => (string[])kv.Value);
44
+
45
+ private static string[] FormatMultiLineEnumerable(IEnumerable<string> enumerable, string name, string constructor = null)
46
+ => FormatMultiLineVariable(enumerable.Prepend("{").Append("}"), name, constructor);
47
+
48
+ private static string[] FormatMultiLineVariable(IEnumerable<string> enumerable, string name, string constructor = null)
49
+ => enumerable.Select(line => line == "{" || line == "}" ? line : line.Indent())
50
+ .Prepend($"var {name} = {constructor}")
51
+ .ToArray();
52
+
53
+ private static string[] AddTrailingSemicolon(string[] array)
54
+ {
55
+ array[array.Length - 1] += ";";
56
+ return array;
57
+ }
58
+
59
+ protected override HashSet<string> AddAdditionalNamespaces() => new HashSet<string> { typeof(Dictionary<string, int>).Namespace };
60
+ }
61
+ }
@@ -0,0 +1,28 @@
1
+ using System;
2
+ using System.Linq;
3
+ using Generators.Input;
4
+ using Newtonsoft.Json.Linq;
5
+
6
+ namespace Generators.Exercises
7
+ {
8
+ public class PascalsTriangle : Exercise
9
+ {
10
+ protected override void UpdateCanonicalData(CanonicalData canonicalData)
11
+ {
12
+ //remove null case until canonical data is updated
13
+ var cases = canonicalData.Cases.ToList();
14
+ cases.RemoveAll(x => x.Properties["count"] == null);
15
+ canonicalData.Cases = cases.ToArray();
16
+
17
+ foreach (var canonicalDataCase in canonicalData.Cases)
18
+ {
19
+ canonicalDataCase.UseVariableForExpected = true;
20
+ canonicalDataCase.Property = "calculate";
21
+ if (!(canonicalDataCase.Expected is JArray))
22
+ canonicalDataCase.ExceptionThrown = typeof(ArgumentOutOfRangeException);
23
+ if (canonicalDataCase.Properties["count"] == null)
24
+ canonicalDataCase.Properties["count"] = -1;
25
+ }
26
+ }
27
+ }
28
+ }