trackler 2.1.0.11 → 2.1.0.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (554) hide show
  1. checksums.yaml +4 -4
  2. data/bin/bump-content +3 -3
  3. data/common/CONTRIBUTING.md +1 -0
  4. data/common/exercises/atbash-cipher/description.md +1 -1
  5. data/common/exercises/dominoes/canonical-data.json +2 -2
  6. data/common/exercises/robot-name/description.md +2 -3
  7. data/lib/trackler/version.rb +1 -1
  8. data/tracks/coq/.gitignore +3 -0
  9. data/tracks/coq/README.md +12 -14
  10. data/tracks/coq/config.json +18 -1
  11. data/tracks/coq/exercises/TRACK_HINTS.md +22 -0
  12. data/tracks/coq/exercises/hello-world/example.v +12 -0
  13. data/tracks/coq/exercises/hello-world/helloworld.v +3 -0
  14. data/tracks/coq/exercises/hello-world/metadata.yml +3 -0
  15. data/tracks/coq/exercises/hello-world/test.v +9 -0
  16. data/tracks/coq/exercises/rna-transcription/DNA.v +4 -0
  17. data/tracks/coq/exercises/rna-transcription/example.v +15 -0
  18. data/tracks/coq/exercises/rna-transcription/metadata.yml +3 -0
  19. data/tracks/coq/exercises/rna-transcription/rna-transcription.v +5 -0
  20. data/tracks/coq/exercises/tautology/description.md +1 -0
  21. data/tracks/coq/exercises/tautology/example.v +4 -0
  22. data/tracks/coq/exercises/tautology/metadata.yml +3 -0
  23. data/tracks/coq/exercises/tautology/tautology.v +4 -0
  24. data/tracks/ecmascript/.travis.yml +0 -1
  25. data/tracks/ecmascript/Makefile +1 -1
  26. data/tracks/ecmascript/README.md +4 -2
  27. data/tracks/ecmascript/exercises/accumulate/package.json +3 -3
  28. data/tracks/ecmascript/exercises/acronym/package.json +3 -3
  29. data/tracks/ecmascript/exercises/all-your-base/package.json +3 -3
  30. data/tracks/ecmascript/exercises/allergies/package.json +3 -3
  31. data/tracks/ecmascript/exercises/anagram/package.json +3 -3
  32. data/tracks/ecmascript/exercises/atbash-cipher/package.json +3 -3
  33. data/tracks/ecmascript/exercises/beer-song/package.json +3 -3
  34. data/tracks/ecmascript/exercises/binary-search-tree/package.json +3 -3
  35. data/tracks/ecmascript/exercises/binary-search/package.json +3 -3
  36. data/tracks/ecmascript/exercises/binary/package.json +3 -3
  37. data/tracks/ecmascript/exercises/bob/package.json +3 -3
  38. data/tracks/ecmascript/exercises/bracket-push/package.json +3 -3
  39. data/tracks/ecmascript/exercises/circular-buffer/package.json +3 -3
  40. data/tracks/ecmascript/exercises/clock/package.json +3 -3
  41. data/tracks/ecmascript/exercises/crypto-square/package.json +3 -3
  42. data/tracks/ecmascript/exercises/custom-set/package.json +3 -3
  43. data/tracks/ecmascript/exercises/diamond/package.json +3 -3
  44. data/tracks/ecmascript/exercises/difference-of-squares/package.json +3 -3
  45. data/tracks/ecmascript/exercises/etl/package.json +3 -3
  46. data/tracks/ecmascript/exercises/food-chain/package.json +3 -3
  47. data/tracks/ecmascript/exercises/gigasecond/package.json +3 -3
  48. data/tracks/ecmascript/exercises/grade-school/package.json +3 -3
  49. data/tracks/ecmascript/exercises/grains/package.json +3 -3
  50. data/tracks/ecmascript/exercises/hamming/package.json +3 -3
  51. data/tracks/ecmascript/exercises/hello-world/package.json +3 -3
  52. data/tracks/ecmascript/exercises/hexadecimal/package.json +3 -3
  53. data/tracks/ecmascript/exercises/isogram/package.json +3 -3
  54. data/tracks/ecmascript/exercises/kindergarten-garden/package.json +3 -3
  55. data/tracks/ecmascript/exercises/largest-series-product/package.json +3 -3
  56. data/tracks/ecmascript/exercises/leap/package.json +3 -3
  57. data/tracks/ecmascript/exercises/linked-list/package.json +3 -3
  58. data/tracks/ecmascript/exercises/luhn/package.json +3 -3
  59. data/tracks/ecmascript/exercises/matrix/package.json +3 -3
  60. data/tracks/ecmascript/exercises/meetup/package.json +3 -3
  61. data/tracks/ecmascript/exercises/nth-prime/package.json +3 -3
  62. data/tracks/ecmascript/exercises/ocr-numbers/package.json +3 -3
  63. data/tracks/ecmascript/exercises/octal/package.json +3 -3
  64. data/tracks/ecmascript/exercises/palindrome-products/package.json +3 -3
  65. data/tracks/ecmascript/exercises/pangram/package.json +3 -3
  66. data/tracks/ecmascript/exercises/pascals-triangle/package.json +3 -3
  67. data/tracks/ecmascript/exercises/perfect-numbers/package.json +3 -3
  68. data/tracks/ecmascript/exercises/phone-number/package.json +3 -3
  69. data/tracks/ecmascript/exercises/pig-latin/package.json +3 -3
  70. data/tracks/ecmascript/exercises/prime-factors/package.json +3 -3
  71. data/tracks/ecmascript/exercises/pythagorean-triplet/package.json +3 -3
  72. data/tracks/ecmascript/exercises/queen-attack/package.json +3 -3
  73. data/tracks/ecmascript/exercises/raindrops/package.json +3 -3
  74. data/tracks/ecmascript/exercises/rna-transcription/package.json +3 -3
  75. data/tracks/ecmascript/exercises/robot-name/package.json +3 -3
  76. data/tracks/ecmascript/exercises/robot-simulator/package.json +3 -3
  77. data/tracks/ecmascript/exercises/roman-numerals/package.json +3 -3
  78. data/tracks/ecmascript/exercises/saddle-points/package.json +3 -3
  79. data/tracks/ecmascript/exercises/say/package.json +3 -3
  80. data/tracks/ecmascript/exercises/scrabble-score/package.json +3 -3
  81. data/tracks/ecmascript/exercises/secret-handshake/package.json +3 -3
  82. data/tracks/ecmascript/exercises/series/package.json +3 -3
  83. data/tracks/ecmascript/exercises/sieve/package.json +3 -3
  84. data/tracks/ecmascript/exercises/simple-cipher/package.json +3 -3
  85. data/tracks/ecmascript/exercises/space-age/package.json +3 -3
  86. data/tracks/ecmascript/exercises/strain/package.json +3 -3
  87. data/tracks/ecmascript/exercises/sum-of-multiples/package.json +3 -3
  88. data/tracks/ecmascript/exercises/triangle/package.json +3 -3
  89. data/tracks/ecmascript/exercises/trinary/package.json +3 -3
  90. data/tracks/ecmascript/exercises/two-bucket/package.json +3 -3
  91. data/tracks/ecmascript/exercises/word-count/package.json +3 -3
  92. data/tracks/ecmascript/exercises/wordy/package.json +3 -3
  93. data/tracks/ecmascript/package.json +3 -3
  94. data/tracks/ecmascript/yarn.lock +2886 -0
  95. data/tracks/elixir/exercises/isogram/isogram_test.exs +0 -10
  96. data/tracks/elixir/exercises/strain/strain.exs +1 -2
  97. data/tracks/erlang/exercises/roman-numerals/test/roman_numerals_tests.erl +1 -1
  98. data/tracks/go/exercises/binary-search-tree/binary_search_tree_test.go +36 -9
  99. data/tracks/go/exercises/bracket-push/.meta/gen.go +49 -0
  100. data/tracks/go/exercises/bracket-push/bracket_push_test.go +1 -43
  101. data/tracks/go/exercises/bracket-push/cases_test.go +83 -0
  102. data/tracks/go/exercises/bracket-push/example.go +13 -16
  103. data/tracks/go/gen/gen.go +26 -2
  104. data/tracks/haskell/exercises/accumulate/package.yaml +1 -1
  105. data/tracks/haskell/exercises/accumulate/test/Tests.hs +2 -2
  106. data/tracks/haskell/exercises/acronym/package.yaml +1 -1
  107. data/tracks/haskell/exercises/acronym/test/Tests.hs +1 -2
  108. data/tracks/haskell/exercises/all-your-base/package.yaml +1 -1
  109. data/tracks/haskell/exercises/all-your-base/test/Tests.hs +1 -2
  110. data/tracks/haskell/exercises/allergies/package.yaml +1 -1
  111. data/tracks/haskell/exercises/allergies/test/Tests.hs +1 -1
  112. data/tracks/haskell/exercises/alphametics/package.yaml +1 -1
  113. data/tracks/haskell/exercises/alphametics/test/Tests.hs +1 -2
  114. data/tracks/haskell/exercises/anagram/package.yaml +1 -1
  115. data/tracks/haskell/exercises/anagram/test/Tests.hs +1 -2
  116. data/tracks/haskell/exercises/atbash-cipher/package.yaml +1 -1
  117. data/tracks/haskell/exercises/atbash-cipher/test/Tests.hs +1 -1
  118. data/tracks/haskell/exercises/bank-account/package.yaml +1 -1
  119. data/tracks/haskell/exercises/bank-account/test/Tests.hs +2 -2
  120. data/tracks/haskell/exercises/beer-song/package.yaml +1 -1
  121. data/tracks/haskell/exercises/beer-song/test/Tests.hs +8 -10
  122. data/tracks/haskell/exercises/binary-search-tree/package.yaml +1 -1
  123. data/tracks/haskell/exercises/binary-search-tree/test/Tests.hs +2 -2
  124. data/tracks/haskell/exercises/binary/package.yaml +1 -1
  125. data/tracks/haskell/exercises/binary/test/Tests.hs +1 -2
  126. data/tracks/haskell/exercises/bob/package.yaml +1 -1
  127. data/tracks/haskell/exercises/bob/test/Tests.hs +1 -2
  128. data/tracks/haskell/exercises/bowling/package.yaml +1 -1
  129. data/tracks/haskell/exercises/bowling/test/Tests.hs +5 -6
  130. data/tracks/haskell/exercises/bracket-push/package.yaml +1 -1
  131. data/tracks/haskell/exercises/bracket-push/test/Tests.hs +1 -2
  132. data/tracks/haskell/exercises/change/package.yaml +1 -1
  133. data/tracks/haskell/exercises/change/test/Tests.hs +2 -3
  134. data/tracks/haskell/exercises/clock/package.yaml +1 -1
  135. data/tracks/haskell/exercises/clock/test/Tests.hs +1 -1
  136. data/tracks/haskell/exercises/connect/package.yaml +1 -1
  137. data/tracks/haskell/exercises/connect/test/Tests.hs +1 -2
  138. data/tracks/haskell/exercises/crypto-square/package.yaml +1 -1
  139. data/tracks/haskell/exercises/crypto-square/test/Tests.hs +1 -2
  140. data/tracks/haskell/exercises/custom-set/package.yaml +1 -1
  141. data/tracks/haskell/exercises/custom-set/test/Tests.hs +1 -1
  142. data/tracks/haskell/exercises/difference-of-squares/package.yaml +1 -1
  143. data/tracks/haskell/exercises/difference-of-squares/test/Tests.hs +1 -1
  144. data/tracks/haskell/exercises/dominoes/package.yaml +1 -1
  145. data/tracks/haskell/exercises/dominoes/test/Tests.hs +2 -3
  146. data/tracks/haskell/exercises/etl/package.yaml +1 -1
  147. data/tracks/haskell/exercises/etl/test/Tests.hs +1 -1
  148. data/tracks/haskell/exercises/food-chain/package.yaml +1 -1
  149. data/tracks/haskell/exercises/food-chain/test/Tests.hs +8 -10
  150. data/tracks/haskell/exercises/forth/package.yaml +1 -1
  151. data/tracks/haskell/exercises/forth/test/Tests.hs +1 -1
  152. data/tracks/haskell/exercises/gigasecond/package.yaml +1 -1
  153. data/tracks/haskell/exercises/gigasecond/test/Tests.hs +12 -13
  154. data/tracks/haskell/exercises/go-counting/package.yaml +1 -1
  155. data/tracks/haskell/exercises/go-counting/test/Tests.hs +2 -2
  156. data/tracks/haskell/exercises/grade-school/package.yaml +1 -1
  157. data/tracks/haskell/exercises/grade-school/test/Tests.hs +2 -2
  158. data/tracks/haskell/exercises/grains/package.yaml +1 -1
  159. data/tracks/haskell/exercises/grains/test/Tests.hs +1 -1
  160. data/tracks/haskell/exercises/hamming/package.yaml +1 -1
  161. data/tracks/haskell/exercises/hamming/test/Tests.hs +1 -2
  162. data/tracks/haskell/exercises/hello-world/package.yaml +1 -1
  163. data/tracks/haskell/exercises/hello-world/test/Tests.hs +3 -5
  164. data/tracks/haskell/exercises/hexadecimal/package.yaml +1 -1
  165. data/tracks/haskell/exercises/hexadecimal/test/Tests.hs +1 -2
  166. data/tracks/haskell/exercises/house/package.yaml +1 -1
  167. data/tracks/haskell/exercises/house/test/Tests.hs +8 -10
  168. data/tracks/haskell/exercises/kindergarten-garden/package.yaml +1 -1
  169. data/tracks/haskell/exercises/kindergarten-garden/test/Tests.hs +2 -2
  170. data/tracks/haskell/exercises/largest-series-product/package.yaml +1 -1
  171. data/tracks/haskell/exercises/largest-series-product/test/Tests.hs +1 -3
  172. data/tracks/haskell/exercises/leap/package.yaml +1 -1
  173. data/tracks/haskell/exercises/leap/test/Tests.hs +9 -22
  174. data/tracks/haskell/exercises/lens-person/package.yaml +1 -1
  175. data/tracks/haskell/exercises/lens-person/test/Tests.hs +2 -2
  176. data/tracks/haskell/exercises/linked-list/package.yaml +1 -1
  177. data/tracks/haskell/exercises/linked-list/test/Tests.hs +2 -2
  178. data/tracks/haskell/exercises/list-ops/package.yaml +1 -1
  179. data/tracks/haskell/exercises/list-ops/test/Tests.hs +2 -2
  180. data/tracks/haskell/exercises/luhn/examples/success-standard/src/Luhn.hs +8 -23
  181. data/tracks/haskell/exercises/luhn/package.yaml +1 -1
  182. data/tracks/haskell/exercises/luhn/src/Luhn.hs +2 -14
  183. data/tracks/haskell/exercises/luhn/test/Tests.hs +68 -70
  184. data/tracks/haskell/exercises/matrix/package.yaml +1 -1
  185. data/tracks/haskell/exercises/matrix/test/Tests.hs +2 -2
  186. data/tracks/haskell/exercises/meetup/package.yaml +1 -1
  187. data/tracks/haskell/exercises/meetup/test/Tests.hs +1 -2
  188. data/tracks/haskell/exercises/minesweeper/package.yaml +1 -1
  189. data/tracks/haskell/exercises/minesweeper/test/Tests.hs +1 -2
  190. data/tracks/haskell/exercises/nth-prime/package.yaml +1 -1
  191. data/tracks/haskell/exercises/nth-prime/test/Tests.hs +1 -2
  192. data/tracks/haskell/exercises/nucleotide-count/package.yaml +1 -1
  193. data/tracks/haskell/exercises/nucleotide-count/test/Tests.hs +1 -1
  194. data/tracks/haskell/exercises/ocr-numbers/package.yaml +1 -1
  195. data/tracks/haskell/exercises/ocr-numbers/test/Tests.hs +1 -2
  196. data/tracks/haskell/exercises/octal/package.yaml +1 -1
  197. data/tracks/haskell/exercises/octal/test/Tests.hs +2 -2
  198. data/tracks/haskell/exercises/palindrome-products/package.yaml +1 -1
  199. data/tracks/haskell/exercises/palindrome-products/test/Tests.hs +1 -1
  200. data/tracks/haskell/exercises/pangram/package.yaml +1 -1
  201. data/tracks/haskell/exercises/pangram/test/Tests.hs +1 -2
  202. data/tracks/haskell/exercises/parallel-letter-frequency/package.yaml +1 -1
  203. data/tracks/haskell/exercises/parallel-letter-frequency/test/Tests.hs +1 -1
  204. data/tracks/haskell/exercises/pascals-triangle/package.yaml +1 -1
  205. data/tracks/haskell/exercises/pascals-triangle/test/Tests.hs +1 -2
  206. data/tracks/haskell/exercises/phone-number/examples/success-standard/src/Phone.hs +12 -3
  207. data/tracks/haskell/exercises/phone-number/package.yaml +1 -1
  208. data/tracks/haskell/exercises/phone-number/test/Tests.hs +24 -17
  209. data/tracks/haskell/exercises/pig-latin/package.yaml +1 -1
  210. data/tracks/haskell/exercises/pig-latin/test/Tests.hs +1 -2
  211. data/tracks/haskell/exercises/pov/package.yaml +1 -1
  212. data/tracks/haskell/exercises/pov/test/Tests.hs +6 -9
  213. data/tracks/haskell/exercises/prime-factors/package.yaml +1 -1
  214. data/tracks/haskell/exercises/prime-factors/test/Tests.hs +1 -2
  215. data/tracks/haskell/exercises/pythagorean-triplet/package.yaml +1 -1
  216. data/tracks/haskell/exercises/pythagorean-triplet/test/Tests.hs +1 -1
  217. data/tracks/haskell/exercises/queen-attack/package.yaml +1 -1
  218. data/tracks/haskell/exercises/queen-attack/test/Tests.hs +1 -1
  219. data/tracks/haskell/exercises/raindrops/package.yaml +1 -1
  220. data/tracks/haskell/exercises/raindrops/test/Tests.hs +1 -2
  221. data/tracks/haskell/exercises/rna-transcription/package.yaml +1 -1
  222. data/tracks/haskell/exercises/rna-transcription/test/Tests.hs +1 -2
  223. data/tracks/haskell/exercises/robot-name/package.yaml +1 -1
  224. data/tracks/haskell/exercises/robot-name/test/Tests.hs +2 -2
  225. data/tracks/haskell/exercises/robot-simulator/package.yaml +1 -1
  226. data/tracks/haskell/exercises/robot-simulator/test/Tests.hs +1 -1
  227. data/tracks/haskell/exercises/roman-numerals/package.yaml +1 -1
  228. data/tracks/haskell/exercises/roman-numerals/test/Tests.hs +59 -41
  229. data/tracks/haskell/exercises/run-length-encoding/package.yaml +1 -1
  230. data/tracks/haskell/exercises/run-length-encoding/test/Tests.hs +1 -1
  231. data/tracks/haskell/exercises/saddle-points/package.yaml +1 -1
  232. data/tracks/haskell/exercises/saddle-points/test/Tests.hs +1 -2
  233. data/tracks/haskell/exercises/say/package.yaml +1 -1
  234. data/tracks/haskell/exercises/say/test/Tests.hs +1 -2
  235. data/tracks/haskell/exercises/scrabble-score/package.yaml +1 -1
  236. data/tracks/haskell/exercises/scrabble-score/test/Tests.hs +1 -1
  237. data/tracks/haskell/exercises/secret-handshake/package.yaml +1 -1
  238. data/tracks/haskell/exercises/secret-handshake/test/Tests.hs +2 -2
  239. data/tracks/haskell/exercises/series/package.yaml +1 -1
  240. data/tracks/haskell/exercises/series/test/Tests.hs +2 -2
  241. data/tracks/haskell/exercises/sgf-parsing/package.yaml +1 -1
  242. data/tracks/haskell/exercises/sgf-parsing/test/Tests.hs +1 -2
  243. data/tracks/haskell/exercises/sieve/package.yaml +1 -1
  244. data/tracks/haskell/exercises/sieve/test/Tests.hs +1 -2
  245. data/tracks/haskell/exercises/simple-cipher/package.yaml +1 -1
  246. data/tracks/haskell/exercises/simple-cipher/test/Tests.hs +2 -2
  247. data/tracks/haskell/exercises/simple-linked-list/package.yaml +1 -1
  248. data/tracks/haskell/exercises/simple-linked-list/test/Tests.hs +2 -2
  249. data/tracks/haskell/exercises/space-age/package.yaml +1 -1
  250. data/tracks/haskell/exercises/space-age/test/Tests.hs +1 -2
  251. data/tracks/haskell/exercises/strain/package.yaml +1 -1
  252. data/tracks/haskell/exercises/strain/test/Tests.hs +2 -2
  253. data/tracks/haskell/exercises/sublist/package.yaml +1 -1
  254. data/tracks/haskell/exercises/sublist/test/Tests.hs +1 -1
  255. data/tracks/haskell/exercises/sum-of-multiples/package.yaml +1 -1
  256. data/tracks/haskell/exercises/sum-of-multiples/test/Tests.hs +1 -2
  257. data/tracks/haskell/exercises/triangle/package.yaml +1 -1
  258. data/tracks/haskell/exercises/triangle/test/Tests.hs +1 -2
  259. data/tracks/haskell/exercises/trinary/package.yaml +1 -1
  260. data/tracks/haskell/exercises/trinary/test/Tests.hs +2 -2
  261. data/tracks/haskell/exercises/word-count/package.yaml +1 -1
  262. data/tracks/haskell/exercises/word-count/test/Tests.hs +1 -2
  263. data/tracks/haskell/exercises/wordy/package.yaml +1 -1
  264. data/tracks/haskell/exercises/wordy/test/Tests.hs +1 -2
  265. data/tracks/haskell/exercises/zebra-puzzle/package.yaml +1 -1
  266. data/tracks/haskell/exercises/zebra-puzzle/test/Tests.hs +3 -4
  267. data/tracks/haskell/exercises/zipper/package.yaml +1 -1
  268. data/tracks/haskell/exercises/zipper/test/Tests.hs +2 -2
  269. data/tracks/java/.github/PULL_REQUEST_TEMPLATE.md +10 -0
  270. data/tracks/java/POLICIES.md +67 -0
  271. data/tracks/java/config.json +7 -10
  272. data/tracks/java/exercises/acronym/src/example/java/Acronym.java +6 -4
  273. data/tracks/java/exercises/acronym/src/main/java/Acronym.java +11 -0
  274. data/tracks/java/exercises/atbash-cipher/src/test/java/AtbashTest.java +1 -1
  275. data/tracks/java/exercises/beer-song/src/test/java/BeerSongTest.java +6 -6
  276. data/tracks/java/exercises/binary-search-tree/src/test/java/BSTTest.java +8 -8
  277. data/tracks/java/exercises/binary-search/src/test/java/BinarySearchTest.java +9 -9
  278. data/tracks/java/exercises/bob/src/test/java/BobTest.java +17 -17
  279. data/tracks/java/exercises/crypto-square/src/test/java/CryptoSquareTest.java +14 -14
  280. data/tracks/java/exercises/difference-of-squares/src/example/java/DifferenceOfSquaresCalculator.java +4 -4
  281. data/tracks/java/exercises/difference-of-squares/src/main/java/DifferenceOfSquaresCalculator.java +11 -1
  282. data/tracks/java/exercises/hello-world/src/main/java/HelloWorld.java +1 -1
  283. data/tracks/java/exercises/pangram/src/main/java/PangramChecker.java +2 -1
  284. data/tracks/java/exercises/raindrops/src/example/java/RaindropConverter.java +4 -3
  285. data/tracks/java/exercises/raindrops/src/main/java/RaindropConverter.java +7 -0
  286. data/tracks/java/exercises/rna-transcription/src/example/java/RnaTranscription.java +2 -2
  287. data/tracks/java/exercises/rna-transcription/src/main/java/RnaTranscription.java +2 -2
  288. data/tracks/java/exercises/rna-transcription/src/test/java/RnaTranscriptionTest.java +6 -6
  289. data/tracks/java/exercises/run-length-encoding/build.gradle +17 -0
  290. data/tracks/java/exercises/run-length-encoding/src/example/java/RunLengthEncoding.java +67 -0
  291. data/tracks/java/exercises/run-length-encoding/src/main/java/RunLengthEncoding.java +9 -0
  292. data/tracks/java/exercises/run-length-encoding/src/test/java/RunLengthEncodingTest.java +111 -0
  293. data/tracks/java/exercises/scrabble-score/src/example/java/Scrabble.java +5 -6
  294. data/tracks/java/exercises/scrabble-score/src/main/java/Scrabble.java +11 -0
  295. data/tracks/java/exercises/scrabble-score/src/test/java/ScrabbleScoreTest.java +1 -3
  296. data/tracks/java/exercises/space-age/src/example/java/SpaceAge.java +13 -12
  297. data/tracks/java/exercises/space-age/src/main/java/SpaceAge.java +43 -0
  298. data/tracks/javascript/config.json +12 -2
  299. data/tracks/javascript/docs/TESTS.md +2 -2
  300. data/tracks/javascript/exercises/minesweeper/example.js +48 -0
  301. data/tracks/javascript/exercises/minesweeper/minesweeper.spec.js +182 -0
  302. data/tracks/lisp/.travis.yml +1 -1
  303. data/tracks/lisp/bin/xlisp-test.lisp +23 -5
  304. data/tracks/lisp/config.json +114 -29
  305. data/tracks/ocaml/config.json +10 -5
  306. data/tracks/ocaml/exercises/acronym/.merlin +5 -0
  307. data/tracks/ocaml/exercises/acronym/Makefile +11 -0
  308. data/tracks/ocaml/exercises/acronym/acronym.mli +2 -0
  309. data/tracks/ocaml/exercises/acronym/example.ml +12 -0
  310. data/tracks/ocaml/exercises/acronym/test.ml +26 -0
  311. data/tracks/ocaml/exercises/bowling/bowling.mli +4 -2
  312. data/tracks/ocaml/exercises/bowling/example.ml +56 -16
  313. data/tracks/ocaml/exercises/bowling/test.ml +132 -27
  314. data/tracks/ocaml/exercises/dominoes/test.ml +1 -1
  315. data/tracks/ocaml/exercises/phone-number/test.ml +0 -2
  316. data/tracks/ocaml/tools/test-generator/src/special_cases.ml +16 -0
  317. data/tracks/ocaml/tools/test-generator/templates/acronym/template.ml +16 -0
  318. data/tracks/ocaml/tools/test-generator/templates/bowling/template.ml +34 -0
  319. data/tracks/perl5/.github/stale.yml +21 -0
  320. data/tracks/perl6/.github/stale.yml +21 -0
  321. data/tracks/perl6/exercises/accumulate/accumulate.t +5 -13
  322. data/tracks/perl6/exercises/accumulate/example.yaml +23 -0
  323. data/tracks/perl6/exercises/allergies/allergies.t +138 -141
  324. data/tracks/perl6/exercises/allergies/example.yaml +21 -0
  325. data/tracks/perl6/exercises/anagram/anagram.t +141 -143
  326. data/tracks/perl6/exercises/anagram/example.yaml +6 -0
  327. data/tracks/perl6/exercises/atbash-cipher/atbash-cipher.t +99 -101
  328. data/tracks/perl6/exercises/atbash-cipher/example.yaml +13 -0
  329. data/tracks/perl6/exercises/grains/example.yaml +13 -0
  330. data/tracks/perl6/exercises/grains/grains.t +86 -89
  331. data/tracks/perl6/exercises/linked-list/example.yaml +81 -0
  332. data/tracks/perl6/exercises/linked-list/linked-list.t +4 -3
  333. data/tracks/perl6/exercises/raindrops/example.yaml +12 -0
  334. data/tracks/perl6/exercises/raindrops/raindrops.t +124 -127
  335. data/tracks/perl6/exercises/rna-transcription/example.yaml +12 -0
  336. data/tracks/perl6/exercises/rna-transcription/rna-transcription.t +75 -78
  337. data/tracks/perl6/exercises/robot-name/example.yaml +25 -0
  338. data/tracks/perl6/exercises/robot-name/robot-name.t +5 -7
  339. data/tracks/perl6/exercises/scrabble-score/example.yaml +6 -0
  340. data/tracks/perl6/exercises/scrabble-score/scrabble-score.t +81 -84
  341. data/tracks/perl6/exercises/space-age/example.yaml +6 -0
  342. data/tracks/perl6/exercises/space-age/space-age.t +71 -74
  343. data/tracks/perl6/exercises/word-count/example.yaml +6 -0
  344. data/tracks/perl6/exercises/word-count/word-count.t +125 -128
  345. data/tracks/perl6/exercises/wordy/example.yaml +12 -0
  346. data/tracks/perl6/exercises/wordy/wordy.t +117 -120
  347. data/tracks/perl6/templates/test.mustache +3 -1
  348. data/tracks/php/config.json +5 -0
  349. data/tracks/php/exercises/sum-of-multiples/example.php +15 -0
  350. data/tracks/php/exercises/sum-of-multiples/sum-of-multiples_test.php +64 -0
  351. data/tracks/python/exercises/book-store/book_store_test.py +1 -1
  352. data/tracks/python/exercises/rail-fence-cipher/rail_fence_cipher_test.py +7 -7
  353. data/tracks/python/exercises/tournament/tournament_test.py +62 -15
  354. data/tracks/r/docs/TESTS.md +2 -0
  355. data/tracks/r/exercises/TRACK_HINTS.md +1 -1
  356. data/tracks/racket/docs/INSTALLATION.md +13 -3
  357. data/tracks/ruby/README.md +27 -21
  358. data/tracks/ruby/bin/generate +3 -3
  359. data/tracks/ruby/config.json +7 -6
  360. data/tracks/ruby/exercises/accumulate/{example.rb → .meta/solutions/accumulate.rb} +0 -0
  361. data/tracks/ruby/exercises/acronym/.meta/generator/{acronym_cases.rb → acronym_case.rb} +0 -0
  362. data/tracks/ruby/exercises/acronym/{example.rb → .meta/solutions/acronym.rb} +0 -0
  363. data/tracks/ruby/exercises/all-your-base/.meta/generator/{all_your_base_cases.rb → all_your_base_case.rb} +0 -0
  364. data/tracks/ruby/exercises/all-your-base/{example.rb → .meta/solutions/all_your_base.rb} +0 -0
  365. data/tracks/ruby/exercises/allergies/{example.rb → .meta/solutions/allergies.rb} +0 -0
  366. data/tracks/ruby/exercises/alphametics/.meta/generator/{alphametics_cases.rb → alphametics_case.rb} +0 -0
  367. data/tracks/ruby/exercises/alphametics/.meta/generator/test_template.erb +2 -2
  368. data/tracks/ruby/exercises/alphametics/{example.rb → .meta/solutions/alphametics.rb} +0 -0
  369. data/tracks/ruby/exercises/anagram/.meta/generator/{anagram_cases.rb → anagram_case.rb} +0 -0
  370. data/tracks/ruby/exercises/anagram/{example.rb → .meta/solutions/anagram.rb} +0 -0
  371. data/tracks/ruby/exercises/atbash-cipher/{example.rb → .meta/solutions/atbash_cipher.rb} +0 -0
  372. data/tracks/ruby/exercises/beer-song/.meta/generator/{beer_song_cases.rb → beer_song_case.rb} +0 -0
  373. data/tracks/ruby/exercises/beer-song/{example.rb → .meta/solutions/beer_song.rb} +0 -0
  374. data/tracks/ruby/exercises/binary-search-tree/{example.rb → .meta/solutions/binary_search_tree.rb} +0 -0
  375. data/tracks/ruby/exercises/binary-search/{example.rb → .meta/solutions/binary_search.rb} +0 -0
  376. data/tracks/ruby/exercises/binary/.meta/generator/{binary_cases.rb → binary_case.rb} +0 -0
  377. data/tracks/ruby/exercises/binary/{example.rb → .meta/solutions/binary.rb} +0 -0
  378. data/tracks/ruby/exercises/bob/{example.rb → .meta/solutions/bob.rb} +0 -0
  379. data/tracks/ruby/exercises/bowling/.meta/generator/{bowling_cases.rb → bowling_case.rb} +0 -0
  380. data/tracks/ruby/exercises/bowling/.meta/generator/test_template.erb +2 -2
  381. data/tracks/ruby/exercises/bowling/{example.rb → .meta/solutions/bowling.rb} +0 -0
  382. data/tracks/ruby/exercises/bracket-push/.meta/generator/{bracket_push_cases.rb → bracket_push_case.rb} +0 -0
  383. data/tracks/ruby/exercises/bracket-push/{example.rb → .meta/solutions/bracket_push.rb} +0 -0
  384. data/tracks/ruby/exercises/circular-buffer/{example.rb → .meta/solutions/circular_buffer.rb} +0 -0
  385. data/tracks/ruby/exercises/clock/.meta/generator/{clock_cases.rb → clock_case.rb} +0 -0
  386. data/tracks/ruby/exercises/clock/{example.rb → .meta/solutions/clock.rb} +0 -0
  387. data/tracks/ruby/exercises/connect/.meta/generator/{connect_cases.rb → connect_case.rb} +0 -0
  388. data/tracks/ruby/exercises/connect/.meta/generator/test_template.erb +2 -2
  389. data/tracks/ruby/exercises/connect/{example.rb → .meta/solutions/connect.rb} +0 -0
  390. data/tracks/ruby/exercises/crypto-square/{example.rb → .meta/solutions/crypto_square.rb} +0 -0
  391. data/tracks/ruby/exercises/custom-set/.meta/generator/{custom_set_cases.rb → custom_set_case.rb} +0 -0
  392. data/tracks/ruby/exercises/custom-set/{example.rb → .meta/solutions/custom_set.rb} +0 -0
  393. data/tracks/ruby/exercises/diamond/{example.rb → .meta/solutions/diamond.rb} +0 -0
  394. data/tracks/ruby/exercises/difference-of-squares/.meta/generator/{difference_of_squares_cases.rb → difference_of_squares_case.rb} +0 -0
  395. data/tracks/ruby/exercises/difference-of-squares/{example.rb → .meta/solutions/difference_of_squares.rb} +0 -0
  396. data/tracks/ruby/exercises/dominoes/.meta/generator/{dominoes_cases.rb → dominoes_case.rb} +0 -0
  397. data/tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb +2 -2
  398. data/tracks/ruby/exercises/dominoes/{example.rb → .meta/solutions/dominoes.rb} +0 -0
  399. data/tracks/ruby/exercises/dominoes/dominoes_test.rb +2 -2
  400. data/tracks/ruby/exercises/etl/.meta/generator/{etl_cases.rb → etl_case.rb} +0 -0
  401. data/tracks/ruby/exercises/etl/{example.rb → .meta/solutions/etl.rb} +0 -0
  402. data/tracks/ruby/exercises/flatten-array/{example.rb → .meta/solutions/flatten_array.rb} +0 -0
  403. data/tracks/ruby/exercises/food-chain/{example.rb → .meta/solutions/food_chain.rb} +0 -0
  404. data/tracks/ruby/exercises/gigasecond/.meta/generator/{gigasecond_cases.rb → gigasecond_case.rb} +0 -0
  405. data/tracks/ruby/exercises/gigasecond/{example.rb → .meta/solutions/gigasecond.rb} +0 -0
  406. data/tracks/ruby/exercises/grade-school/{example.rb → .meta/solutions/grade_school.rb} +0 -0
  407. data/tracks/ruby/exercises/grains/.meta/generator/{grains_cases.rb → grains_case.rb} +0 -0
  408. data/tracks/ruby/exercises/grains/{example.rb → .meta/solutions/grains.rb} +0 -0
  409. data/tracks/ruby/exercises/hamming/.meta/generator/{hamming_cases.rb → hamming_case.rb} +0 -0
  410. data/tracks/ruby/exercises/hamming/{example.rb → .meta/solutions/hamming.rb} +0 -0
  411. data/tracks/ruby/exercises/hello-world/.meta/generator/{hello_world_cases.rb → hello_world_case.rb} +0 -0
  412. data/tracks/ruby/exercises/hello-world/.meta/generator/test_template.erb +2 -2
  413. data/tracks/ruby/exercises/hello-world/{example.rb → .meta/solutions/hello_world.rb} +0 -0
  414. data/tracks/ruby/exercises/hexadecimal/{example.rb → .meta/solutions/hexadecimal.rb} +0 -0
  415. data/tracks/ruby/exercises/house/{example.rb → .meta/solutions/house.rb} +0 -0
  416. data/tracks/ruby/exercises/isogram/.meta/generator/{isogram_cases.rb → isogram_case.rb} +0 -0
  417. data/tracks/ruby/exercises/isogram/{example.rb → .meta/solutions/isogram.rb} +0 -0
  418. data/tracks/ruby/exercises/kindergarten-garden/{example.rb → .meta/solutions/kindergarten_garden.rb} +0 -0
  419. data/tracks/ruby/exercises/largest-series-product/.meta/generator/{largest_series_product_cases.rb → largest_series_product_case.rb} +0 -0
  420. data/tracks/ruby/exercises/largest-series-product/{example.rb → .meta/solutions/largest_series_product.rb} +0 -0
  421. data/tracks/ruby/exercises/leap/.meta/generator/{leap_cases.rb → leap_case.rb} +0 -0
  422. data/tracks/ruby/exercises/leap/.meta/generator/test_template.erb +2 -2
  423. data/tracks/ruby/exercises/leap/{example.rb → .meta/solutions/leap.rb} +0 -0
  424. data/tracks/ruby/exercises/linked-list/{example.rb → .meta/solutions/linked_list.rb} +0 -0
  425. data/tracks/ruby/exercises/list-ops/{example.rb → .meta/solutions/list_ops.rb} +0 -0
  426. data/tracks/ruby/exercises/luhn/.meta/generator/{luhn_cases.rb → luhn_case.rb} +0 -0
  427. data/tracks/ruby/exercises/luhn/{example.rb → .meta/solutions/luhn.rb} +0 -0
  428. data/tracks/ruby/exercises/matrix/{example.rb → .meta/solutions/matrix.rb} +0 -0
  429. data/tracks/ruby/exercises/meetup/{example.rb → .meta/solutions/meetup.rb} +0 -0
  430. data/tracks/ruby/exercises/minesweeper/{example.rb → .meta/solutions/minesweeper.rb} +0 -0
  431. data/tracks/ruby/exercises/nth-prime/.meta/generator/{nth_prime_cases.rb → nth_prime_case.rb} +0 -0
  432. data/tracks/ruby/exercises/nth-prime/{example.rb → .meta/solutions/nth_prime.rb} +0 -0
  433. data/tracks/ruby/exercises/nucleotide-count/{example.rb → .meta/solutions/nucleotide_count.rb} +0 -0
  434. data/tracks/ruby/exercises/ocr-numbers/.meta/generator/{ocr_numbers_cases.rb → ocr_numbers_case.rb} +0 -0
  435. data/tracks/ruby/exercises/ocr-numbers/{example.rb → .meta/solutions/ocr_numbers.rb} +0 -0
  436. data/tracks/ruby/exercises/octal/{example.rb → .meta/solutions/octal.rb} +0 -0
  437. data/tracks/ruby/exercises/palindrome-products/{example.rb → .meta/solutions/palindrome_products.rb} +0 -0
  438. data/tracks/ruby/exercises/pangram/.meta/generator/{pangram_cases.rb → pangram_case.rb} +0 -0
  439. data/tracks/ruby/exercises/pangram/{example.rb → .meta/solutions/pangram.rb} +0 -0
  440. data/tracks/ruby/exercises/pascals-triangle/{example.rb → .meta/solutions/pascals_triangle.rb} +0 -0
  441. data/tracks/ruby/exercises/perfect-numbers/{example.rb → .meta/solutions/perfect_numbers.rb} +0 -0
  442. data/tracks/ruby/exercises/phone-number/.meta/generator/{phone_number_cases.rb → phone_number_case.rb} +0 -0
  443. data/tracks/ruby/exercises/phone-number/{example.rb → .meta/solutions/phone_number.rb} +0 -0
  444. data/tracks/ruby/exercises/pig-latin/.meta/generator/{pig_latin_cases.rb → pig_latin_case.rb} +0 -0
  445. data/tracks/ruby/exercises/pig-latin/{example.rb → .meta/solutions/pig_latin.rb} +0 -0
  446. data/tracks/ruby/exercises/point-mutations/{example.rb → .meta/solutions/point_mutations.rb} +0 -0
  447. data/tracks/ruby/exercises/poker/{example.rb → .meta/solutions/poker.rb} +0 -0
  448. data/tracks/ruby/exercises/prime-factors/{example.rb → .meta/solutions/prime_factors.rb} +0 -0
  449. data/tracks/ruby/exercises/protein-translation/{example.rb → .meta/solutions/protein_translation.rb} +0 -0
  450. data/tracks/ruby/exercises/proverb/{example.rb → .meta/solutions/proverb.rb} +0 -0
  451. data/tracks/ruby/exercises/pythagorean-triplet/{example.rb → .meta/solutions/pythagorean_triplet.rb} +0 -0
  452. data/tracks/ruby/exercises/queen-attack/.meta/generator/{queen_attack_cases.rb → queen_attack_case.rb} +0 -0
  453. data/tracks/ruby/exercises/queen-attack/{example.rb → .meta/solutions/queen_attack.rb} +0 -0
  454. data/tracks/ruby/exercises/rail-fence-cipher/{example.rb → .meta/solutions/rail_fence_cipher.rb} +0 -0
  455. data/tracks/ruby/exercises/raindrops/.meta/generator/{raindrops_cases.rb → raindrops_case.rb} +0 -0
  456. data/tracks/ruby/exercises/raindrops/{example.rb → .meta/solutions/raindrops.rb} +0 -0
  457. data/tracks/ruby/exercises/rna-transcription/.meta/generator/{rna_transcription_cases.rb → rna_transcription_case.rb} +0 -0
  458. data/tracks/ruby/exercises/rna-transcription/{example.rb → .meta/solutions/rna_transcription.rb} +0 -0
  459. data/tracks/ruby/exercises/robot-name/.meta/solutions/robot_name.rb +21 -0
  460. data/tracks/ruby/exercises/robot-name/HINTS.md +7 -0
  461. data/tracks/ruby/exercises/robot-name/robot_name_test.rb +63 -27
  462. data/tracks/ruby/exercises/robot-simulator/{example.rb → .meta/solutions/robot_simulator.rb} +0 -0
  463. data/tracks/ruby/exercises/roman-numerals/.meta/generator/{roman_numerals_cases.rb → roman_numerals_case.rb} +0 -0
  464. data/tracks/ruby/exercises/roman-numerals/{example.rb → .meta/solutions/roman_numerals.rb} +0 -0
  465. data/tracks/ruby/exercises/run-length-encoding/.meta/generator/{run_length_encoding_cases.rb → run_length_encoding_case.rb} +0 -0
  466. data/tracks/ruby/exercises/run-length-encoding/{example.rb → .meta/solutions/run_length_encoding.rb} +0 -0
  467. data/tracks/ruby/exercises/saddle-points/{example.rb → .meta/solutions/saddle_points.rb} +0 -0
  468. data/tracks/ruby/exercises/say/.meta/generator/{say_cases.rb → say_case.rb} +0 -0
  469. data/tracks/ruby/exercises/say/{example.rb → .meta/solutions/say.rb} +0 -0
  470. data/tracks/ruby/exercises/scale-generator/{example.rb → .meta/solutions/scale_generator.rb} +0 -0
  471. data/tracks/ruby/exercises/scrabble-score/{example.rb → .meta/solutions/scrabble_score.rb} +0 -0
  472. data/tracks/ruby/exercises/secret-handshake/{example.rb → .meta/solutions/secret_handshake.rb} +0 -0
  473. data/tracks/ruby/exercises/series/{example.rb → .meta/solutions/series.rb} +0 -0
  474. data/tracks/ruby/exercises/sieve/.meta/generator/{sieve_cases.rb → sieve_case.rb} +0 -0
  475. data/tracks/ruby/exercises/sieve/{example.rb → .meta/solutions/sieve.rb} +0 -0
  476. data/tracks/ruby/exercises/simple-cipher/{example.rb → .meta/solutions/simple_cipher.rb} +0 -0
  477. data/tracks/ruby/exercises/simple-linked-list/{example.rb → .meta/solutions/simple_linked_list.rb} +0 -0
  478. data/tracks/ruby/exercises/space-age/{example.rb → .meta/solutions/space_age.rb} +0 -0
  479. data/tracks/ruby/exercises/strain/{example.rb → .meta/solutions/strain.rb} +0 -0
  480. data/tracks/ruby/exercises/sum-of-multiples/{example.rb → .meta/solutions/sum_of_multiples.rb} +0 -0
  481. data/tracks/ruby/exercises/tournament/.meta/generator/{tournament_cases.rb → tournament_case.rb} +0 -0
  482. data/tracks/ruby/exercises/tournament/{example.rb → .meta/solutions/tournament.rb} +0 -0
  483. data/tracks/ruby/exercises/transpose/.meta/generator/{transpose_cases.rb → transpose_case.rb} +0 -0
  484. data/tracks/ruby/exercises/transpose/{example.rb → .meta/solutions/transpose.rb} +0 -0
  485. data/tracks/ruby/exercises/triangle/.meta/generator/{triangle_cases.rb → triangle_case.rb} +0 -0
  486. data/tracks/ruby/exercises/triangle/{example.rb → .meta/solutions/triangle.rb} +0 -0
  487. data/tracks/ruby/exercises/trinary/{example.rb → .meta/solutions/trinary.rb} +0 -0
  488. data/tracks/ruby/exercises/twelve-days/{example.rb → .meta/solutions/twelve_days.rb} +0 -0
  489. data/tracks/ruby/exercises/two-bucket/.meta/generator/{two_bucket_cases.rb → two_bucket_case.rb} +0 -0
  490. data/tracks/ruby/exercises/two-bucket/{example.rb → .meta/solutions/two_bucket.rb} +0 -0
  491. data/tracks/ruby/exercises/word-count/.meta/generator/{word_count_cases.rb → word_count_case.rb} +0 -0
  492. data/tracks/ruby/exercises/word-count/{example.rb → .meta/solutions/word_count.rb} +0 -0
  493. data/tracks/ruby/exercises/wordy/.meta/generator/{wordy_cases.rb → wordy_case.rb} +0 -0
  494. data/tracks/ruby/exercises/wordy/{example.rb → .meta/solutions/wordy.rb} +0 -0
  495. data/tracks/ruby/lib/generator.rb +2 -2
  496. data/tracks/ruby/lib/generator/case_values.rb +2 -5
  497. data/tracks/ruby/lib/generator/command_line.rb +20 -86
  498. data/tracks/ruby/lib/generator/command_line/generator_optparser.rb +90 -0
  499. data/tracks/ruby/lib/generator/exercise_case.rb +2 -2
  500. data/tracks/ruby/lib/generator/files.rb +0 -12
  501. data/tracks/ruby/lib/generator/files/generator_cases.rb +28 -17
  502. data/tracks/ruby/lib/generator/files/metadata_files.rb +1 -3
  503. data/tracks/ruby/lib/generator/files/track_files.rb +22 -24
  504. data/tracks/ruby/lib/generator/{repository.rb → implementation.rb} +17 -13
  505. data/tracks/ruby/lib/generator/template_values.rb +9 -5
  506. data/tracks/ruby/lib/generator/test_template.erb +2 -2
  507. data/tracks/ruby/lib/tasks/exercise.rb +12 -20
  508. data/tracks/ruby/lib/tasks/exercise_tests_runner.rb +1 -1
  509. data/tracks/ruby/test/fixtures/xruby/exercises/{beta/example.tt → alpha-beta/.meta/generator/test_template.erb} +4 -6
  510. data/tracks/ruby/test/fixtures/xruby/exercises/alpha/.meta/generator/alpha_case.rb +9 -0
  511. data/tracks/ruby/test/fixtures/xruby/exercises/alpha/.meta/generator/test_template.erb +2 -2
  512. data/tracks/ruby/test/fixtures/xruby/exercises/alpha/.meta/solutions/alpha.rb +1 -1
  513. data/tracks/ruby/test/fixtures/xruby/exercises/beta/.meta/generator/{beta_cases.rb → beta_case.rb} +0 -0
  514. data/tracks/ruby/test/fixtures/xruby/lib/generator/test_template.erb +2 -2
  515. data/tracks/ruby/test/generator/case_values_test.rb +3 -3
  516. data/tracks/ruby/test/generator/command_line/generator_optparser_test.rb +122 -0
  517. data/tracks/ruby/test/generator/command_line_test.rb +13 -3
  518. data/tracks/ruby/test/generator/exercise_case_test.rb +2 -2
  519. data/tracks/ruby/test/generator/files/generate_cases_test.rb +18 -26
  520. data/tracks/ruby/test/generator/files/metadata_files_test.rb +2 -2
  521. data/tracks/ruby/test/generator/files/track_files_test.rb +8 -14
  522. data/tracks/ruby/test/generator/files_test.rb +0 -20
  523. data/tracks/ruby/test/generator/implementation_test.rb +145 -0
  524. data/tracks/ruby/test/generator/template_values_test.rb +5 -6
  525. data/tracks/ruby/test/generator_test.rb +10 -10
  526. data/tracks/ruby/test/tasks/exercise_test.rb +8 -12
  527. data/tracks/ruby/test/tasks/exercise_tests_runner_test.rb +2 -2
  528. data/tracks/ruby/test/test_helper.rb +13 -10
  529. data/tracks/ruby/test/wordy_cases_test.rb +1 -1
  530. data/tracks/rust/config.json +1 -0
  531. data/tracks/rust/exercises/bracket-push/Cargo.toml +1 -1
  532. data/tracks/rust/exercises/bracket-push/tests/bracket-push.rs +6 -0
  533. data/tracks/rust/exercises/dominoes/Cargo.toml +1 -1
  534. data/tracks/rust/exercises/dominoes/tests/dominoes.rs +1 -1
  535. data/tracks/rust/exercises/luhn-from/.meta/description.md +9 -0
  536. data/tracks/rust/exercises/luhn-from/.meta/metadata.yml +3 -0
  537. data/tracks/rust/exercises/luhn-trait/.meta/description.md +17 -0
  538. data/tracks/rust/exercises/luhn-trait/.meta/metadata.yml +3 -0
  539. data/tracks/rust/exercises/rectangles/Cargo.toml +1 -1
  540. data/tracks/rust/exercises/rectangles/tests/rectangles.rs +31 -0
  541. data/tracks/rust/exercises/tournament/Cargo.toml +1 -1
  542. data/tracks/rust/exercises/tournament/example.rs +6 -6
  543. data/tracks/rust/exercises/tournament/tests/tournament.rs +116 -30
  544. metadata +190 -140
  545. data/tracks/haskell/exercises/pythagorean-triplet/.meta/DONT-TEST-STUB +0 -2
  546. data/tracks/java/exercises/acronym/src/main/java/.keep +0 -0
  547. data/tracks/java/exercises/raindrops/src/main/java/.keep +0 -0
  548. data/tracks/java/exercises/scrabble-score/src/main/java/.keep +0 -0
  549. data/tracks/java/exercises/space-age/src/main/java/.keep +0 -0
  550. data/tracks/ruby/exercises/robot-name/example.rb +0 -43
  551. data/tracks/ruby/test/fixtures/xruby/exercises/alpha/.meta/generator/alpha_cases.rb +0 -20
  552. data/tracks/ruby/test/fixtures/xruby/exercises/beta/example.rb +0 -5
  553. data/tracks/ruby/test/generator/repository_test.rb +0 -90
  554. data/tracks/ruby/test/tasks/exercise_tests_runner_legacy_test.rb +0 -64
@@ -1,5 +1,5 @@
1
1
  name: run-length-encoding
2
- version: 1.0.0.2
2
+ version: 1.0.0.3
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -10,7 +10,7 @@ main :: IO ()
10
10
  main = hspecWith defaultConfig {configFastFail = True} specs
11
11
 
12
12
  specs :: Spec
13
- specs = describe "run-length-encoding" $ do
13
+ specs = do
14
14
  describe "decode" $ for_ decodeCases $ test decode
15
15
  describe "encode" $ for_ encodeCases $ test encode
16
16
  describe "both" $ for_ bothCases $ test (decode . encode)
@@ -1,5 +1,5 @@
1
1
  name: saddle-points
2
- version: 1.0.0.2
2
+ version: 1.0.0.3
3
3
 
4
4
  dependencies:
5
5
  - array
@@ -11,8 +11,7 @@ main :: IO ()
11
11
  main = hspecWith defaultConfig {configFastFail = True} specs
12
12
 
13
13
  specs :: Spec
14
- specs = describe "saddle-points" $
15
- describe "saddlePoints" $ for_ cases test
14
+ specs = describe "saddlePoints" $ for_ cases test
16
15
  where
17
16
 
18
17
  test (description, xss, expected) = it description assertion
@@ -1,5 +1,5 @@
1
1
  name: say
2
- version: 1.0.0.2
2
+ version: 1.0.0.3
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -10,8 +10,7 @@ main :: IO ()
10
10
  main = hspecWith defaultConfig {configFastFail = True} specs
11
11
 
12
12
  specs :: Spec
13
- specs = describe "say" $
14
- describe "inEnglish" $ for_ cases test
13
+ specs = describe "inEnglish" $ for_ cases test
15
14
  where
16
15
 
17
16
  test (n, expected) = it description assertion
@@ -1,5 +1,5 @@
1
1
  name: scrabble-score
2
- version: 1.0.0.2
2
+ version: 1.0.0.3
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -11,7 +11,7 @@ main :: IO ()
11
11
  main = hspecWith defaultConfig {configFastFail = True} specs
12
12
 
13
13
  specs :: Spec
14
- specs = describe "scrabble-score" $ do
14
+ specs = do
15
15
  describe "scoreLetter" $ do
16
16
  it "'a'" $ scoreLetter 'a' `shouldBe` 1
17
17
  it "'Z'" $ scoreLetter 'Z' `shouldBe` 10
@@ -1,5 +1,5 @@
1
1
  name: secret-handshake
2
- version: 1.0.0.2
2
+ version: 1.0.0.3
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -1,4 +1,4 @@
1
- import Test.Hspec (Spec, describe, it, shouldBe)
1
+ import Test.Hspec (Spec, it, shouldBe)
2
2
  import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)
3
3
 
4
4
  import SecretHandshake (handshake)
@@ -7,7 +7,7 @@ main :: IO ()
7
7
  main = hspecWith defaultConfig {configFastFail = True} specs
8
8
 
9
9
  specs :: Spec
10
- specs = describe "secret-handshake" $ do
10
+ specs = do
11
11
 
12
12
  it "wink for 1" $
13
13
  handshake (1 :: Int) `shouldBe` ["wink"]
@@ -1,5 +1,5 @@
1
1
  name: series
2
- version: 0.1.0.1
2
+ version: 0.1.0.2
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -3,7 +3,7 @@
3
3
  {-# LANGUAGE OverloadedStrings #-}
4
4
 
5
5
  import GHC.Exts (toList)
6
- import Test.Hspec (Spec, describe, it, shouldBe)
6
+ import Test.Hspec (Spec, it, shouldBe)
7
7
  import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)
8
8
 
9
9
  import Series (slices)
@@ -12,7 +12,7 @@ main :: IO ()
12
12
  main = hspecWith defaultConfig {configFastFail = True} specs
13
13
 
14
14
  specs :: Spec
15
- specs = describe "series" $ do
15
+ specs = do
16
16
 
17
17
  let x `shouldHaveSlices` yss = (map toList . toList) x `shouldBe` yss
18
18
 
@@ -1,5 +1,5 @@
1
1
  name: sgf-parsing
2
- version: 0.1.0.1
2
+ version: 0.1.0.2
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -12,8 +12,7 @@ main :: IO ()
12
12
  main = hspecWith defaultConfig {configFastFail = True} specs
13
13
 
14
14
  specs :: Spec
15
- specs = describe "sgf-parsing" $
16
- describe "parseSgf" $ for_ cases test
15
+ specs = describe "parseSgf" $ for_ cases test
17
16
  where
18
17
 
19
18
  test (input, expected) = it description assertion
@@ -1,5 +1,5 @@
1
1
  name: sieve
2
- version: 1.0.0.2
2
+ version: 1.0.0.3
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -11,8 +11,7 @@ main :: IO ()
11
11
  main = hspecWith defaultConfig {configFastFail = True} specs
12
12
 
13
13
  specs :: Spec
14
- specs = describe "sieve" $
15
- describe "primesUpTo" $ for_ cases test
14
+ specs = describe "primesUpTo" $ for_ cases test
16
15
  where
17
16
 
18
17
  test Case{..} = it description assertion
@@ -1,5 +1,5 @@
1
1
  name: simple-cipher
2
- version: 0.1.0.1
2
+ version: 0.1.0.2
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -1,4 +1,4 @@
1
- import Test.Hspec (Spec, describe, it, shouldBe)
1
+ import Test.Hspec (Spec, it, shouldBe)
2
2
  import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)
3
3
 
4
4
  import Cipher (caesarDecode, caesarEncode, caesarEncodeRandom)
@@ -7,7 +7,7 @@ main :: IO ()
7
7
  main = hspecWith defaultConfig {configFastFail = True} specs
8
8
 
9
9
  specs :: Spec
10
- specs = describe "simple-cipher" $ do
10
+ specs = do
11
11
 
12
12
  it "no-op encode" $ do
13
13
  caesarEncode "a" ['a'..'z'] `shouldBe` ['a'..'z']
@@ -1,5 +1,5 @@
1
1
  name: simple-linked-list
2
- version: 0.1.0.1
2
+ version: 0.1.0.2
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -1,7 +1,7 @@
1
1
  {-# LANGUAGE ScopedTypeVariables #-}
2
2
  {-# OPTIONS_GHC -fno-warn-orphans #-}
3
3
 
4
- import Test.Hspec (Spec, describe, it, shouldBe)
4
+ import Test.Hspec (Spec, it, shouldBe)
5
5
  import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)
6
6
  import Test.QuickCheck (property)
7
7
  import Test.QuickCheck.Arbitrary
@@ -29,7 +29,7 @@ main :: IO ()
29
29
  main = hspecWith defaultConfig {configFastFail = True} specs
30
30
 
31
31
  specs :: Spec
32
- specs = describe "simple-linked-list" $ do
32
+ specs = do
33
33
 
34
34
  let n1 = new (1 :: Int) nil
35
35
  let n21 = new 2 n1
@@ -1,5 +1,5 @@
1
1
  name: space-age
2
- version: 1.0.0.2
2
+ version: 1.0.0.3
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -12,8 +12,7 @@ main :: IO ()
12
12
  main = hspecWith defaultConfig {configFastFail = True} specs
13
13
 
14
14
  specs :: Spec
15
- specs = describe "space-age" $
16
- describe "ageOn" $ for_ cases test
15
+ specs = describe "ageOn" $ for_ cases test
17
16
  where
18
17
  -- Here we used `fromIntegral`, `fromRational` and `toRational` to
19
18
  -- generalize the test suite, allowing any function that takes a
@@ -1,5 +1,5 @@
1
1
  name: strain
2
- version: 0.1.0.1
2
+ version: 0.1.0.2
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -1,4 +1,4 @@
1
- import Test.Hspec (Spec, describe, it, shouldBe)
1
+ import Test.Hspec (Spec, it, shouldBe)
2
2
  import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)
3
3
 
4
4
  import Data.List (isPrefixOf)
@@ -9,7 +9,7 @@ main :: IO ()
9
9
  main = hspecWith defaultConfig {configFastFail = True} specs
10
10
 
11
11
  specs :: Spec
12
- specs = describe "strain" $ do
12
+ specs = do
13
13
 
14
14
  it "empty keep" $
15
15
  keep (<10) [] `shouldBe` ([] :: [Int])
@@ -1,5 +1,5 @@
1
1
  name: sublist
2
- version: 1.0.0.2
2
+ version: 1.0.0.3
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -10,7 +10,7 @@ main :: IO ()
10
10
  main = hspecWith defaultConfig {configFastFail = True} specs
11
11
 
12
12
  specs :: Spec
13
- specs = describe "sublist" $ do
13
+ specs = do
14
14
  describe "standard tests" $ for_ cases test
15
15
  describe "track specific tests" $ do
16
16
 
@@ -1,5 +1,5 @@
1
1
  name: sum-of-multiples
2
- version: 1.0.0.2
2
+ version: 1.0.0.3
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -11,8 +11,7 @@ main :: IO ()
11
11
  main = hspecWith defaultConfig {configFastFail = True} specs
12
12
 
13
13
  specs :: Spec
14
- specs = describe "sum-of-multiples" $
15
- describe "sumOfMultiples" $ for_ cases test
14
+ specs = describe "sumOfMultiples" $ for_ cases test
16
15
  where
17
16
  test Case{..} = it description assertion
18
17
  where
@@ -1,5 +1,5 @@
1
1
  name: triangle
2
- version: 0.1.0.1
2
+ version: 0.1.0.2
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -17,8 +17,7 @@ main :: IO ()
17
17
  main = hspecWith defaultConfig {configFastFail = True} specs
18
18
 
19
19
  specs :: Spec
20
- specs = describe "triangle" $
21
- describe "triangleType" $ for_ cases test
20
+ specs = describe "triangleType" $ for_ cases test
22
21
  where
23
22
 
24
23
  test (description, (a, b, c), expected) = it description assertion
@@ -1,5 +1,5 @@
1
1
  name: trinary
2
- version: 0.1.0.1
2
+ version: 0.1.0.2
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -1,5 +1,5 @@
1
1
  import Data.Char (intToDigit)
2
- import Test.Hspec (Spec, describe, it)
2
+ import Test.Hspec (Spec, it)
3
3
  import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)
4
4
  import Test.QuickCheck (Positive(Positive), (==>), property)
5
5
 
@@ -11,7 +11,7 @@ main :: IO ()
11
11
  main = hspecWith defaultConfig {configFastFail = True} specs
12
12
 
13
13
  specs :: Spec
14
- specs = describe "trinary" $ do
14
+ specs = do
15
15
 
16
16
  let refShowTri n = Num.showIntAtBase 3 intToDigit n ""
17
17
 
@@ -1,5 +1,5 @@
1
1
  name: word-count
2
- version: 1.0.0.2
2
+ version: 1.0.0.3
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -14,8 +14,7 @@ main :: IO ()
14
14
  main = hspecWith defaultConfig {configFastFail = True} specs
15
15
 
16
16
  specs :: Spec
17
- specs = describe "word-count" $
18
- describe "wordCount" $ for_ cases test
17
+ specs = describe "wordCount" $ for_ cases test
19
18
  where
20
19
  -- Here we used `fromIntegral`, `fromList` and `toList` to generalize
21
20
  -- the tests, accepting any function that receives a string-like argumment
@@ -1,5 +1,5 @@
1
1
  name: wordy
2
- version: 1.0.0.2
2
+ version: 1.0.0.3
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -11,8 +11,7 @@ main :: IO ()
11
11
  main = hspecWith defaultConfig {configFastFail = True} specs
12
12
 
13
13
  specs :: Spec
14
- specs = describe "wordy" $
15
- describe "answer" $ for_ cases test
14
+ specs = describe "answer" $ for_ cases test
16
15
  where
17
16
 
18
17
  test Case{..} = it description assertion
@@ -1,5 +1,5 @@
1
1
  name: zebra-puzzle
2
- version: 0.1.0.1
2
+ version: 0.1.0.2
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -1,4 +1,4 @@
1
- import Test.Hspec (Spec, describe, it, shouldBe)
1
+ import Test.Hspec (Spec, it, shouldBe)
2
2
  import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)
3
3
 
4
4
  import ZebraPuzzle (Resident(..), Solution(..), solve)
@@ -7,7 +7,6 @@ main :: IO ()
7
7
  main = hspecWith defaultConfig {configFastFail = True} specs
8
8
 
9
9
  specs :: Spec
10
- specs = describe "zebra-puzzle" $
11
- it "solve" $ solve `shouldBe` Solution { waterDrinker = Norwegian
12
- , zebraOwner = Japanese }
10
+ specs = it "solve" $ solve `shouldBe` Solution { waterDrinker = Norwegian
11
+ , zebraOwner = Japanese }
13
12
 
@@ -1,5 +1,5 @@
1
1
  name: zipper
2
- version: 0.1.0.1
2
+ version: 0.1.0.2
3
3
 
4
4
  dependencies:
5
5
  - base
@@ -1,5 +1,5 @@
1
1
  import Data.Maybe (fromJust)
2
- import Test.Hspec (Spec, describe, it, shouldBe)
2
+ import Test.Hspec (Spec, it, shouldBe)
3
3
  import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)
4
4
 
5
5
  import Zipper
@@ -19,7 +19,7 @@ main :: IO ()
19
19
  main = hspecWith defaultConfig {configFastFail = True} specs
20
20
 
21
21
  specs :: Spec
22
- specs = describe "zipper" $ do
22
+ specs = do
23
23
 
24
24
  let leaf v = node v Nothing Nothing
25
25
  node v l r = Just (BT v l r :: BinTree Int)
@@ -0,0 +1,10 @@
1
+ <!-- Your content goes here: -->
2
+
3
+
4
+
5
+ <!-- DO NOT EDIT BELOW THIS LINE! -->
6
+ ---
7
+
8
+ Reviewer Resources:
9
+
10
+ [Track Policies](https://github.com/exercism/xjava/blob/master/POLICIES.md#event-checklist)
@@ -0,0 +1,67 @@
1
+ # Track Policies
2
+
3
+ This document:
4
+
5
+ - describes all current track-wide policies; and
6
+ - lists all policies that should be reviewed in response to any given track event.
7
+
8
+ Maintainers should refer to this document each time they review a pull request.
9
+
10
+ Our policies are not set-in-stone. They represent directions chosen at a point in time with the information/context available at that time. We actively encourage contributors to review and critique them. If you have read through the references that informed an existing policy and still feel it should be improved or removed, please comment and describe:
11
+
12
+ 1. your alternative perspective;
13
+ 2. your proposed changes; and
14
+ 3. how your proposal balances your own perspective with those already raised during prior discussions.
15
+
16
+ ## Event Checklist
17
+
18
+ | Track Event | Policies to review |
19
+ |:------------|:-----------------|
20
+ | Exercise added | [Prefer instance methods](#prefer-instance-methods); [Starter implementations](#starter-implementations); [Ignore noninitial tests](#ignore-noninitial-tests) |
21
+ | Exercise updated | [Ignore noninitial tests](#ignore-noninitial-tests); [Multiple file submissions](#multiple-file-submissions) |
22
+ | Track order changed | [Starter implementations](#starter-implementations); [Multiple file submissions](#multiple-file-submissions) |
23
+ | New issue observed in track | [Good first patches](#good-first-patches) |
24
+ | "Good first patch" issue completed | [Good first patches](#good-first-patches) |
25
+ | Installing Java instructions updated | [Simple onboarding](#simple-onboarding) |
26
+
27
+ ## Policy Descriptions
28
+
29
+ ### Prefer instance methods
30
+
31
+ > Most (all?) exercises should be implemented in the form of instance methods since they contain "domain logic" and we (Exercism) want to encourage exemplary software.
32
+
33
+ References: [[1](https://github.com/exercism/xjava/issues/177#issuecomment-261291741)]
34
+
35
+ ### Starter implementations
36
+
37
+ > - Exercises 1-10: provide stubs for all required constructors and methods. Stubs should include the following body:
38
+ `throw new UnsupportedOperationException("Delete this statement and write your own implementation.");`
39
+ > - Exercises 11-20: provide stubs for all constructors and methods required by the first test; comment-out the bodies of any tests that require non-stubbed constructors or methods. Stubs should include the following body:
40
+ `throw new UnsupportedOperationException("Delete this statement and provide your own implementation.");`
41
+ > - Exercises 21+: provide no stubs, but mention any "interesting" interface aspects in the HINT.md file (which gets merged into the README.md for the exercise).
42
+
43
+ References: [[1](https://github.com/exercism/xjava/issues/178)]
44
+
45
+ ### Ignore noninitial tests
46
+
47
+ > All but the first test in an exercise test suite should be annotated `@Ignore("Remove to run test")` (single test) or `@Ignore("Remove to run tests")` (parametrized test).
48
+
49
+ References: [[1](https://github.com/exercism/xjava/issues/101#issuecomment-249349204)]
50
+
51
+ ### Multiple file submissions
52
+
53
+ > The first exercise in the track whose test suite mandates multiple solution files should be accompanied by a HINT.md file reminding the practitioner that the CLI supports multiple file submissions.
54
+
55
+ References: [[1](https://github.com/exercism/xjava/issues/365#issuecomment-292533120)]
56
+
57
+ ### Good first patches
58
+
59
+ > Aim to keep 10-20 small and straightforward issues open at eny given time. Identify any such issues by applying the "Good first patch" label. You can view the current list of these issues [here](https://github.com/exercism/xjava/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+patch%22).
60
+
61
+ References: [[1](https://github.com/exercism/xjava/issues/220#issue-196447088)]
62
+
63
+ ### Simple onboarding
64
+
65
+ > The Installing Java instructions should seek to minimize the number of steps and the number of concepts a new-to-the-track practitioner needs to learn to get to coding.
66
+
67
+ References: [[1](https://github.com/exercism/xjava/issues/395#issue-215734887)]