trackler 2.2.1.110 → 2.2.1.111

Sign up to get free protection for your applications and to get access to all the features.
Files changed (939) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/house/canonical-data.json +28 -200
  4. data/problem-specifications/exercises/react/canonical-data.json +49 -2
  5. data/tracks/c/config.json +49 -0
  6. data/tracks/c/exercises/crypto-square/README.md +69 -0
  7. data/tracks/c/exercises/crypto-square/makefile +25 -0
  8. data/tracks/c/exercises/crypto-square/src/example.c +87 -0
  9. data/tracks/c/exercises/crypto-square/src/example.h +6 -0
  10. data/tracks/c/exercises/crypto-square/test/test_crypto_square.c +99 -0
  11. data/tracks/c/exercises/crypto-square/test/vendor/unity.c +1300 -0
  12. data/tracks/c/exercises/crypto-square/test/vendor/unity.h +274 -0
  13. data/tracks/c/exercises/crypto-square/test/vendor/unity_internals.h +701 -0
  14. data/tracks/c/exercises/pig-latin/README.md +17 -0
  15. data/tracks/c/exercises/pig-latin/makefile +25 -0
  16. data/tracks/c/exercises/pig-latin/src/example.c +128 -0
  17. data/tracks/c/exercises/pig-latin/src/example.h +6 -0
  18. data/tracks/c/exercises/pig-latin/test/test_pig_latin.c +239 -0
  19. data/tracks/c/exercises/pig-latin/test/vendor/unity.c +1300 -0
  20. data/tracks/c/exercises/pig-latin/test/vendor/unity.h +274 -0
  21. data/tracks/c/exercises/pig-latin/test/vendor/unity_internals.h +701 -0
  22. data/tracks/c/exercises/say/README.md +62 -0
  23. data/tracks/c/exercises/say/makefile +27 -0
  24. data/tracks/c/exercises/say/src/example.c +144 -0
  25. data/tracks/c/exercises/say/src/example.h +7 -0
  26. data/tracks/c/exercises/say/test/test_say.c +185 -0
  27. data/tracks/c/exercises/say/test/vendor/unity.c +1300 -0
  28. data/tracks/c/exercises/say/test/vendor/unity.h +274 -0
  29. data/tracks/c/exercises/say/test/vendor/unity_internals.h +701 -0
  30. data/tracks/c/exercises/secret-handshake/README.md +28 -0
  31. data/tracks/c/exercises/secret-handshake/makefile +25 -0
  32. data/tracks/c/exercises/secret-handshake/src/example.c +60 -0
  33. data/tracks/c/exercises/secret-handshake/src/example.h +7 -0
  34. data/tracks/c/exercises/secret-handshake/test/test_secret_handshake.c +133 -0
  35. data/tracks/c/exercises/secret-handshake/test/vendor/unity.c +1300 -0
  36. data/tracks/c/exercises/secret-handshake/test/vendor/unity.h +274 -0
  37. data/tracks/c/exercises/secret-handshake/test/vendor/unity_internals.h +701 -0
  38. data/tracks/coffeescript/config/exercise_readme.go.tmpl +7 -4
  39. data/tracks/coffeescript/exercises/accumulate/README.md +0 -3
  40. data/tracks/coffeescript/exercises/atbash-cipher/README.md +2 -1
  41. data/tracks/coffeescript/exercises/beer-song/README.md +2 -2
  42. data/tracks/coffeescript/exercises/binary/README.md +2 -0
  43. data/tracks/coffeescript/exercises/linked-list/README.md +10 -10
  44. data/tracks/coffeescript/exercises/luhn/README.md +7 -7
  45. data/tracks/coffeescript/exercises/nucleotide-count/README.md +8 -22
  46. data/tracks/coffeescript/exercises/palindrome-products/README.md +15 -16
  47. data/tracks/coffeescript/exercises/pascals-triangle/README.md +2 -2
  48. data/tracks/coffeescript/exercises/queen-attack/README.md +1 -1
  49. data/tracks/coffeescript/exercises/triangle/README.md +9 -6
  50. data/tracks/coffeescript/exercises/trinary/README.md +1 -1
  51. data/tracks/coffeescript/exercises/word-count/README.md +1 -2
  52. data/tracks/coffeescript/exercises/wordy/README.md +0 -5
  53. data/tracks/coq/config/exercise_readme.go.tmpl +23 -4
  54. data/tracks/coq/exercises/rna-transcription/README.md +2 -2
  55. data/tracks/cpp/config/exercise_readme.go.tmpl +31 -4
  56. data/tracks/cpp/exercises/allergies/README.md +0 -1
  57. data/tracks/cpp/exercises/atbash-cipher/README.md +2 -1
  58. data/tracks/cpp/exercises/beer-song/README.md +2 -2
  59. data/tracks/cpp/exercises/binary/README.md +2 -0
  60. data/tracks/cpp/exercises/crypto-square/README.md +10 -8
  61. data/tracks/cpp/exercises/etl/README.md +3 -1
  62. data/tracks/cpp/exercises/food-chain/README.md +1 -1
  63. data/tracks/cpp/exercises/grade-school/README.md +0 -1
  64. data/tracks/cpp/exercises/grains/README.md +0 -1
  65. data/tracks/cpp/exercises/leap/README.md +1 -1
  66. data/tracks/cpp/exercises/meetup/README.md +16 -13
  67. data/tracks/cpp/exercises/nucleotide-count/README.md +2 -4
  68. data/tracks/cpp/exercises/pangram/README.md +1 -1
  69. data/tracks/cpp/exercises/phone-number/README.md +4 -3
  70. data/tracks/cpp/exercises/queen-attack/README.md +1 -1
  71. data/tracks/cpp/exercises/rna-transcription/README.md +2 -2
  72. data/tracks/cpp/exercises/roman-numerals/README.md +1 -1
  73. data/tracks/cpp/exercises/scrabble-score/README.md +3 -1
  74. data/tracks/cpp/exercises/space-age/README.md +1 -2
  75. data/tracks/cpp/exercises/sum-of-multiples/README.md +3 -6
  76. data/tracks/cpp/exercises/triangle/README.md +9 -6
  77. data/tracks/cpp/exercises/trinary/README.md +1 -1
  78. data/tracks/cpp/exercises/word-count/README.md +1 -2
  79. data/tracks/d/config/exercise_readme.go.tmpl +30 -4
  80. data/tracks/d/exercises/circular-buffer/README.md +13 -6
  81. data/tracks/d/exercises/crypto-square/README.md +10 -8
  82. data/tracks/d/exercises/etl/README.md +3 -1
  83. data/tracks/d/exercises/leap/README.md +1 -1
  84. data/tracks/d/exercises/nucleotide-count/README.md +8 -22
  85. data/tracks/d/exercises/pangram/README.md +1 -1
  86. data/tracks/d/exercises/react/README.md +0 -1
  87. data/tracks/d/exercises/rna-transcription/README.md +2 -2
  88. data/tracks/d/exercises/roman-numerals/README.md +1 -1
  89. data/tracks/d/exercises/triangle/README.md +9 -6
  90. data/tracks/ecmascript/config/exercise_readme.go.tmpl +29 -4
  91. data/tracks/ecmascript/exercises/accumulate/README.md +1 -4
  92. data/tracks/ecmascript/exercises/acronym/README.md +1 -2
  93. data/tracks/ecmascript/exercises/all-your-base/README.md +2 -3
  94. data/tracks/ecmascript/exercises/allergies/README.md +1 -2
  95. data/tracks/ecmascript/exercises/alphametics/README.md +3 -4
  96. data/tracks/ecmascript/exercises/anagram/README.md +1 -1
  97. data/tracks/ecmascript/exercises/atbash-cipher/README.md +3 -2
  98. data/tracks/ecmascript/exercises/beer-song/README.md +3 -3
  99. data/tracks/ecmascript/exercises/binary-search-tree/README.md +1 -1
  100. data/tracks/ecmascript/exercises/binary-search/README.md +1 -1
  101. data/tracks/ecmascript/exercises/binary/README.md +3 -1
  102. data/tracks/ecmascript/exercises/bowling/README.md +32 -15
  103. data/tracks/ecmascript/exercises/bracket-push/README.md +1 -1
  104. data/tracks/ecmascript/exercises/change/README.md +19 -10
  105. data/tracks/ecmascript/exercises/circular-buffer/README.md +14 -7
  106. data/tracks/ecmascript/exercises/clock/README.md +1 -1
  107. data/tracks/ecmascript/exercises/collatz-conjecture/README.md +5 -1
  108. data/tracks/ecmascript/exercises/complex-numbers/README.md +2 -2
  109. data/tracks/ecmascript/exercises/connect/README.md +2 -3
  110. data/tracks/ecmascript/exercises/crypto-square/README.md +11 -9
  111. data/tracks/ecmascript/exercises/custom-set/README.md +1 -2
  112. data/tracks/ecmascript/exercises/diamond/README.md +7 -7
  113. data/tracks/ecmascript/exercises/difference-of-squares/README.md +1 -1
  114. data/tracks/ecmascript/exercises/diffie-hellman/README.md +1 -1
  115. data/tracks/ecmascript/exercises/etl/README.md +4 -2
  116. data/tracks/ecmascript/exercises/flatten-array/README.md +2 -3
  117. data/tracks/ecmascript/exercises/food-chain/README.md +2 -2
  118. data/tracks/ecmascript/exercises/gigasecond/README.md +1 -1
  119. data/tracks/ecmascript/exercises/grade-school/README.md +1 -2
  120. data/tracks/ecmascript/exercises/grains/README.md +1 -2
  121. data/tracks/ecmascript/exercises/hamming/README.md +1 -1
  122. data/tracks/ecmascript/exercises/hello-world/README.md +1 -1
  123. data/tracks/ecmascript/exercises/hexadecimal/README.md +1 -1
  124. data/tracks/ecmascript/exercises/house/README.md +1 -5
  125. data/tracks/ecmascript/exercises/isbn-verifier/README.md +32 -17
  126. data/tracks/ecmascript/exercises/isogram/README.md +3 -2
  127. data/tracks/ecmascript/exercises/kindergarten-garden/README.md +14 -14
  128. data/tracks/ecmascript/exercises/largest-series-product/README.md +1 -1
  129. data/tracks/ecmascript/exercises/leap/README.md +2 -2
  130. data/tracks/ecmascript/exercises/linked-list/README.md +11 -11
  131. data/tracks/ecmascript/exercises/list-ops/README.md +1 -2
  132. data/tracks/ecmascript/exercises/luhn/README.md +8 -8
  133. data/tracks/ecmascript/exercises/matrix/README.md +7 -5
  134. data/tracks/ecmascript/exercises/meetup/README.md +17 -14
  135. data/tracks/ecmascript/exercises/minesweeper/README.md +1 -2
  136. data/tracks/ecmascript/exercises/nth-prime/README.md +1 -1
  137. data/tracks/ecmascript/exercises/ocr-numbers/README.md +7 -7
  138. data/tracks/ecmascript/exercises/octal/README.md +7 -3
  139. data/tracks/ecmascript/exercises/palindrome-products/README.md +16 -17
  140. data/tracks/ecmascript/exercises/pangram/README.md +2 -2
  141. data/tracks/ecmascript/exercises/pascals-triangle/README.md +3 -3
  142. data/tracks/ecmascript/exercises/perfect-numbers/README.md +3 -3
  143. data/tracks/ecmascript/exercises/phone-number/README.md +5 -4
  144. data/tracks/ecmascript/exercises/pig-latin/README.md +1 -1
  145. data/tracks/ecmascript/exercises/prime-factors/README.md +1 -1
  146. data/tracks/ecmascript/exercises/protein-translation/README.md +8 -8
  147. data/tracks/ecmascript/exercises/proverb/README.md +17 -27
  148. data/tracks/ecmascript/exercises/pythagorean-triplet/README.md +4 -4
  149. data/tracks/ecmascript/exercises/queen-attack/README.md +2 -2
  150. data/tracks/ecmascript/exercises/raindrops/README.md +1 -1
  151. data/tracks/ecmascript/exercises/react/README.md +8 -1
  152. data/tracks/ecmascript/exercises/rectangles/README.md +11 -10
  153. data/tracks/ecmascript/exercises/rna-transcription/README.md +3 -3
  154. data/tracks/ecmascript/exercises/robot-name/README.md +1 -1
  155. data/tracks/ecmascript/exercises/robot-simulator/README.md +1 -1
  156. data/tracks/ecmascript/exercises/roman-numerals/README.md +2 -2
  157. data/tracks/ecmascript/exercises/rotational-cipher/README.md +3 -2
  158. data/tracks/ecmascript/exercises/run-length-encoding/README.md +9 -8
  159. data/tracks/ecmascript/exercises/saddle-points/README.md +3 -3
  160. data/tracks/ecmascript/exercises/say/README.md +1 -1
  161. data/tracks/ecmascript/exercises/scrabble-score/README.md +4 -2
  162. data/tracks/ecmascript/exercises/secret-handshake/README.md +3 -3
  163. data/tracks/ecmascript/exercises/series/README.md +1 -1
  164. data/tracks/ecmascript/exercises/sieve/README.md +1 -1
  165. data/tracks/ecmascript/exercises/simple-cipher/README.md +6 -8
  166. data/tracks/ecmascript/exercises/simple-linked-list/README.md +2 -1
  167. data/tracks/ecmascript/exercises/space-age/README.md +2 -2
  168. data/tracks/ecmascript/exercises/spiral-matrix/README.md +4 -3
  169. data/tracks/ecmascript/exercises/strain/README.md +1 -1
  170. data/tracks/ecmascript/exercises/sublist/README.md +1 -1
  171. data/tracks/ecmascript/exercises/sum-of-multiples/README.md +4 -7
  172. data/tracks/ecmascript/exercises/transpose/README.md +3 -2
  173. data/tracks/ecmascript/exercises/triangle/README.md +10 -7
  174. data/tracks/ecmascript/exercises/trinary/README.md +2 -2
  175. data/tracks/ecmascript/exercises/twelve-days/README.md +3 -4
  176. data/tracks/ecmascript/exercises/two-bucket/README.md +11 -11
  177. data/tracks/ecmascript/exercises/two-fer/README.md +8 -6
  178. data/tracks/ecmascript/exercises/word-count/README.md +2 -3
  179. data/tracks/ecmascript/exercises/word-search/README.md +2 -1
  180. data/tracks/ecmascript/exercises/wordy/README.md +1 -6
  181. data/tracks/elixir/exercises/bob/bob_test.exs +1 -1
  182. data/tracks/elixir/exercises/bob/example.exs +13 -9
  183. data/tracks/elm/config.json +28 -0
  184. data/tracks/elm/config/exercise_readme.go.tmpl +3 -3
  185. data/tracks/elm/docs/INSTALLATION.md +6 -2
  186. data/tracks/elm/exercises/accumulate/README.md +3 -3
  187. data/tracks/elm/exercises/acronym/Acronym.elm +1 -0
  188. data/tracks/elm/exercises/acronym/Acronym.example.elm +22 -0
  189. data/tracks/elm/exercises/acronym/README.md +44 -0
  190. data/tracks/elm/exercises/acronym/elm-package.json +15 -0
  191. data/tracks/elm/exercises/acronym/tests/Tests.elm +35 -0
  192. data/tracks/elm/exercises/acronym/tests/elm-package.json +16 -0
  193. data/tracks/elm/exercises/all-your-base/README.md +3 -3
  194. data/tracks/elm/exercises/allergies/README.md +3 -3
  195. data/tracks/elm/exercises/anagram/README.md +3 -3
  196. data/tracks/elm/exercises/atbash-cipher/README.md +3 -3
  197. data/tracks/elm/exercises/binary-search/README.md +3 -3
  198. data/tracks/elm/exercises/bob/README.md +3 -5
  199. data/tracks/elm/exercises/collatz-conjecture/README.md +3 -3
  200. data/tracks/elm/exercises/difference-of-squares/README.md +3 -3
  201. data/tracks/elm/exercises/etl/README.md +3 -3
  202. data/tracks/elm/exercises/gigasecond/README.md +3 -3
  203. data/tracks/elm/exercises/grade-school/README.md +3 -3
  204. data/tracks/elm/exercises/grains/README.md +3 -3
  205. data/tracks/elm/exercises/hamming/README.md +3 -3
  206. data/tracks/elm/exercises/hello-world/README.md +3 -3
  207. data/tracks/elm/exercises/isogram/README.md +3 -3
  208. data/tracks/elm/exercises/largest-series-product/README.md +3 -3
  209. data/tracks/elm/exercises/leap/README.md +3 -3
  210. data/tracks/elm/exercises/list-ops/README.md +3 -3
  211. data/tracks/elm/exercises/luhn/Luhn.elm +1 -0
  212. data/tracks/elm/exercises/luhn/Luhn.example.elm +51 -0
  213. data/tracks/elm/exercises/luhn/README.md +101 -0
  214. data/tracks/elm/exercises/luhn/elm-package.json +15 -0
  215. data/tracks/elm/exercises/luhn/tests/Tests.elm +62 -0
  216. data/tracks/elm/exercises/luhn/tests/elm-package.json +16 -0
  217. data/tracks/elm/exercises/nucleotide-count/README.md +3 -3
  218. data/tracks/elm/exercises/pangram/.meta/description.md +7 -0
  219. data/tracks/elm/exercises/pangram/README.md +4 -4
  220. data/tracks/elm/exercises/pascals-triangle/README.md +3 -3
  221. data/tracks/elm/exercises/phone-number/README.md +3 -3
  222. data/tracks/elm/exercises/raindrops/README.md +3 -3
  223. data/tracks/elm/exercises/rna-transcription/README.md +4 -4
  224. data/tracks/elm/exercises/robot-simulator/README.md +3 -3
  225. data/tracks/elm/exercises/roman-numerals/README.md +3 -3
  226. data/tracks/elm/exercises/run-length-encoding/README.md +3 -3
  227. data/tracks/elm/exercises/say/README.md +3 -3
  228. data/tracks/elm/exercises/scrabble-score/README.md +3 -3
  229. data/tracks/elm/exercises/series/README.md +3 -3
  230. data/tracks/elm/exercises/space-age/README.md +3 -3
  231. data/tracks/elm/exercises/strain/README.md +3 -3
  232. data/tracks/elm/exercises/sublist/README.md +3 -3
  233. data/tracks/elm/exercises/sum-of-multiples/README.md +3 -3
  234. data/tracks/elm/exercises/triangle/README.md +3 -3
  235. data/tracks/elm/exercises/twelve-days/README.md +65 -0
  236. data/tracks/elm/exercises/twelve-days/TwelveDays.elm +1 -0
  237. data/tracks/elm/exercises/twelve-days/TwelveDays.example.elm +148 -0
  238. data/tracks/elm/exercises/twelve-days/elm-package.json +14 -0
  239. data/tracks/elm/exercises/twelve-days/tests/Tests.elm +130 -0
  240. data/tracks/elm/exercises/twelve-days/tests/elm-package.json +16 -0
  241. data/tracks/elm/exercises/word-count/README.md +3 -3
  242. data/tracks/elm/package-lock.json +2329 -0
  243. data/tracks/elm/package.json +6 -1
  244. data/tracks/erlang/config/exercise_readme.go.tmpl +42 -4
  245. data/tracks/erlang/exercises/accumulate/README.md +0 -3
  246. data/tracks/erlang/exercises/all-your-base/README.md +1 -2
  247. data/tracks/erlang/exercises/allergies/README.md +0 -1
  248. data/tracks/erlang/exercises/atbash-cipher/README.md +2 -1
  249. data/tracks/erlang/exercises/bank-account/README.md +0 -1
  250. data/tracks/erlang/exercises/beer-song/README.md +2 -2
  251. data/tracks/erlang/exercises/circular-buffer/README.md +13 -6
  252. data/tracks/erlang/exercises/collatz-conjecture/README.md +1 -1
  253. data/tracks/erlang/exercises/custom-set/README.md +0 -1
  254. data/tracks/erlang/exercises/etl/README.md +3 -1
  255. data/tracks/erlang/exercises/grade-school/README.md +0 -1
  256. data/tracks/erlang/exercises/grains/README.md +0 -1
  257. data/tracks/erlang/exercises/isogram/README.md +5 -7
  258. data/tracks/erlang/exercises/leap/README.md +1 -1
  259. data/tracks/erlang/exercises/luhn/README.md +7 -7
  260. data/tracks/erlang/exercises/meetup/README.md +16 -13
  261. data/tracks/erlang/exercises/nucleotide-count/README.md +8 -22
  262. data/tracks/erlang/exercises/pangram/README.md +7 -9
  263. data/tracks/erlang/exercises/parallel-letter-frequency/README.md +0 -1
  264. data/tracks/erlang/exercises/phone-number/README.md +4 -3
  265. data/tracks/erlang/exercises/raindrops/README.md +1 -1
  266. data/tracks/erlang/exercises/rna-transcription/README.md +2 -2
  267. data/tracks/erlang/exercises/roman-numerals/README.md +1 -1
  268. data/tracks/erlang/exercises/rotational-cipher/README.md +2 -1
  269. data/tracks/erlang/exercises/scrabble-score/README.md +3 -1
  270. data/tracks/erlang/exercises/sieve/README.md +26 -37
  271. data/tracks/erlang/exercises/space-age/README.md +1 -1
  272. data/tracks/erlang/exercises/spiral-matrix/README.md +2 -2
  273. data/tracks/erlang/exercises/sum-of-multiples/README.md +3 -6
  274. data/tracks/erlang/exercises/triangle/README.md +9 -6
  275. data/tracks/erlang/exercises/two-fer/README.md +48 -5
  276. data/tracks/erlang/exercises/word-count/README.md +1 -2
  277. data/tracks/erlang/exercises/zipper/README.md +1 -2
  278. data/tracks/go/config.json +11 -0
  279. data/tracks/go/exercises/bowling/cases_test.go +17 -2
  280. data/tracks/go/exercises/grep/.meta/gen.go +9 -7
  281. data/tracks/go/exercises/grep/cases_test.go +2 -2
  282. data/tracks/go/exercises/scale-generator/.meta/gen.go +59 -0
  283. data/tracks/go/exercises/scale-generator/README.md +76 -0
  284. data/tracks/go/exercises/scale-generator/cases_test.go +117 -0
  285. data/tracks/go/exercises/scale-generator/example.go +62 -0
  286. data/tracks/go/exercises/scale-generator/scale_generator_test.go +24 -0
  287. data/tracks/haskell/.travis.yml +16 -0
  288. data/tracks/haskell/config.json +9 -0
  289. data/tracks/haskell/config/exercise_readme.go.tmpl +53 -4
  290. data/tracks/haskell/exercises/all-your-base/README.md +0 -1
  291. data/tracks/haskell/exercises/alphametics/README.md +0 -1
  292. data/tracks/haskell/exercises/alphametics/examples/success-standard/src/Alphametics.hs +2 -2
  293. data/tracks/haskell/exercises/bank-account/README.md +0 -1
  294. data/tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs +1 -1
  295. data/tracks/haskell/exercises/connect/README.md +0 -1
  296. data/tracks/haskell/exercises/custom-set/README.md +0 -1
  297. data/tracks/haskell/exercises/dominoes/README.md +0 -1
  298. data/tracks/haskell/exercises/forth/README.md +0 -1
  299. data/tracks/haskell/exercises/go-counting/README.md +0 -1
  300. data/tracks/haskell/exercises/lens-person/README.md +0 -1
  301. data/tracks/haskell/exercises/list-ops/README.md +0 -1
  302. data/tracks/haskell/exercises/minesweeper/README.md +0 -1
  303. data/tracks/haskell/exercises/parallel-letter-frequency/README.md +0 -1
  304. data/tracks/haskell/exercises/sgf-parsing/README.md +0 -1
  305. data/tracks/haskell/exercises/sgf-parsing/examples/success-standard/src/Sgf.hs +2 -3
  306. data/tracks/haskell/exercises/sublist/README.md +0 -1
  307. data/tracks/haskell/exercises/transpose/README.md +119 -0
  308. data/tracks/haskell/exercises/transpose/examples/success-standard/package.yaml +16 -0
  309. data/tracks/haskell/exercises/transpose/examples/success-standard/src/Transpose.hs +16 -0
  310. data/tracks/haskell/exercises/transpose/package.yaml +20 -0
  311. data/tracks/haskell/exercises/transpose/src/Transpose.hs +4 -0
  312. data/tracks/haskell/exercises/transpose/stack.yaml +1 -0
  313. data/tracks/haskell/exercises/transpose/test/Tests.hs +181 -0
  314. data/tracks/haskell/exercises/zipper/README.md +0 -1
  315. data/tracks/java/config.json +38 -0
  316. data/tracks/java/exercises/atbash-cipher/.meta/version +1 -1
  317. data/tracks/java/exercises/collatz-conjecture/.meta/version +1 -1
  318. data/tracks/java/exercises/diffie-hellman/.meta/hints.md +3 -0
  319. data/tracks/java/exercises/diffie-hellman/.meta/src/reference/java/DiffieHellman.java +24 -0
  320. data/tracks/java/exercises/diffie-hellman/README.md +63 -0
  321. data/tracks/java/exercises/diffie-hellman/build.gradle +19 -0
  322. data/tracks/java/exercises/diffie-hellman/src/main/java/.keep +0 -0
  323. data/tracks/java/exercises/diffie-hellman/src/test/java/DiffieHellmanTest.java +98 -0
  324. data/tracks/java/exercises/error-handling/.meta/hints.md +35 -0
  325. data/tracks/java/exercises/error-handling/.meta/src/reference/java/CustomCheckedException.java +11 -0
  326. data/tracks/java/exercises/error-handling/.meta/src/reference/java/CustomUncheckedException.java +11 -0
  327. data/tracks/java/exercises/error-handling/.meta/src/reference/java/ErrorHandling.java +63 -0
  328. data/tracks/java/exercises/error-handling/README.md +24 -0
  329. data/tracks/java/exercises/error-handling/build.gradle +18 -0
  330. data/tracks/java/exercises/error-handling/src/main/java/CustomCheckedException.java +11 -0
  331. data/tracks/java/exercises/error-handling/src/main/java/CustomUncheckedException.java +11 -0
  332. data/tracks/java/exercises/error-handling/src/main/java/ErrorHandling.java +49 -0
  333. data/tracks/java/exercises/error-handling/src/test/java/ErrorHandlingTest.java +116 -0
  334. data/tracks/java/exercises/flatten-array/.meta/version +1 -1
  335. data/tracks/java/exercises/nth-prime/.meta/version +1 -1
  336. data/tracks/java/exercises/pig-latin/README.md +4 -4
  337. data/tracks/java/exercises/protein-translation/.meta/version +1 -1
  338. data/tracks/java/exercises/saddle-points/.meta/version +1 -1
  339. data/tracks/java/exercises/settings.gradle +3 -0
  340. data/tracks/java/exercises/variable-length-quantity/.meta/src/reference/java/VariableLengthQuantity.java +53 -0
  341. data/tracks/java/exercises/variable-length-quantity/.meta/version +1 -0
  342. data/tracks/java/exercises/variable-length-quantity/README.md +50 -0
  343. data/tracks/java/exercises/variable-length-quantity/build.gradle +18 -0
  344. data/tracks/java/exercises/variable-length-quantity/src/main/java/VariableLengthQuantity.java +12 -0
  345. data/tracks/java/exercises/variable-length-quantity/src/test/java/VariableLengthQuantityTest.java +265 -0
  346. data/tracks/java/exercises/word-count/.meta/version +1 -1
  347. data/tracks/javascript/.eslintignore +0 -6
  348. data/tracks/javascript/config.json +47 -0
  349. data/tracks/javascript/exercises/bowling/bowling.spec.js +105 -41
  350. data/tracks/javascript/exercises/bowling/example.js +112 -59
  351. data/tracks/javascript/exercises/custom-set/example-gen.js +4 -4
  352. data/tracks/javascript/exercises/flatten-array/example.js +6 -5
  353. data/tracks/javascript/exercises/flatten-array/flatten-array.spec.js +15 -15
  354. data/tracks/javascript/exercises/grade-school/example.js +6 -6
  355. data/tracks/javascript/exercises/kindergarten-garden/example.js +9 -9
  356. data/tracks/javascript/exercises/nth-prime/example.js +6 -6
  357. data/tracks/javascript/exercises/perfect-numbers/example.js +6 -2
  358. data/tracks/javascript/exercises/queen-attack/example.js +5 -5
  359. data/tracks/javascript/exercises/queen-attack/queen-attack.spec.js +11 -9
  360. data/tracks/javascript/exercises/rational-numbers/README.md +62 -0
  361. data/tracks/javascript/exercises/rational-numbers/example.js +69 -0
  362. data/tracks/javascript/exercises/rational-numbers/rational-numbers.spec.js +197 -0
  363. data/tracks/javascript/exercises/rectangles/README.md +91 -0
  364. data/tracks/javascript/exercises/rectangles/example.js +66 -0
  365. data/tracks/javascript/exercises/rectangles/rectangles.spec.js +108 -0
  366. data/tracks/javascript/exercises/rotational-cipher/README.md +64 -0
  367. data/tracks/javascript/exercises/rotational-cipher/example.js +24 -0
  368. data/tracks/javascript/exercises/rotational-cipher/rotational-cipher.spec.js +55 -0
  369. data/tracks/javascript/exercises/secret-handshake/example.js +1 -2
  370. data/tracks/javascript/exercises/secret-handshake/secret-handshake.spec.js +2 -1
  371. data/tracks/javascript/exercises/simple-linked-list/example.js +10 -6
  372. data/tracks/javascript/exercises/simple-linked-list/simple-linked-list.spec.js +6 -3
  373. data/tracks/javascript/exercises/variable-length-quantity/README.md +62 -0
  374. data/tracks/javascript/exercises/variable-length-quantity/example.js +51 -0
  375. data/tracks/javascript/exercises/variable-length-quantity/variable-length-quantity.spec.js +115 -0
  376. data/tracks/javascript/package.json +4 -2
  377. data/tracks/lfe/config/exercise_readme.go.tmpl +15 -4
  378. data/tracks/lfe/exercises/accumulate/README.md +0 -3
  379. data/tracks/lfe/exercises/allergies/README.md +0 -1
  380. data/tracks/lfe/exercises/atbash-cipher/README.md +2 -1
  381. data/tracks/lfe/exercises/bank-account/README.md +0 -1
  382. data/tracks/lfe/exercises/beer-song/README.md +2 -2
  383. data/tracks/lfe/exercises/binary/README.md +2 -0
  384. data/tracks/lfe/exercises/circular-buffer/README.md +13 -6
  385. data/tracks/lfe/exercises/etl/README.md +3 -1
  386. data/tracks/lfe/exercises/grade-school/README.md +0 -1
  387. data/tracks/lfe/exercises/grains/README.md +0 -1
  388. data/tracks/lfe/exercises/leap/README.md +1 -1
  389. data/tracks/lfe/exercises/luhn/README.md +7 -7
  390. data/tracks/lfe/exercises/meetup/README.md +16 -13
  391. data/tracks/lfe/exercises/nucleotide-count/README.md +8 -22
  392. data/tracks/lfe/exercises/parallel-letter-frequency/README.md +0 -1
  393. data/tracks/lfe/exercises/phone-number/README.md +4 -3
  394. data/tracks/lfe/exercises/rna-transcription/README.md +2 -2
  395. data/tracks/lfe/exercises/space-age/README.md +1 -1
  396. data/tracks/lfe/exercises/sum-of-multiples/README.md +3 -6
  397. data/tracks/lfe/exercises/trinary/README.md +1 -1
  398. data/tracks/lfe/exercises/word-count/README.md +1 -2
  399. data/tracks/objective-c/config.json +11 -0
  400. data/tracks/objective-c/exercises/prime-factors/PrimeFactorsExample.h +9 -0
  401. data/tracks/objective-c/exercises/prime-factors/PrimeFactorsExample.m +24 -0
  402. data/tracks/objective-c/exercises/prime-factors/PrimeFactorsTest.m +67 -0
  403. data/tracks/objective-c/exercises/prime-factors/README.md +58 -0
  404. data/tracks/objective-c/xcodeProject/ObjectiveC.xcodeproj/project.pbxproj +18 -0
  405. data/tracks/ocaml/README.md +11 -2
  406. data/tracks/ocaml/docs/INSTALLATION.md +4 -4
  407. data/tracks/ocaml/docs/LEARNING.md +4 -2
  408. data/tracks/ocaml/docs/TESTS.md +7 -14
  409. data/tracks/ocaml/exercises/acronym/Makefile +4 -6
  410. data/tracks/ocaml/exercises/acronym/example.ml +2 -2
  411. data/tracks/ocaml/exercises/acronym/jbuild +11 -0
  412. data/tracks/ocaml/exercises/acronym/test.ml +1 -2
  413. data/tracks/ocaml/exercises/all-your-base/Makefile +4 -6
  414. data/tracks/ocaml/exercises/all-your-base/example.ml +1 -1
  415. data/tracks/ocaml/exercises/all-your-base/jbuild +11 -0
  416. data/tracks/ocaml/exercises/all-your-base/test.ml +1 -2
  417. data/tracks/ocaml/exercises/anagram/Makefile +4 -6
  418. data/tracks/ocaml/exercises/anagram/example.ml +2 -2
  419. data/tracks/ocaml/exercises/anagram/jbuild +11 -0
  420. data/tracks/ocaml/exercises/anagram/test.ml +2 -2
  421. data/tracks/ocaml/exercises/atbash-cipher/Makefile +4 -6
  422. data/tracks/ocaml/exercises/atbash-cipher/example.ml +1 -1
  423. data/tracks/ocaml/exercises/atbash-cipher/jbuild +11 -0
  424. data/tracks/ocaml/exercises/atbash-cipher/test.ml +1 -2
  425. data/tracks/ocaml/exercises/beer-song/Makefile +4 -6
  426. data/tracks/ocaml/exercises/beer-song/example.ml +3 -3
  427. data/tracks/ocaml/exercises/beer-song/jbuild +11 -0
  428. data/tracks/ocaml/exercises/beer-song/test.ml +3 -3
  429. data/tracks/ocaml/exercises/binary-search/Makefile +4 -6
  430. data/tracks/ocaml/exercises/binary-search/example.ml +1 -1
  431. data/tracks/ocaml/exercises/binary-search/jbuild +11 -0
  432. data/tracks/ocaml/exercises/binary-search/test.ml +1 -2
  433. data/tracks/ocaml/exercises/bob/Makefile +4 -6
  434. data/tracks/ocaml/exercises/bob/example.ml +2 -2
  435. data/tracks/ocaml/exercises/bob/jbuild +11 -0
  436. data/tracks/ocaml/exercises/bowling/Makefile +4 -6
  437. data/tracks/ocaml/exercises/bowling/bowling.mli +1 -1
  438. data/tracks/ocaml/exercises/bowling/example.ml +1 -1
  439. data/tracks/ocaml/exercises/bowling/jbuild +11 -0
  440. data/tracks/ocaml/exercises/bowling/test.ml +1 -1
  441. data/tracks/ocaml/exercises/bracket-push/Makefile +4 -6
  442. data/tracks/ocaml/exercises/bracket-push/example.ml +2 -2
  443. data/tracks/ocaml/exercises/bracket-push/jbuild +11 -0
  444. data/tracks/ocaml/exercises/bracket-push/test.ml +1 -1
  445. data/tracks/ocaml/exercises/change/Makefile +4 -6
  446. data/tracks/ocaml/exercises/change/example.ml +1 -1
  447. data/tracks/ocaml/exercises/change/jbuild +11 -0
  448. data/tracks/ocaml/exercises/change/test.ml +2 -2
  449. data/tracks/ocaml/exercises/connect/Makefile +4 -10
  450. data/tracks/ocaml/exercises/connect/example.ml +23 -17
  451. data/tracks/ocaml/exercises/connect/jbuild +11 -0
  452. data/tracks/ocaml/exercises/connect/test.ml +1 -1
  453. data/tracks/ocaml/exercises/custom-set/Makefile +4 -6
  454. data/tracks/ocaml/exercises/custom-set/jbuild +11 -0
  455. data/tracks/ocaml/exercises/difference-of-squares/Makefile +4 -6
  456. data/tracks/ocaml/exercises/difference-of-squares/example.ml +1 -1
  457. data/tracks/ocaml/exercises/difference-of-squares/jbuild +11 -0
  458. data/tracks/ocaml/exercises/difference-of-squares/test.ml +0 -1
  459. data/tracks/ocaml/exercises/dominoes/Makefile +4 -6
  460. data/tracks/ocaml/exercises/dominoes/example.ml +1 -1
  461. data/tracks/ocaml/exercises/dominoes/jbuild +11 -0
  462. data/tracks/ocaml/exercises/dominoes/test.ml +9 -4
  463. data/tracks/ocaml/exercises/etl/Makefile +4 -6
  464. data/tracks/ocaml/exercises/etl/example.ml +1 -1
  465. data/tracks/ocaml/exercises/etl/jbuild +11 -0
  466. data/tracks/ocaml/exercises/etl/test.ml +1 -3
  467. data/tracks/ocaml/exercises/forth/Makefile +4 -6
  468. data/tracks/ocaml/exercises/forth/example.ml +7 -4
  469. data/tracks/ocaml/exercises/forth/jbuild +11 -0
  470. data/tracks/ocaml/exercises/forth/test.ml +1 -1
  471. data/tracks/ocaml/exercises/grade-school/Makefile +4 -6
  472. data/tracks/ocaml/exercises/grade-school/example.ml +5 -6
  473. data/tracks/ocaml/exercises/grade-school/grade_school.mli +1 -6
  474. data/tracks/ocaml/exercises/grade-school/jbuild +11 -0
  475. data/tracks/ocaml/exercises/grade-school/test.ml +24 -56
  476. data/tracks/ocaml/exercises/hamming/Makefile +4 -6
  477. data/tracks/ocaml/exercises/hamming/example.ml +9 -2
  478. data/tracks/ocaml/exercises/hamming/jbuild +11 -0
  479. data/tracks/ocaml/exercises/hamming/test.ml +6 -6
  480. data/tracks/ocaml/exercises/hangman/Makefile +4 -6
  481. data/tracks/ocaml/exercises/hangman/example.ml +1 -1
  482. data/tracks/ocaml/exercises/hangman/jbuild +11 -0
  483. data/tracks/ocaml/exercises/hangman/test.ml +0 -1
  484. data/tracks/ocaml/exercises/hello-world/Makefile +4 -6
  485. data/tracks/ocaml/exercises/hello-world/jbuild +11 -0
  486. data/tracks/ocaml/exercises/hello-world/test.ml +1 -2
  487. data/tracks/ocaml/exercises/hexadecimal/Makefile +4 -6
  488. data/tracks/ocaml/exercises/hexadecimal/example.ml +2 -2
  489. data/tracks/ocaml/exercises/hexadecimal/jbuild +11 -0
  490. data/tracks/ocaml/exercises/hexadecimal/test.ml +1 -1
  491. data/tracks/ocaml/exercises/leap/Makefile +4 -6
  492. data/tracks/ocaml/exercises/leap/jbuild +11 -0
  493. data/tracks/ocaml/exercises/leap/test.ml +1 -2
  494. data/tracks/ocaml/exercises/list-ops/Makefile +4 -6
  495. data/tracks/ocaml/exercises/list-ops/jbuild +11 -0
  496. data/tracks/ocaml/exercises/list-ops/test.ml +2 -2
  497. data/tracks/ocaml/exercises/luhn/Makefile +4 -6
  498. data/tracks/ocaml/exercises/luhn/example.ml +2 -2
  499. data/tracks/ocaml/exercises/luhn/jbuild +11 -0
  500. data/tracks/ocaml/exercises/luhn/test.ml +1 -1
  501. data/tracks/ocaml/exercises/meetup/Makefile +4 -6
  502. data/tracks/ocaml/exercises/meetup/example.ml +1 -1
  503. data/tracks/ocaml/exercises/meetup/jbuild +11 -0
  504. data/tracks/ocaml/exercises/meetup/test.ml +1 -1
  505. data/tracks/ocaml/exercises/minesweeper/Makefile +4 -6
  506. data/tracks/ocaml/exercises/minesweeper/example.ml +2 -2
  507. data/tracks/ocaml/exercises/minesweeper/jbuild +11 -0
  508. data/tracks/ocaml/exercises/minesweeper/test.ml +1 -1
  509. data/tracks/ocaml/exercises/nucleotide-count/Makefile +4 -6
  510. data/tracks/ocaml/exercises/nucleotide-count/example.ml +1 -1
  511. data/tracks/ocaml/exercises/nucleotide-count/jbuild +11 -0
  512. data/tracks/ocaml/exercises/nucleotide-count/nucleotide_count.mli +1 -1
  513. data/tracks/ocaml/exercises/nucleotide-count/test.ml +1 -1
  514. data/tracks/ocaml/exercises/palindrome-products/Makefile +4 -6
  515. data/tracks/ocaml/exercises/palindrome-products/example.ml +5 -5
  516. data/tracks/ocaml/exercises/palindrome-products/jbuild +12 -0
  517. data/tracks/ocaml/exercises/pangram/Makefile +4 -6
  518. data/tracks/ocaml/exercises/pangram/example.ml +15 -6
  519. data/tracks/ocaml/exercises/pangram/jbuild +11 -0
  520. data/tracks/ocaml/exercises/pangram/test.ml +1 -2
  521. data/tracks/ocaml/exercises/phone-number/Makefile +4 -6
  522. data/tracks/ocaml/exercises/phone-number/example.ml +5 -5
  523. data/tracks/ocaml/exercises/phone-number/jbuild +11 -0
  524. data/tracks/ocaml/exercises/phone-number/test.ml +2 -2
  525. data/tracks/ocaml/exercises/prime-factors/Makefile +4 -6
  526. data/tracks/ocaml/exercises/prime-factors/example.ml +2 -2
  527. data/tracks/ocaml/exercises/prime-factors/jbuild +11 -0
  528. data/tracks/ocaml/exercises/prime-factors/test.ml +2 -2
  529. data/tracks/ocaml/exercises/raindrops/Makefile +4 -6
  530. data/tracks/ocaml/exercises/raindrops/example.ml +0 -2
  531. data/tracks/ocaml/exercises/raindrops/jbuild +11 -0
  532. data/tracks/ocaml/exercises/raindrops/test.ml +1 -2
  533. data/tracks/ocaml/exercises/react/Makefile +4 -6
  534. data/tracks/ocaml/exercises/react/example.ml +1 -1
  535. data/tracks/ocaml/exercises/react/jbuild +11 -0
  536. data/tracks/ocaml/exercises/react/test.ml +1 -1
  537. data/tracks/ocaml/exercises/rectangles/Makefile +4 -6
  538. data/tracks/ocaml/exercises/rectangles/jbuild +11 -0
  539. data/tracks/ocaml/exercises/rectangles/test.ml +1 -2
  540. data/tracks/ocaml/exercises/rna-transcription/Makefile +4 -6
  541. data/tracks/ocaml/exercises/rna-transcription/example.ml +1 -3
  542. data/tracks/ocaml/exercises/rna-transcription/jbuild +11 -0
  543. data/tracks/ocaml/exercises/rna-transcription/test.ml +1 -1
  544. data/tracks/ocaml/exercises/robot-name/Makefile +4 -6
  545. data/tracks/ocaml/exercises/robot-name/example.ml +2 -2
  546. data/tracks/ocaml/exercises/robot-name/jbuild +11 -0
  547. data/tracks/ocaml/exercises/robot-name/test.ml +6 -5
  548. data/tracks/ocaml/exercises/roman-numerals/Makefile +4 -6
  549. data/tracks/ocaml/exercises/roman-numerals/jbuild +11 -0
  550. data/tracks/ocaml/exercises/roman-numerals/test.ml +1 -2
  551. data/tracks/ocaml/exercises/run-length-encoding/Makefile +4 -6
  552. data/tracks/ocaml/exercises/run-length-encoding/example.ml +3 -3
  553. data/tracks/ocaml/exercises/run-length-encoding/jbuild +11 -0
  554. data/tracks/ocaml/exercises/run-length-encoding/test.ml +1 -1
  555. data/tracks/ocaml/exercises/say/Makefile +4 -6
  556. data/tracks/ocaml/exercises/say/example.ml +2 -2
  557. data/tracks/ocaml/exercises/say/jbuild +11 -0
  558. data/tracks/ocaml/exercises/say/test.ml +1 -1
  559. data/tracks/ocaml/exercises/space-age/Makefile +4 -6
  560. data/tracks/ocaml/exercises/space-age/example.ml +1 -1
  561. data/tracks/ocaml/exercises/space-age/jbuild +11 -0
  562. data/tracks/ocaml/exercises/space-age/test.ml +2 -2
  563. data/tracks/ocaml/exercises/triangle/Makefile +4 -6
  564. data/tracks/ocaml/exercises/triangle/example.ml +1 -1
  565. data/tracks/ocaml/exercises/triangle/jbuild +11 -0
  566. data/tracks/ocaml/exercises/triangle/test.ml +1 -1
  567. data/tracks/ocaml/exercises/word-count/Makefile +4 -6
  568. data/tracks/ocaml/exercises/word-count/example.ml +1 -1
  569. data/tracks/ocaml/exercises/word-count/jbuild +11 -0
  570. data/tracks/ocaml/exercises/word-count/test.ml +1 -1
  571. data/tracks/ocaml/exercises/word-count/word_count.mli +1 -1
  572. data/tracks/ocaml/exercises/zipper/Makefile +4 -6
  573. data/tracks/ocaml/exercises/zipper/example.ml +1 -1
  574. data/tracks/ocaml/exercises/zipper/jbuild +12 -0
  575. data/tracks/ocaml/exercises/zipper/test.ml +1 -1
  576. data/tracks/ocaml/exercises/zipper/tree.ml +1 -1
  577. data/tracks/ocaml/exercises/zipper/tree.mli +1 -1
  578. data/tracks/ocaml/exercises/zipper/zipper.mli +1 -1
  579. data/tracks/ocaml/tools/test-generator/Makefile +4 -13
  580. data/tracks/ocaml/tools/test-generator/jbuild +11 -0
  581. data/tracks/perl5/exercises/bob/.meta/exercise-data.yaml +9 -10
  582. data/tracks/perl5/exercises/bob/.meta/solutions/Bob.pm +7 -7
  583. data/tracks/perl5/exercises/bob/Bob.pm +1 -1
  584. data/tracks/perl5/exercises/bob/bob.t +81 -44
  585. data/tracks/perl5/exercises/clock/.meta/exercise-data.yaml +82 -0
  586. data/tracks/perl5/exercises/clock/.meta/solutions/Clock.pm +25 -52
  587. data/tracks/perl5/exercises/clock/Clock.pm +22 -0
  588. data/tracks/perl5/exercises/clock/clock.t +628 -92
  589. data/tracks/perl5/exercises/hello-world/.meta/exercise-data.yaml +1 -2
  590. data/tracks/perl5/exercises/hello-world/hello-world.t +4 -16
  591. data/tracks/perl5/exercises/leap/.meta/exercise-data.yaml +2 -3
  592. data/tracks/perl5/exercises/leap/leap.t +16 -21
  593. data/tracks/perl5/exercises/luhn/.meta/exercise-data.yaml +2 -2
  594. data/tracks/perl5/exercises/luhn/luhn.t +44 -30
  595. data/tracks/perl5/exercises/phone-number/.meta/exercise-data.yaml +3 -3
  596. data/tracks/perl5/exercises/phone-number/.meta/solutions/PhoneNumber.pm +1 -1
  597. data/tracks/perl5/exercises/phone-number/PhoneNumber.pm +1 -1
  598. data/tracks/perl5/exercises/phone-number/phone-number.t +59 -31
  599. data/tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml +1 -1
  600. data/tracks/perl6/exercises/all-your-base/all-your-base.t +45 -45
  601. data/tracks/plsql/config/exercise_readme.go.tmpl +19 -4
  602. data/tracks/plsql/exercises/binary/README.md +2 -0
  603. data/tracks/plsql/exercises/grains/README.md +0 -1
  604. data/tracks/plsql/exercises/leap/README.md +1 -1
  605. data/tracks/plsql/exercises/rna-transcription/README.md +2 -2
  606. data/tracks/plsql/exercises/roman-numerals/README.md +1 -1
  607. data/tracks/prolog/config.json +30 -0
  608. data/tracks/prolog/config/maintainers.json +10 -0
  609. data/tracks/prolog/docs/INSTALLATION.md +4 -4
  610. data/tracks/prolog/docs/LEARNING.md +1 -0
  611. data/tracks/prolog/docs/TESTS.md +1 -1
  612. data/tracks/prolog/exercises/complex-numbers/README.md +38 -0
  613. data/tracks/prolog/exercises/complex-numbers/complex_numbers.example +14 -0
  614. data/tracks/prolog/exercises/complex-numbers/complex_numbers.pl +11 -0
  615. data/tracks/prolog/exercises/complex-numbers/complex_numbers_tests.plt +123 -0
  616. data/tracks/prolog/exercises/hello-world/README.md +1 -1
  617. data/tracks/prolog/exercises/hello-world/hello_world.pl +1 -1
  618. data/tracks/prolog/exercises/hello-world/hello_world_tests.plt +1 -1
  619. data/tracks/prolog/exercises/isogram/README.md +19 -0
  620. data/tracks/prolog/exercises/isogram/isogram.example +10 -0
  621. data/tracks/prolog/exercises/isogram/isogram.pl +1 -0
  622. data/tracks/prolog/exercises/isogram/isogram_tests.plt +39 -0
  623. data/tracks/prolog/exercises/queen-attack/README.md +32 -0
  624. data/tracks/prolog/exercises/queen-attack/queen_attack.example +12 -0
  625. data/tracks/prolog/exercises/queen-attack/queen_attack.pl +11 -0
  626. data/tracks/prolog/exercises/queen-attack/queen_attack_tests.plt +62 -0
  627. data/tracks/python/config/exercise_readme.go.tmpl +20 -1
  628. data/tracks/python/exercises/accumulate/README.md +20 -1
  629. data/tracks/python/exercises/acronym/README.md +20 -1
  630. data/tracks/python/exercises/all-your-base/README.md +20 -1
  631. data/tracks/python/exercises/allergies/README.md +20 -1
  632. data/tracks/python/exercises/alphametics/README.md +20 -1
  633. data/tracks/python/exercises/anagram/README.md +20 -1
  634. data/tracks/python/exercises/armstrong-numbers/README.md +20 -1
  635. data/tracks/python/exercises/atbash-cipher/README.md +20 -1
  636. data/tracks/python/exercises/beer-song/README.md +20 -1
  637. data/tracks/python/exercises/binary-search-tree/README.md +20 -1
  638. data/tracks/python/exercises/binary-search/README.md +20 -1
  639. data/tracks/python/exercises/binary/README.md +20 -1
  640. data/tracks/python/exercises/bob/README.md +20 -1
  641. data/tracks/python/exercises/book-store/README.md +20 -1
  642. data/tracks/python/exercises/bowling/README.md +20 -1
  643. data/tracks/python/exercises/bracket-push/README.md +20 -1
  644. data/tracks/python/exercises/change/README.md +20 -1
  645. data/tracks/python/exercises/circular-buffer/README.md +20 -1
  646. data/tracks/python/exercises/clock/README.md +20 -1
  647. data/tracks/python/exercises/collatz-conjecture/README.md +20 -1
  648. data/tracks/python/exercises/complex-numbers/README.md +20 -1
  649. data/tracks/python/exercises/connect/README.md +20 -1
  650. data/tracks/python/exercises/crypto-square/README.md +20 -1
  651. data/tracks/python/exercises/custom-set/README.md +20 -1
  652. data/tracks/python/exercises/diamond/README.md +20 -1
  653. data/tracks/python/exercises/difference-of-squares/README.md +20 -1
  654. data/tracks/python/exercises/diffie-hellman/README.md +20 -1
  655. data/tracks/python/exercises/dominoes/README.md +20 -1
  656. data/tracks/python/exercises/dot-dsl/README.md +20 -1
  657. data/tracks/python/exercises/error-handling/README.md +20 -1
  658. data/tracks/python/exercises/etl/README.md +20 -1
  659. data/tracks/python/exercises/flatten-array/README.md +20 -1
  660. data/tracks/python/exercises/food-chain/README.md +20 -1
  661. data/tracks/python/exercises/food-chain/example.py +9 -0
  662. data/tracks/python/exercises/food-chain/food_chain.py +1 -1
  663. data/tracks/python/exercises/food-chain/food_chain_test.py +79 -80
  664. data/tracks/python/exercises/forth/README.md +20 -1
  665. data/tracks/python/exercises/gigasecond/README.md +20 -1
  666. data/tracks/python/exercises/go-counting/README.md +20 -1
  667. data/tracks/python/exercises/grade-school/README.md +20 -1
  668. data/tracks/python/exercises/grains/README.md +20 -1
  669. data/tracks/python/exercises/grains/grains_test.py +1 -1
  670. data/tracks/python/exercises/grep/README.md +20 -1
  671. data/tracks/python/exercises/hamming/README.md +20 -1
  672. data/tracks/python/exercises/hello-world/README.md +20 -1
  673. data/tracks/python/exercises/hexadecimal/README.md +20 -1
  674. data/tracks/python/exercises/house/README.md +20 -1
  675. data/tracks/python/exercises/isbn-verifier/README.md +20 -1
  676. data/tracks/python/exercises/isogram/README.md +20 -1
  677. data/tracks/python/exercises/kindergarten-garden/README.md +20 -1
  678. data/tracks/python/exercises/largest-series-product/README.md +20 -1
  679. data/tracks/python/exercises/leap/README.md +20 -1
  680. data/tracks/python/exercises/linked-list/README.md +20 -1
  681. data/tracks/python/exercises/list-ops/README.md +20 -1
  682. data/tracks/python/exercises/luhn/README.md +20 -1
  683. data/tracks/python/exercises/markdown/README.md +20 -1
  684. data/tracks/python/exercises/matrix/README.md +20 -1
  685. data/tracks/python/exercises/meetup/README.md +20 -1
  686. data/tracks/python/exercises/minesweeper/README.md +20 -1
  687. data/tracks/python/exercises/nth-prime/README.md +20 -1
  688. data/tracks/python/exercises/nucleotide-count/README.md +20 -1
  689. data/tracks/python/exercises/ocr-numbers/README.md +20 -1
  690. data/tracks/python/exercises/octal/README.md +20 -1
  691. data/tracks/python/exercises/palindrome-products/README.md +20 -1
  692. data/tracks/python/exercises/pangram/README.md +20 -1
  693. data/tracks/python/exercises/parallel-letter-frequency/README.md +20 -1
  694. data/tracks/python/exercises/pascals-triangle/README.md +20 -1
  695. data/tracks/python/exercises/perfect-numbers/README.md +20 -1
  696. data/tracks/python/exercises/phone-number/README.md +20 -1
  697. data/tracks/python/exercises/pig-latin/README.md +24 -5
  698. data/tracks/python/exercises/point-mutations/README.md +20 -1
  699. data/tracks/python/exercises/poker/README.md +20 -1
  700. data/tracks/python/exercises/pov/README.md +20 -1
  701. data/tracks/python/exercises/prime-factors/README.md +20 -1
  702. data/tracks/python/exercises/protein-translation/README.md +20 -1
  703. data/tracks/python/exercises/proverb/README.md +20 -1
  704. data/tracks/python/exercises/pythagorean-triplet/README.md +20 -1
  705. data/tracks/python/exercises/queen-attack/README.md +20 -1
  706. data/tracks/python/exercises/queen-attack/example.py +16 -26
  707. data/tracks/python/exercises/queen-attack/queen_attack.py +5 -5
  708. data/tracks/python/exercises/queen-attack/queen_attack_test.py +18 -49
  709. data/tracks/python/exercises/rail-fence-cipher/README.md +20 -1
  710. data/tracks/python/exercises/raindrops/README.md +20 -1
  711. data/tracks/python/exercises/rational-numbers/README.md +20 -1
  712. data/tracks/python/exercises/react/README.md +20 -1
  713. data/tracks/python/exercises/rectangles/README.md +20 -1
  714. data/tracks/python/exercises/reverse-string/README.md +20 -1
  715. data/tracks/python/exercises/rna-transcription/README.md +20 -1
  716. data/tracks/python/exercises/robot-name/README.md +20 -1
  717. data/tracks/python/exercises/robot-simulator/README.md +20 -1
  718. data/tracks/python/exercises/roman-numerals/README.md +20 -1
  719. data/tracks/python/exercises/rotational-cipher/README.md +20 -1
  720. data/tracks/python/exercises/run-length-encoding/README.md +20 -1
  721. data/tracks/python/exercises/saddle-points/README.md +20 -1
  722. data/tracks/python/exercises/say/README.md +20 -1
  723. data/tracks/python/exercises/scale-generator/README.md +20 -1
  724. data/tracks/python/exercises/scrabble-score/README.md +20 -1
  725. data/tracks/python/exercises/secret-handshake/README.md +20 -1
  726. data/tracks/python/exercises/series/README.md +20 -1
  727. data/tracks/python/exercises/sieve/README.md +20 -1
  728. data/tracks/python/exercises/simple-cipher/README.md +20 -1
  729. data/tracks/python/exercises/simple-linked-list/README.md +20 -1
  730. data/tracks/python/exercises/space-age/README.md +20 -1
  731. data/tracks/python/exercises/spiral-matrix/README.md +20 -1
  732. data/tracks/python/exercises/strain/README.md +20 -1
  733. data/tracks/python/exercises/sublist/README.md +20 -1
  734. data/tracks/python/exercises/sum-of-multiples/README.md +20 -1
  735. data/tracks/python/exercises/tournament/README.md +20 -1
  736. data/tracks/python/exercises/transpose/README.md +20 -1
  737. data/tracks/python/exercises/tree-building/README.md +20 -1
  738. data/tracks/python/exercises/triangle/README.md +20 -1
  739. data/tracks/python/exercises/trinary/README.md +20 -1
  740. data/tracks/python/exercises/twelve-days/README.md +20 -1
  741. data/tracks/python/exercises/two-bucket/README.md +21 -2
  742. data/tracks/python/exercises/two-fer/README.md +20 -1
  743. data/tracks/python/exercises/variable-length-quantity/README.md +20 -1
  744. data/tracks/python/exercises/word-count/README.md +20 -1
  745. data/tracks/python/exercises/word-search/README.md +20 -1
  746. data/tracks/python/exercises/wordy/README.md +20 -1
  747. data/tracks/python/exercises/zebra-puzzle/README.md +20 -1
  748. data/tracks/python/exercises/zipper/README.md +20 -1
  749. data/tracks/rust/_test/check-exercises.sh +3 -0
  750. data/tracks/rust/config.json +1 -1
  751. data/tracks/rust/exercises/collatz-conjecture/example.rs +3 -3
  752. data/tracks/rust/exercises/collatz-conjecture/src/lib.rs +2 -2
  753. data/tracks/rust/exercises/collatz-conjecture/tests/collatz-conjecture.rs +5 -5
  754. data/tracks/rust/exercises/nth-prime/example.rs +4 -4
  755. data/tracks/rust/exercises/nth-prime/src/lib.rs +3 -0
  756. data/tracks/rust/exercises/nth-prime/tests/nth-prime.rs +5 -5
  757. data/tracks/rust/exercises/perfect-numbers/example.rs +5 -5
  758. data/tracks/rust/exercises/perfect-numbers/src/lib.rs +1 -1
  759. data/tracks/rust/exercises/perfect-numbers/tests/perfect-numbers.rs +2 -2
  760. data/tracks/rust/exercises/reverse-string/src/lib.rs +2 -2
  761. data/tracks/scala/exercises/nth-prime/src/test/scala/NthPrimeTest.scala +2 -2
  762. data/tracks/scala/exercises/nucleotide-count/src/test/scala/NucleotideCountTest.scala +16 -16
  763. data/tracks/scala/exercises/ocr-numbers/src/test/scala/OcrNumbersTest.scala +6 -5
  764. data/tracks/scala/exercises/palindrome-products/src/test/scala/PalindromeProductsTest.scala +15 -19
  765. data/tracks/scala/exercises/pangram/src/test/scala/PangramTest.scala +10 -5
  766. data/tracks/scala/exercises/pascals-triangle/src/test/scala/PascalsTriangleTest.scala +47 -8
  767. data/tracks/scala/exercises/perfect-numbers/src/main/scala/.keep +0 -0
  768. data/tracks/scala/exercises/perfect-numbers/src/test/scala/PerfectNumbersTest.scala +17 -15
  769. data/tracks/scala/exercises/phone-number/src/test/scala/PhoneNumberTest.scala +26 -16
  770. data/tracks/scala/exercises/pig-latin/src/test/scala/PigLatinTest.scala +24 -24
  771. data/tracks/scala/exercises/prime-factors/src/test/scala/PrimefactorsTest.scala +9 -9
  772. data/tracks/scala/exercises/protein-translation/example.scala +5 -5
  773. data/tracks/scala/exercises/protein-translation/src/test/scala/ProteinTranslationTest.scala +91 -29
  774. data/tracks/scala/exercises/queen-attack/src/test/scala/QueenAttackTest.scala +20 -20
  775. data/tracks/scala/exercises/rail-fence-cipher/src/test/scala/RailFenceCipherTest.scala +15 -9
  776. data/tracks/scala/exercises/raindrops/src/test/scala/RaindropsTest.scala +2 -2
  777. data/tracks/scala/exercises/rna-transcription/src/test/scala/RnaTranscriptionTest.scala +8 -23
  778. data/tracks/scala/exercises/roman-numerals/src/test/scala/RomanNumeralsTest.scala +6 -1
  779. data/tracks/scala/testgen/src/main/scala/KindergartenGardenTestGenerator.scala +0 -6
  780. data/tracks/scala/testgen/src/main/scala/NthPrimeTestGenerator.scala +3 -3
  781. data/tracks/scala/testgen/src/main/scala/NucleotideCountTestGenerator.scala +3 -3
  782. data/tracks/scala/testgen/src/main/scala/OcrNumbersTestGenerator.scala +3 -3
  783. data/tracks/scala/testgen/src/main/scala/PalindromeProductsTestGenerator.scala +3 -3
  784. data/tracks/scala/testgen/src/main/scala/PangramsTestGenerator.scala +3 -3
  785. data/tracks/scala/testgen/src/main/scala/PascalsTriangleTestGenerator.scala +1 -1
  786. data/tracks/scala/testgen/src/main/scala/PerfectNumbersTestGenerator.scala +3 -3
  787. data/tracks/scala/testgen/src/main/scala/PhoneNumberTestGenerator.scala +1 -1
  788. data/tracks/scala/testgen/src/main/scala/PigLatinTestGenerator.scala +1 -1
  789. data/tracks/scala/testgen/src/main/scala/PrimeFactorsTestGenerator.scala +6 -8
  790. data/tracks/scala/testgen/src/main/scala/QueenAttackTestGenerator.scala +24 -22
  791. data/tracks/scala/testgen/src/main/scala/RailFenceCipherTestGenerator.scala +1 -1
  792. data/tracks/scala/testgen/src/main/scala/RaindropsTestGenerator.scala +2 -2
  793. data/tracks/scala/testgen/src/main/scala/RnaTranscriptionTestGenerator.scala +3 -3
  794. data/tracks/scala/testgen/src/main/scala/RomanNumeralsTestGenerator.scala +2 -2
  795. data/tracks/scala/testgen/src/main/scala/testgen/TestSuiteBuilder.scala +5 -0
  796. data/tracks/scheme/docs/RESOURCES.md +1 -0
  797. data/tracks/swift/.travis.yml +5 -0
  798. data/tracks/typescript/config.json +154 -1
  799. data/tracks/typescript/config/maintainers.json +10 -0
  800. data/tracks/typescript/exercises/allergies/README.md +62 -0
  801. data/tracks/typescript/exercises/allergies/allergies.example.ts +48 -0
  802. data/tracks/typescript/exercises/allergies/allergies.test.ts +113 -0
  803. data/tracks/typescript/exercises/allergies/allergies.ts +0 -0
  804. data/tracks/typescript/exercises/allergies/package.json +36 -0
  805. data/tracks/typescript/exercises/allergies/tsconfig.json +22 -0
  806. data/tracks/typescript/exercises/allergies/tslint.json +127 -0
  807. data/tracks/typescript/exercises/allergies/yarn.lock +2624 -0
  808. data/tracks/typescript/exercises/collatz-conjecture/README.md +59 -0
  809. data/tracks/typescript/exercises/collatz-conjecture/collatz-conjecture.example.ts +20 -0
  810. data/tracks/typescript/exercises/collatz-conjecture/collatz-conjecture.test.ts +33 -0
  811. data/tracks/typescript/exercises/collatz-conjecture/collatz-conjecture.ts +7 -0
  812. data/tracks/typescript/exercises/collatz-conjecture/package.json +36 -0
  813. data/tracks/typescript/exercises/collatz-conjecture/tsconfig.json +22 -0
  814. data/tracks/typescript/exercises/collatz-conjecture/tslint.json +127 -0
  815. data/tracks/typescript/exercises/collatz-conjecture/yarn.lock +2624 -0
  816. data/tracks/typescript/exercises/isogram/README.md +46 -0
  817. data/tracks/typescript/exercises/isogram/isogram.example.ts +31 -0
  818. data/tracks/typescript/exercises/isogram/isogram.test.ts +48 -0
  819. data/tracks/typescript/exercises/isogram/isogram.ts +7 -0
  820. data/tracks/typescript/exercises/isogram/package.json +36 -0
  821. data/tracks/typescript/exercises/isogram/tsconfig.json +22 -0
  822. data/tracks/typescript/exercises/isogram/tslint.json +127 -0
  823. data/tracks/typescript/exercises/isogram/yarn.lock +2624 -0
  824. data/tracks/typescript/exercises/matrix/README.md +73 -0
  825. data/tracks/typescript/exercises/matrix/matrix.example.ts +36 -0
  826. data/tracks/typescript/exercises/matrix/matrix.test.ts +43 -0
  827. data/tracks/typescript/exercises/matrix/matrix.ts +7 -0
  828. data/tracks/typescript/exercises/matrix/package.json +36 -0
  829. data/tracks/typescript/exercises/matrix/tsconfig.json +22 -0
  830. data/tracks/typescript/exercises/matrix/tslint.json +127 -0
  831. data/tracks/typescript/exercises/matrix/yarn.lock +2624 -0
  832. data/tracks/typescript/exercises/nucleotide-count/README.md +45 -0
  833. data/tracks/typescript/exercises/nucleotide-count/nucleotide-count.example.ts +25 -0
  834. data/tracks/typescript/exercises/nucleotide-count/nucleotide-count.test.ts +48 -0
  835. data/tracks/typescript/exercises/nucleotide-count/nucleotide-count.ts +7 -0
  836. data/tracks/typescript/exercises/nucleotide-count/package.json +36 -0
  837. data/tracks/typescript/exercises/nucleotide-count/tsconfig.json +22 -0
  838. data/tracks/typescript/exercises/nucleotide-count/tslint.json +127 -0
  839. data/tracks/typescript/exercises/nucleotide-count/yarn.lock +2624 -0
  840. data/tracks/typescript/exercises/protein-translation/README.md +74 -0
  841. data/tracks/typescript/exercises/protein-translation/package.json +36 -0
  842. data/tracks/typescript/exercises/protein-translation/protein-translation.example.ts +61 -0
  843. data/tracks/typescript/exercises/protein-translation/protein-translation.test.ts +118 -0
  844. data/tracks/typescript/exercises/protein-translation/protein-translation.ts +7 -0
  845. data/tracks/typescript/exercises/protein-translation/tsconfig.json +22 -0
  846. data/tracks/typescript/exercises/protein-translation/tslint.json +127 -0
  847. data/tracks/typescript/exercises/protein-translation/yarn.lock +2624 -0
  848. data/tracks/typescript/exercises/reverse-string/README.md +39 -0
  849. data/tracks/typescript/exercises/reverse-string/package.json +36 -0
  850. data/tracks/typescript/exercises/reverse-string/reverse-string.example.ts +7 -0
  851. data/tracks/typescript/exercises/reverse-string/reverse-string.test.ts +28 -0
  852. data/tracks/typescript/exercises/reverse-string/reverse-string.ts +7 -0
  853. data/tracks/typescript/exercises/reverse-string/tsconfig.json +22 -0
  854. data/tracks/typescript/exercises/reverse-string/tslint.json +127 -0
  855. data/tracks/typescript/exercises/reverse-string/yarn.lock +2624 -0
  856. data/tracks/typescript/exercises/roman-numerals/README.md +75 -0
  857. data/tracks/typescript/exercises/roman-numerals/package.json +36 -0
  858. data/tracks/typescript/exercises/roman-numerals/roman-numerals.example.ts +32 -0
  859. data/tracks/typescript/exercises/roman-numerals/roman-numerals.test.ts +98 -0
  860. data/tracks/typescript/exercises/roman-numerals/roman-numerals.ts +7 -0
  861. data/tracks/typescript/exercises/roman-numerals/tsconfig.json +22 -0
  862. data/tracks/typescript/exercises/roman-numerals/tslint.json +127 -0
  863. data/tracks/typescript/exercises/roman-numerals/yarn.lock +2624 -0
  864. data/tracks/typescript/exercises/saddle-points/README.md +59 -0
  865. data/tracks/typescript/exercises/saddle-points/package.json +36 -0
  866. data/tracks/typescript/exercises/saddle-points/saddle-points.example.ts +35 -0
  867. data/tracks/typescript/exercises/saddle-points/saddle-points.test.ts +54 -0
  868. data/tracks/typescript/exercises/saddle-points/saddle-points.ts +7 -0
  869. data/tracks/typescript/exercises/saddle-points/tsconfig.json +22 -0
  870. data/tracks/typescript/exercises/saddle-points/tslint.json +127 -0
  871. data/tracks/typescript/exercises/saddle-points/yarn.lock +2624 -0
  872. data/tracks/typescript/exercises/twelve-days/README.md +61 -0
  873. data/tracks/typescript/exercises/twelve-days/package.json +36 -0
  874. data/tracks/typescript/exercises/twelve-days/tsconfig.json +22 -0
  875. data/tracks/typescript/exercises/twelve-days/tslint.json +127 -0
  876. data/tracks/typescript/exercises/twelve-days/twelve-days.example.ts +53 -0
  877. data/tracks/typescript/exercises/twelve-days/twelve-days.test.ts +80 -0
  878. data/tracks/typescript/exercises/twelve-days/twelve-days.ts +7 -0
  879. data/tracks/typescript/exercises/twelve-days/yarn.lock +2624 -0
  880. data/tracks/typescript/exercises/two-fer/README.md +45 -0
  881. data/tracks/typescript/exercises/two-fer/package.json +36 -0
  882. data/tracks/typescript/exercises/two-fer/tsconfig.json +22 -0
  883. data/tracks/typescript/exercises/two-fer/tslint.json +127 -0
  884. data/tracks/typescript/exercises/two-fer/two-fer.example.ts +7 -0
  885. data/tracks/typescript/exercises/two-fer/two-fer.test.ts +18 -0
  886. data/tracks/typescript/exercises/two-fer/two-fer.ts +7 -0
  887. data/tracks/typescript/exercises/two-fer/yarn.lock +2624 -0
  888. data/tracks/vbnet/config/exercise_readme.go.tmpl +5 -4
  889. data/tracks/vbnet/exercises/accumulate/README.md +0 -3
  890. data/tracks/vbnet/exercises/allergies/README.md +0 -1
  891. data/tracks/vbnet/exercises/atbash-cipher/README.md +2 -1
  892. data/tracks/vbnet/exercises/binary/README.md +2 -0
  893. data/tracks/vbnet/exercises/crypto-square/README.md +10 -8
  894. metadata +251 -47
  895. data/tracks/coffeescript/docs/EXERCISE_README_INSERT.md +0 -6
  896. data/tracks/coq/docs/EXERCISE_README_INSERT.md +0 -22
  897. data/tracks/cpp/docs/EXERCISE_README_INSERT.md +0 -30
  898. data/tracks/d/docs/EXERCISE_README_INSERT.md +0 -29
  899. data/tracks/ecmascript/docs/EXERCISE_README_INSERT.md +0 -28
  900. data/tracks/elm/exercises/accumulate/package.json +0 -14
  901. data/tracks/elm/exercises/allergies/package.json +0 -14
  902. data/tracks/elm/exercises/anagram/package.json +0 -14
  903. data/tracks/elm/exercises/atbash-cipher/package.json +0 -14
  904. data/tracks/elm/exercises/bob/package.json +0 -14
  905. data/tracks/elm/exercises/collatz-conjecture/package.json +0 -14
  906. data/tracks/elm/exercises/difference-of-squares/package.json +0 -14
  907. data/tracks/elm/exercises/etl/package.json +0 -14
  908. data/tracks/elm/exercises/gigasecond/package.json +0 -14
  909. data/tracks/elm/exercises/grade-school/package.json +0 -14
  910. data/tracks/elm/exercises/grains/package.json +0 -14
  911. data/tracks/elm/exercises/hamming/package.json +0 -14
  912. data/tracks/elm/exercises/hello-world/package.json +0 -14
  913. data/tracks/elm/exercises/isogram/package.json +0 -14
  914. data/tracks/elm/exercises/largest-series-product/package.json +0 -14
  915. data/tracks/elm/exercises/leap/package.json +0 -14
  916. data/tracks/elm/exercises/list-ops/package.json +0 -14
  917. data/tracks/elm/exercises/nucleotide-count/package.json +0 -14
  918. data/tracks/elm/exercises/pangram/package.json +0 -14
  919. data/tracks/elm/exercises/pascals-triangle/package.json +0 -14
  920. data/tracks/elm/exercises/phone-number/package.json +0 -14
  921. data/tracks/elm/exercises/raindrops/package.json +0 -14
  922. data/tracks/elm/exercises/rna-transcription/package.json +0 -14
  923. data/tracks/elm/exercises/robot-simulator/package.json +0 -14
  924. data/tracks/elm/exercises/roman-numerals/package.json +0 -14
  925. data/tracks/elm/exercises/run-length-encoding/package.json +0 -14
  926. data/tracks/elm/exercises/say/package.json +0 -14
  927. data/tracks/elm/exercises/scrabble-score/package.json +0 -14
  928. data/tracks/elm/exercises/series/package.json +0 -14
  929. data/tracks/elm/exercises/space-age/package.json +0 -14
  930. data/tracks/elm/exercises/strain/package.json +0 -14
  931. data/tracks/elm/exercises/sublist/package.json +0 -14
  932. data/tracks/elm/exercises/sum-of-multiples/package.json +0 -14
  933. data/tracks/elm/exercises/triangle/package.json +0 -14
  934. data/tracks/elm/exercises/word-count/package.json +0 -14
  935. data/tracks/erlang/docs/EXERCISE_README_INSERT.md +0 -41
  936. data/tracks/haskell/docs/EXERCISE_README_INSERT.md +0 -52
  937. data/tracks/lfe/docs/EXERCISE_README_INSERT.md +0 -14
  938. data/tracks/plsql/docs/EXERCISE_README_INSERT.md +0 -18
  939. data/tracks/vbnet/docs/EXERCISE_README_INSERT.md +0 -5
@@ -86,12 +86,30 @@ every exercise will require you to raise an exception, but for those that do, th
86
86
  a message.
87
87
 
88
88
  To raise a message with an exception, just write it as an argument to the exception type. For example, instead of
89
- `raise Exception`, you shold write:
89
+ `raise Exception`, you should write:
90
90
 
91
91
  ```python
92
92
  raise Exception("Meaningful message indicating the source of the error")
93
93
  ```
94
94
 
95
+ ## Running the tests
96
+
97
+ To run the tests, run the appropriate command below ([why they are different](https://github.com/pytest-dev/pytest/issues/1629#issue-161422224)):
98
+
99
+ - Python 2.7: `py.test ocr_numbers_test.py`
100
+ - Python 3.3+: `pytest ocr_numbers_test.py`
101
+
102
+ Alternatively, you can tell Python to run the pytest module (allowing the same command to be used regardless of Python version):
103
+ `python -m pytest ocr_numbers_test.py`
104
+
105
+ ### Common `pytest` options
106
+
107
+ - `-v` : enable verbose output
108
+ - `-x` : stop running tests on first failure
109
+ - `--ff` : run failures from previous test before running other test cases
110
+
111
+ For other options, see `python -m pytest -h`
112
+
95
113
  ## Submitting Exercises
96
114
 
97
115
  Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/ocr-numbers` directory.
@@ -106,4 +124,5 @@ please see the [help page](http://exercism.io/languages/python).
106
124
  Inspired by the Bank OCR kata [http://codingdojo.org/cgi-bin/wiki.pl?KataBankOCR](http://codingdojo.org/cgi-bin/wiki.pl?KataBankOCR)
107
125
 
108
126
  ## Submitting Incomplete Solutions
127
+
109
128
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -54,12 +54,30 @@ every exercise will require you to raise an exception, but for those that do, th
54
54
  a message.
55
55
 
56
56
  To raise a message with an exception, just write it as an argument to the exception type. For example, instead of
57
- `raise Exception`, you shold write:
57
+ `raise Exception`, you should write:
58
58
 
59
59
  ```python
60
60
  raise Exception("Meaningful message indicating the source of the error")
61
61
  ```
62
62
 
63
+ ## Running the tests
64
+
65
+ To run the tests, run the appropriate command below ([why they are different](https://github.com/pytest-dev/pytest/issues/1629#issue-161422224)):
66
+
67
+ - Python 2.7: `py.test octal_test.py`
68
+ - Python 3.3+: `pytest octal_test.py`
69
+
70
+ Alternatively, you can tell Python to run the pytest module (allowing the same command to be used regardless of Python version):
71
+ `python -m pytest octal_test.py`
72
+
73
+ ### Common `pytest` options
74
+
75
+ - `-v` : enable verbose output
76
+ - `-x` : stop running tests on first failure
77
+ - `--ff` : run failures from previous test before running other test cases
78
+
79
+ For other options, see `python -m pytest -h`
80
+
63
81
  ## Submitting Exercises
64
82
 
65
83
  Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/octal` directory.
@@ -74,4 +92,5 @@ please see the [help page](http://exercism.io/languages/python).
74
92
  All of Computer Science [http://www.wolframalpha.com/input/?i=base+8](http://www.wolframalpha.com/input/?i=base+8)
75
93
 
76
94
  ## Submitting Incomplete Solutions
95
+
77
96
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -40,12 +40,30 @@ every exercise will require you to raise an exception, but for those that do, th
40
40
  a message.
41
41
 
42
42
  To raise a message with an exception, just write it as an argument to the exception type. For example, instead of
43
- `raise Exception`, you shold write:
43
+ `raise Exception`, you should write:
44
44
 
45
45
  ```python
46
46
  raise Exception("Meaningful message indicating the source of the error")
47
47
  ```
48
48
 
49
+ ## Running the tests
50
+
51
+ To run the tests, run the appropriate command below ([why they are different](https://github.com/pytest-dev/pytest/issues/1629#issue-161422224)):
52
+
53
+ - Python 2.7: `py.test palindrome_products_test.py`
54
+ - Python 3.3+: `pytest palindrome_products_test.py`
55
+
56
+ Alternatively, you can tell Python to run the pytest module (allowing the same command to be used regardless of Python version):
57
+ `python -m pytest palindrome_products_test.py`
58
+
59
+ ### Common `pytest` options
60
+
61
+ - `-v` : enable verbose output
62
+ - `-x` : stop running tests on first failure
63
+ - `--ff` : run failures from previous test before running other test cases
64
+
65
+ For other options, see `python -m pytest -h`
66
+
49
67
  ## Submitting Exercises
50
68
 
51
69
  Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/palindrome-products` directory.
@@ -60,4 +78,5 @@ please see the [help page](http://exercism.io/languages/python).
60
78
  Problem 4 at Project Euler [http://projecteuler.net/problem=4](http://projecteuler.net/problem=4)
61
79
 
62
80
  ## Submitting Incomplete Solutions
81
+
63
82
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -16,12 +16,30 @@ every exercise will require you to raise an exception, but for those that do, th
16
16
  a message.
17
17
 
18
18
  To raise a message with an exception, just write it as an argument to the exception type. For example, instead of
19
- `raise Exception`, you shold write:
19
+ `raise Exception`, you should write:
20
20
 
21
21
  ```python
22
22
  raise Exception("Meaningful message indicating the source of the error")
23
23
  ```
24
24
 
25
+ ## Running the tests
26
+
27
+ To run the tests, run the appropriate command below ([why they are different](https://github.com/pytest-dev/pytest/issues/1629#issue-161422224)):
28
+
29
+ - Python 2.7: `py.test pangram_test.py`
30
+ - Python 3.3+: `pytest pangram_test.py`
31
+
32
+ Alternatively, you can tell Python to run the pytest module (allowing the same command to be used regardless of Python version):
33
+ `python -m pytest pangram_test.py`
34
+
35
+ ### Common `pytest` options
36
+
37
+ - `-v` : enable verbose output
38
+ - `-x` : stop running tests on first failure
39
+ - `--ff` : run failures from previous test before running other test cases
40
+
41
+ For other options, see `python -m pytest -h`
42
+
25
43
  ## Submitting Exercises
26
44
 
27
45
  Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/pangram` directory.
@@ -36,4 +54,5 @@ please see the [help page](http://exercism.io/languages/python).
36
54
  Wikipedia [https://en.wikipedia.org/wiki/Pangram](https://en.wikipedia.org/wiki/Pangram)
37
55
 
38
56
  ## Submitting Incomplete Solutions
57
+
39
58
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -15,12 +15,30 @@ every exercise will require you to raise an exception, but for those that do, th
15
15
  a message.
16
16
 
17
17
  To raise a message with an exception, just write it as an argument to the exception type. For example, instead of
18
- `raise Exception`, you shold write:
18
+ `raise Exception`, you should write:
19
19
 
20
20
  ```python
21
21
  raise Exception("Meaningful message indicating the source of the error")
22
22
  ```
23
23
 
24
+ ## Running the tests
25
+
26
+ To run the tests, run the appropriate command below ([why they are different](https://github.com/pytest-dev/pytest/issues/1629#issue-161422224)):
27
+
28
+ - Python 2.7: `py.test parallel_letter_frequency_test.py`
29
+ - Python 3.3+: `pytest parallel_letter_frequency_test.py`
30
+
31
+ Alternatively, you can tell Python to run the pytest module (allowing the same command to be used regardless of Python version):
32
+ `python -m pytest parallel_letter_frequency_test.py`
33
+
34
+ ### Common `pytest` options
35
+
36
+ - `-v` : enable verbose output
37
+ - `-x` : stop running tests on first failure
38
+ - `--ff` : run failures from previous test before running other test cases
39
+
40
+ For other options, see `python -m pytest -h`
41
+
24
42
  ## Submitting Exercises
25
43
 
26
44
  Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/parallel-letter-frequency` directory.
@@ -31,4 +49,5 @@ For more detailed information about running tests, code style and linting,
31
49
  please see the [help page](http://exercism.io/languages/python).
32
50
 
33
51
  ## Submitting Incomplete Solutions
52
+
34
53
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -22,12 +22,30 @@ every exercise will require you to raise an exception, but for those that do, th
22
22
  a message.
23
23
 
24
24
  To raise a message with an exception, just write it as an argument to the exception type. For example, instead of
25
- `raise Exception`, you shold write:
25
+ `raise Exception`, you should write:
26
26
 
27
27
  ```python
28
28
  raise Exception("Meaningful message indicating the source of the error")
29
29
  ```
30
30
 
31
+ ## Running the tests
32
+
33
+ To run the tests, run the appropriate command below ([why they are different](https://github.com/pytest-dev/pytest/issues/1629#issue-161422224)):
34
+
35
+ - Python 2.7: `py.test pascals_triangle_test.py`
36
+ - Python 3.3+: `pytest pascals_triangle_test.py`
37
+
38
+ Alternatively, you can tell Python to run the pytest module (allowing the same command to be used regardless of Python version):
39
+ `python -m pytest pascals_triangle_test.py`
40
+
41
+ ### Common `pytest` options
42
+
43
+ - `-v` : enable verbose output
44
+ - `-x` : stop running tests on first failure
45
+ - `--ff` : run failures from previous test before running other test cases
46
+
47
+ For other options, see `python -m pytest -h`
48
+
31
49
  ## Submitting Exercises
32
50
 
33
51
  Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/pascals-triangle` directory.
@@ -42,4 +60,5 @@ please see the [help page](http://exercism.io/languages/python).
42
60
  Pascal's Triangle at Wolfram Math World [http://mathworld.wolfram.com/PascalsTriangle.html](http://mathworld.wolfram.com/PascalsTriangle.html)
43
61
 
44
62
  ## Submitting Incomplete Solutions
63
+
45
64
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -25,12 +25,30 @@ every exercise will require you to raise an exception, but for those that do, th
25
25
  a message.
26
26
 
27
27
  To raise a message with an exception, just write it as an argument to the exception type. For example, instead of
28
- `raise Exception`, you shold write:
28
+ `raise Exception`, you should write:
29
29
 
30
30
  ```python
31
31
  raise Exception("Meaningful message indicating the source of the error")
32
32
  ```
33
33
 
34
+ ## Running the tests
35
+
36
+ To run the tests, run the appropriate command below ([why they are different](https://github.com/pytest-dev/pytest/issues/1629#issue-161422224)):
37
+
38
+ - Python 2.7: `py.test perfect_numbers_test.py`
39
+ - Python 3.3+: `pytest perfect_numbers_test.py`
40
+
41
+ Alternatively, you can tell Python to run the pytest module (allowing the same command to be used regardless of Python version):
42
+ `python -m pytest perfect_numbers_test.py`
43
+
44
+ ### Common `pytest` options
45
+
46
+ - `-v` : enable verbose output
47
+ - `-x` : stop running tests on first failure
48
+ - `--ff` : run failures from previous test before running other test cases
49
+
50
+ For other options, see `python -m pytest -h`
51
+
34
52
  ## Submitting Exercises
35
53
 
36
54
  Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/perfect-numbers` directory.
@@ -45,4 +63,5 @@ please see the [help page](http://exercism.io/languages/python).
45
63
  Taken from Chapter 2 of Functional Thinking by Neal Ford. [http://shop.oreilly.com/product/0636920029687.do](http://shop.oreilly.com/product/0636920029687.do)
46
64
 
47
65
  ## Submitting Incomplete Solutions
66
+
48
67
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -36,12 +36,30 @@ every exercise will require you to raise an exception, but for those that do, th
36
36
  a message.
37
37
 
38
38
  To raise a message with an exception, just write it as an argument to the exception type. For example, instead of
39
- `raise Exception`, you shold write:
39
+ `raise Exception`, you should write:
40
40
 
41
41
  ```python
42
42
  raise Exception("Meaningful message indicating the source of the error")
43
43
  ```
44
44
 
45
+ ## Running the tests
46
+
47
+ To run the tests, run the appropriate command below ([why they are different](https://github.com/pytest-dev/pytest/issues/1629#issue-161422224)):
48
+
49
+ - Python 2.7: `py.test phone_number_test.py`
50
+ - Python 3.3+: `pytest phone_number_test.py`
51
+
52
+ Alternatively, you can tell Python to run the pytest module (allowing the same command to be used regardless of Python version):
53
+ `python -m pytest phone_number_test.py`
54
+
55
+ ### Common `pytest` options
56
+
57
+ - `-v` : enable verbose output
58
+ - `-x` : stop running tests on first failure
59
+ - `--ff` : run failures from previous test before running other test cases
60
+
61
+ For other options, see `python -m pytest -h`
62
+
45
63
  ## Submitting Exercises
46
64
 
47
65
  Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/phone-number` directory.
@@ -56,4 +74,5 @@ please see the [help page](http://exercism.io/languages/python).
56
74
  Event Manager by JumpstartLab [http://tutorials.jumpstartlab.com/projects/eventmanager.html](http://tutorials.jumpstartlab.com/projects/eventmanager.html)
57
75
 
58
76
  ## Submitting Incomplete Solutions
77
+
59
78
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -7,10 +7,10 @@ confusing. It obeys a few simple rules (below), but when it's spoken
7
7
  quickly it's really difficult for non-children (and non-native speakers)
8
8
  to understand.
9
9
 
10
- - **Rule 1**: If a word begins with a vowel sound, add an "ay" sound to
11
- the end of the word.
12
- - **Rule 2**: If a word begins with a consonant sound, move it to the
13
- end of the word, and then add an "ay" sound to the end of the word.
10
+ - **Rule 1**: If a word begins with a vowel sound, add an "ay" sound to the end of the word. Please note that "xr" and "yt" at the beginning of a word make vowel sounds (e.g. "xray" -> "xrayay", "yttria" -> "yttriaay").
11
+ - **Rule 2**: If a word begins with a consonant sound, move it to the end of the word and then add an "ay" sound to the end of the word. Consonant sounds can be made up of multiple consonants, a.k.a. a consonant cluster (e.g. "chair" -> "airchay").
12
+ - **Rule 3**: If a word starts with a consonant sound followed by "qu", move it to the end of the word, and then add an "ay" sound to the end of the word (e.g. "square" -> "aresquay").
13
+ - **Rule 4**: If a word contains a "y" after a consonant cluster or as the second letter in a two letter word it makes a vowel sound (e.g. "rhythm" -> "ythmrhay", "my" -> "ymay").
14
14
 
15
15
  There are a few more rules for edge cases, and there are regional
16
16
  variants too.
@@ -25,12 +25,30 @@ every exercise will require you to raise an exception, but for those that do, th
25
25
  a message.
26
26
 
27
27
  To raise a message with an exception, just write it as an argument to the exception type. For example, instead of
28
- `raise Exception`, you shold write:
28
+ `raise Exception`, you should write:
29
29
 
30
30
  ```python
31
31
  raise Exception("Meaningful message indicating the source of the error")
32
32
  ```
33
33
 
34
+ ## Running the tests
35
+
36
+ To run the tests, run the appropriate command below ([why they are different](https://github.com/pytest-dev/pytest/issues/1629#issue-161422224)):
37
+
38
+ - Python 2.7: `py.test pig_latin_test.py`
39
+ - Python 3.3+: `pytest pig_latin_test.py`
40
+
41
+ Alternatively, you can tell Python to run the pytest module (allowing the same command to be used regardless of Python version):
42
+ `python -m pytest pig_latin_test.py`
43
+
44
+ ### Common `pytest` options
45
+
46
+ - `-v` : enable verbose output
47
+ - `-x` : stop running tests on first failure
48
+ - `--ff` : run failures from previous test before running other test cases
49
+
50
+ For other options, see `python -m pytest -h`
51
+
34
52
  ## Submitting Exercises
35
53
 
36
54
  Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/pig-latin` directory.
@@ -45,4 +63,5 @@ please see the [help page](http://exercism.io/languages/python).
45
63
  The Pig Latin exercise at Test First Teaching by Ultrasaurus [https://github.com/ultrasaurus/test-first-teaching/blob/master/learn_ruby/pig_latin/](https://github.com/ultrasaurus/test-first-teaching/blob/master/learn_ruby/pig_latin/)
46
64
 
47
65
  ## Submitting Incomplete Solutions
66
+
48
67
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -42,12 +42,30 @@ every exercise will require you to raise an exception, but for those that do, th
42
42
  a message.
43
43
 
44
44
  To raise a message with an exception, just write it as an argument to the exception type. For example, instead of
45
- `raise Exception`, you shold write:
45
+ `raise Exception`, you should write:
46
46
 
47
47
  ```python
48
48
  raise Exception("Meaningful message indicating the source of the error")
49
49
  ```
50
50
 
51
+ ## Running the tests
52
+
53
+ To run the tests, run the appropriate command below ([why they are different](https://github.com/pytest-dev/pytest/issues/1629#issue-161422224)):
54
+
55
+ - Python 2.7: `py.test point_mutations_test.py`
56
+ - Python 3.3+: `pytest point_mutations_test.py`
57
+
58
+ Alternatively, you can tell Python to run the pytest module (allowing the same command to be used regardless of Python version):
59
+ `python -m pytest point_mutations_test.py`
60
+
61
+ ### Common `pytest` options
62
+
63
+ - `-v` : enable verbose output
64
+ - `-x` : stop running tests on first failure
65
+ - `--ff` : run failures from previous test before running other test cases
66
+
67
+ For other options, see `python -m pytest -h`
68
+
51
69
  ## Submitting Exercises
52
70
 
53
71
  Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/point-mutations` directory.
@@ -62,4 +80,5 @@ please see the [help page](http://exercism.io/languages/python).
62
80
  The Calculating Point Mutations problem at Rosalind [http://rosalind.info/problems/hamm/](http://rosalind.info/problems/hamm/)
63
81
 
64
82
  ## Submitting Incomplete Solutions
83
+
65
84
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -13,12 +13,30 @@ every exercise will require you to raise an exception, but for those that do, th
13
13
  a message.
14
14
 
15
15
  To raise a message with an exception, just write it as an argument to the exception type. For example, instead of
16
- `raise Exception`, you shold write:
16
+ `raise Exception`, you should write:
17
17
 
18
18
  ```python
19
19
  raise Exception("Meaningful message indicating the source of the error")
20
20
  ```
21
21
 
22
+ ## Running the tests
23
+
24
+ To run the tests, run the appropriate command below ([why they are different](https://github.com/pytest-dev/pytest/issues/1629#issue-161422224)):
25
+
26
+ - Python 2.7: `py.test poker_test.py`
27
+ - Python 3.3+: `pytest poker_test.py`
28
+
29
+ Alternatively, you can tell Python to run the pytest module (allowing the same command to be used regardless of Python version):
30
+ `python -m pytest poker_test.py`
31
+
32
+ ### Common `pytest` options
33
+
34
+ - `-v` : enable verbose output
35
+ - `-x` : stop running tests on first failure
36
+ - `--ff` : run failures from previous test before running other test cases
37
+
38
+ For other options, see `python -m pytest -h`
39
+
22
40
  ## Submitting Exercises
23
41
 
24
42
  Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/poker` directory.
@@ -33,4 +51,5 @@ please see the [help page](http://exercism.io/languages/python).
33
51
  Inspired by the training course from Udacity. [https://www.udacity.com/course/viewer#!/c-cs212/](https://www.udacity.com/course/viewer#!/c-cs212/)
34
52
 
35
53
  ## Submitting Incomplete Solutions
54
+
36
55
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -45,12 +45,30 @@ every exercise will require you to raise an exception, but for those that do, th
45
45
  a message.
46
46
 
47
47
  To raise a message with an exception, just write it as an argument to the exception type. For example, instead of
48
- `raise Exception`, you shold write:
48
+ `raise Exception`, you should write:
49
49
 
50
50
  ```python
51
51
  raise Exception("Meaningful message indicating the source of the error")
52
52
  ```
53
53
 
54
+ ## Running the tests
55
+
56
+ To run the tests, run the appropriate command below ([why they are different](https://github.com/pytest-dev/pytest/issues/1629#issue-161422224)):
57
+
58
+ - Python 2.7: `py.test pov_test.py`
59
+ - Python 3.3+: `pytest pov_test.py`
60
+
61
+ Alternatively, you can tell Python to run the pytest module (allowing the same command to be used regardless of Python version):
62
+ `python -m pytest pov_test.py`
63
+
64
+ ### Common `pytest` options
65
+
66
+ - `-v` : enable verbose output
67
+ - `-x` : stop running tests on first failure
68
+ - `--ff` : run failures from previous test before running other test cases
69
+
70
+ For other options, see `python -m pytest -h`
71
+
54
72
  ## Submitting Exercises
55
73
 
56
74
  Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/pov` directory.
@@ -65,4 +83,5 @@ please see the [help page](http://exercism.io/languages/python).
65
83
  Adaptation of exercise from 4clojure [https://www.4clojure.com/](https://www.4clojure.com/)
66
84
 
67
85
  ## Submitting Incomplete Solutions
86
+
68
87
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.