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
@@ -0,0 +1,18 @@
1
+ apply plugin: "java"
2
+ apply plugin: "eclipse"
3
+ apply plugin: "idea"
4
+
5
+ repositories {
6
+ mavenCentral()
7
+ }
8
+
9
+ dependencies {
10
+ testCompile "junit:junit:4.12"
11
+ }
12
+
13
+ test {
14
+ testLogging {
15
+ exceptionFormat = 'full'
16
+ events = ["passed", "failed", "skipped"]
17
+ }
18
+ }
@@ -0,0 +1,11 @@
1
+ class CustomCheckedException extends Exception {
2
+
3
+ CustomCheckedException() {
4
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
5
+ }
6
+
7
+ CustomCheckedException(String message) {
8
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
9
+ }
10
+
11
+ }
@@ -0,0 +1,11 @@
1
+ class CustomUncheckedException extends RuntimeException {
2
+
3
+ CustomUncheckedException() {
4
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
5
+ }
6
+
7
+ CustomUncheckedException(String message) {
8
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
9
+ }
10
+
11
+ }
@@ -0,0 +1,49 @@
1
+ import java.util.Optional;
2
+
3
+ class ErrorHandling {
4
+
5
+ void handleErrorByThrowingIllegalArgumentException() {
6
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
7
+ }
8
+
9
+ void handleErrorByThrowingIllegalArgumentExceptionWithDetailMessage(String message) {
10
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
11
+ }
12
+
13
+ void handleErrorByThrowingAnyCheckedException() {
14
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
15
+ }
16
+
17
+ void handleErrorByThrowingAnyCheckedExceptionWithDetailMessage(String message) {
18
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
19
+ }
20
+
21
+ void handleErrorByThrowingAnyUncheckedException() {
22
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
23
+ }
24
+
25
+ void handleErrorByThrowingAnyUncheckedExceptionWithDetailMessage(String message) {
26
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
27
+ }
28
+
29
+ void handleErrorByThrowingCustomCheckedException() {
30
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
31
+ }
32
+
33
+ void handleErrorByThrowingCustomCheckedExceptionWithDetailMessage(String message) {
34
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
35
+ }
36
+
37
+ void handleErrorByThrowingCustomUncheckedException() {
38
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
39
+ }
40
+
41
+ void handleErrorByThrowingCustomUncheckedExceptionWithDetailMessage(String message) {
42
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
43
+ }
44
+
45
+ Optional<Integer> handleErrorByReturningOptionalInstance(String integer) {
46
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
47
+ }
48
+
49
+ }
@@ -0,0 +1,116 @@
1
+ import org.junit.Before;
2
+ import org.junit.Ignore;
3
+ import org.junit.Rule;
4
+ import org.junit.Test;
5
+ import org.junit.rules.ExpectedException;
6
+
7
+ import static org.junit.Assert.assertEquals;
8
+ import static org.junit.Assert.assertFalse;
9
+ import static org.junit.Assert.assertTrue;
10
+
11
+ import java.util.Optional;
12
+
13
+ public class ErrorHandlingTest {
14
+
15
+ private ErrorHandling errorHandling;
16
+
17
+ @Rule
18
+ public ExpectedException thrown = ExpectedException.none();
19
+
20
+ @Before
21
+ public void setUp() {
22
+ errorHandling = new ErrorHandling();
23
+ }
24
+
25
+ @Test
26
+ public void testThrowIllegalArgumentException() {
27
+ thrown.expect(IllegalArgumentException.class);
28
+ errorHandling.handleErrorByThrowingIllegalArgumentException();
29
+ }
30
+
31
+ @Ignore("Remove to run test")
32
+ @Test
33
+ public void testThrowIllegalArgumentExceptionWithDetailMessage() {
34
+ thrown.expect(IllegalArgumentException.class);
35
+ thrown.expectMessage("This is the detail message.");
36
+ errorHandling.handleErrorByThrowingIllegalArgumentExceptionWithDetailMessage("This is the detail message.");
37
+ }
38
+
39
+ @Ignore("Remove to run test")
40
+ @Test
41
+ public void testThrowAnyCheckedException() {
42
+ try {
43
+ errorHandling.handleErrorByThrowingAnyCheckedException();
44
+ } catch (Exception e) {
45
+ assertFalse(e instanceof RuntimeException);
46
+ }
47
+ }
48
+
49
+ @Ignore("Remove to run test")
50
+ @Test
51
+ public void testThrowAnyCheckedExceptionWithDetailMessage() {
52
+ try {
53
+ errorHandling.handleErrorByThrowingAnyCheckedExceptionWithDetailMessage("This is the detail message.");
54
+ } catch (Exception e) {
55
+ assertFalse(e instanceof RuntimeException);
56
+ assertEquals("This is the detail message.", e.getMessage());
57
+ }
58
+ }
59
+
60
+ @Ignore("Remove to run test")
61
+ @Test
62
+ public void testThrowAnyUncheckedException() {
63
+ thrown.expect(RuntimeException.class);
64
+ errorHandling.handleErrorByThrowingAnyUncheckedException();
65
+ }
66
+
67
+ @Ignore("Remove to run test")
68
+ @Test
69
+ public void testThrowAnyUncheckedExceptionWithDetailMessage() {
70
+ thrown.expect(RuntimeException.class);
71
+ thrown.expectMessage("This is the detail message.");
72
+ errorHandling.handleErrorByThrowingAnyUncheckedExceptionWithDetailMessage("This is the detail message.");
73
+ }
74
+
75
+ @Ignore("Remove to run test")
76
+ @Test
77
+ public void testThrowCustomCheckedException() throws CustomCheckedException {
78
+ thrown.expect(CustomCheckedException.class);
79
+ errorHandling.handleErrorByThrowingCustomCheckedException();
80
+ }
81
+
82
+ @Ignore("Remove to run test")
83
+ @Test
84
+ public void testThrowCustomCheckedExceptionWithDetailMessage() throws CustomCheckedException {
85
+ thrown.expect(CustomCheckedException.class);
86
+ thrown.expectMessage("This is the detail message.");
87
+ errorHandling.handleErrorByThrowingCustomCheckedExceptionWithDetailMessage("This is the detail message.");
88
+ }
89
+
90
+ @Ignore("Remove to run test")
91
+ @Test
92
+ public void testThrowCustomUncheckedException() {
93
+ thrown.expect(CustomUncheckedException.class);
94
+ errorHandling.handleErrorByThrowingCustomUncheckedException();
95
+ }
96
+
97
+ @Ignore("Remove to run test")
98
+ @Test
99
+ public void testThrowCustomUncheckedExceptionWithDetailMessage() {
100
+ thrown.expect(CustomUncheckedException.class);
101
+ thrown.expectMessage("This is the detail message.");
102
+ errorHandling.handleErrorByThrowingCustomUncheckedExceptionWithDetailMessage("This is the detail message.");
103
+ }
104
+
105
+ @Ignore("Remove to run test")
106
+ @Test
107
+ public void testReturnOptionalInstance() {
108
+ Optional<Integer> successfulResult = errorHandling.handleErrorByReturningOptionalInstance("1");
109
+ assertTrue(successfulResult.isPresent());
110
+ assertEquals(1, (int) successfulResult.get());
111
+
112
+ Optional<Integer> failureResult = errorHandling.handleErrorByReturningOptionalInstance("a");
113
+ assertFalse(failureResult.isPresent());
114
+ }
115
+
116
+ }
@@ -1 +1 @@
1
- 1.1.0
1
+ 1.2.0
@@ -1 +1 @@
1
- 2.0.0
1
+ 2.1.0
@@ -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.
@@ -1 +1 @@
1
- 1.0.1
1
+ 1.1.0
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.1.0
@@ -24,6 +24,8 @@ include 'crypto-square'
24
24
  include 'custom-set'
25
25
  include 'diamond'
26
26
  include 'difference-of-squares'
27
+ include 'diffie-hellman'
28
+ include 'error-handling'
27
29
  include 'etl'
28
30
  include 'flatten-array'
29
31
  include 'food-chain'
@@ -92,6 +94,7 @@ include 'trinary'
92
94
  include 'twelve-days'
93
95
  include 'two-bucket'
94
96
  include 'two-fer'
97
+ include 'variable-length-quantity'
95
98
  include 'word-count'
96
99
  include 'word-search'
97
100
  include 'wordy'
@@ -0,0 +1,53 @@
1
+ import java.util.ArrayList;
2
+ import java.util.Collections;
3
+ import java.util.List;
4
+
5
+ class VariableLengthQuantity {
6
+
7
+ private long sevenBitsMask = 0x7f;
8
+ private long eightBitsMask = 0x80;
9
+
10
+ List<String> encodeSingleNumber(long number) {
11
+ List<String> bytes = new ArrayList<String>();
12
+ bytes.add("0x" + Long.toHexString(number & sevenBitsMask));
13
+ number >>= 7;
14
+
15
+ while (number > 0) {
16
+ bytes.add("0x" + Long.toHexString(number & sevenBitsMask | eightBitsMask));
17
+ number >>= 7;
18
+ }
19
+
20
+ Collections.reverse(bytes);
21
+ return bytes;
22
+ }
23
+
24
+ List<String> encode(List<Long> numbers) {
25
+ List<String> bytes = new ArrayList<String>();
26
+ for (long number : numbers) {
27
+ bytes.addAll(encodeSingleNumber(number));
28
+ }
29
+
30
+ return bytes;
31
+ }
32
+
33
+ List<String> decode(List<Long> bytes) {
34
+ List<String> numbers = new ArrayList<String>();
35
+ int i = 0;
36
+ long number = 0;
37
+
38
+ for (long b : bytes) {
39
+ number <<= 7;
40
+ number += b & sevenBitsMask;
41
+
42
+ if ((b & eightBitsMask) == 0) {
43
+ numbers.add("0x" + Long.toHexString(number));
44
+ number = 0;
45
+ i++;
46
+ } else if (i == bytes.size() - 1) {
47
+ throw new IllegalArgumentException("Invalid variable-length quantity encoding");
48
+ }
49
+ }
50
+
51
+ return numbers;
52
+ }
53
+ }
@@ -0,0 +1,50 @@
1
+ # Variable Length Quantity
2
+
3
+ Implement variable length quantity encoding and decoding.
4
+
5
+ The goal of this exercise is to implement [VLQ](https://en.wikipedia.org/wiki/Variable-length_quantity) encoding/decoding.
6
+
7
+ In short, the goal of this encoding is to encode integer values in a way that would save bytes.
8
+ Only the first 7 bits of each byte is significant (right-justified; sort of like an ASCII byte).
9
+ So, if you have a 32-bit value, you have to unpack it into a series of 7-bit bytes.
10
+ Of course, you will have a variable number of bytes depending upon your integer.
11
+ To indicate which is the last byte of the series, you leave bit #7 clear.
12
+ In all of the preceding bytes, you set bit #7.
13
+
14
+ So, if an integer is between `0-127`, it can be represented as one byte.
15
+ Although VLQ can deal with numbers of arbitrary sizes, for this exercise we will restrict ourselves to only numbers that fit in a 32-bit unsigned integer.
16
+ Here are examples of integers as 32-bit values, and the variable length quantities that they translate to:
17
+
18
+ ```text
19
+ NUMBER VARIABLE QUANTITY
20
+ 00000000 00
21
+ 00000040 40
22
+ 0000007F 7F
23
+ 00000080 81 00
24
+ 00002000 C0 00
25
+ 00003FFF FF 7F
26
+ 00004000 81 80 00
27
+ 00100000 C0 80 00
28
+ 001FFFFF FF FF 7F
29
+ 00200000 81 80 80 00
30
+ 08000000 C0 80 80 00
31
+ 0FFFFFFF FF FF FF 7F
32
+ ```
33
+
34
+ # Running the tests
35
+
36
+ You can run all the tests for an exercise by entering
37
+
38
+ ```sh
39
+ $ gradle test
40
+ ```
41
+
42
+ in your terminal.
43
+
44
+ ## Source
45
+
46
+ A poor Splice developer having to implement MIDI encoding/decoding. [https://splice.com](https://splice.com)
47
+
48
+ ## Submitting Incomplete Solutions
49
+
50
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,18 @@
1
+ apply plugin: "java"
2
+ apply plugin: "eclipse"
3
+ apply plugin: "idea"
4
+
5
+ repositories {
6
+ mavenCentral()
7
+ }
8
+
9
+ dependencies {
10
+ testCompile "junit:junit:4.12"
11
+ }
12
+
13
+ test {
14
+ testLogging {
15
+ exceptionFormat = 'full'
16
+ events = ["passed", "failed", "skipped"]
17
+ }
18
+ }
@@ -0,0 +1,12 @@
1
+ import java.util.List;
2
+
3
+ class VariableLengthQuantity {
4
+
5
+ List<String> encode(List<Long> numbers) {
6
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
7
+ }
8
+
9
+ List<String> decode(List<Long> bytes) {
10
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
11
+ }
12
+ }
@@ -0,0 +1,265 @@
1
+ import org.junit.Before;
2
+ import org.junit.Ignore;
3
+ import org.junit.Rule;
4
+ import org.junit.Test;
5
+ import org.junit.rules.ExpectedException;
6
+
7
+ import static org.junit.Assert.assertEquals;
8
+
9
+ import java.util.Arrays;
10
+ import java.util.List;
11
+
12
+ public class VariableLengthQuantityTest {
13
+ @Rule
14
+ public ExpectedException expectedException = ExpectedException.none();
15
+
16
+ private VariableLengthQuantity variableLengthQuantity;
17
+
18
+ @Before
19
+ public void setup() {
20
+ variableLengthQuantity = new VariableLengthQuantity();
21
+ }
22
+
23
+ @Test
24
+ public void testZero() {
25
+ List<String> expected = Arrays.asList("0x0");
26
+ List<Long> numbers = Arrays.asList(0x0L);
27
+
28
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
29
+ }
30
+
31
+ @Ignore("Remove to run test")
32
+ @Test
33
+ public void testArbitrarySingleByte() {
34
+ List<String> expected = Arrays.asList("0x40");
35
+ List<Long> numbers = Arrays.asList(0x40L);
36
+
37
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
38
+ }
39
+
40
+ @Ignore("Remove to run test")
41
+ @Test
42
+ public void testLargestSingleByte() {
43
+ List<String> expected = Arrays.asList("0x7f");
44
+ List<Long> numbers = Arrays.asList(0x7fL);
45
+
46
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
47
+ }
48
+
49
+ @Ignore("Remove to run test")
50
+ @Test
51
+ public void testSmallestDoubleByte() {
52
+ List<String> expected = Arrays.asList("0x81", "0x0");
53
+ List<Long> numbers = Arrays.asList(0x80L);
54
+
55
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
56
+ }
57
+
58
+ @Ignore("Remove to run test")
59
+ @Test
60
+ public void testArbitraryDoubleByte() {
61
+ List<String> expected = Arrays.asList("0xc0", "0x0");
62
+ List<Long> numbers = Arrays.asList(0x2000L);
63
+
64
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
65
+ }
66
+
67
+ @Ignore("Remove to run test")
68
+ @Test
69
+ public void testLargestDoubleByte() {
70
+ List<String> expected = Arrays.asList("0xff", "0x7f");
71
+ List<Long> numbers = Arrays.asList(0x3fffL);
72
+
73
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
74
+ }
75
+
76
+ @Ignore("Remove to run test")
77
+ @Test
78
+ public void testSmallestTripleByte() {
79
+ List<String> expected = Arrays.asList("0x81", "0x80", "0x0");
80
+ List<Long> numbers = Arrays.asList(0x4000L);
81
+
82
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
83
+ }
84
+
85
+ @Ignore("Remove to run test")
86
+ @Test
87
+ public void testArbitraryTripleByte() {
88
+ List<String> expected = Arrays.asList("0xc0", "0x80", "0x0");
89
+ List<Long> numbers = Arrays.asList(0x100000L);
90
+
91
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
92
+ }
93
+
94
+ @Ignore("Remove to run test")
95
+ @Test
96
+ public void testLargestTripleByte() {
97
+ List<String> expected = Arrays.asList("0xff", "0xff", "0x7f");
98
+ List<Long> numbers = Arrays.asList(0x1fffffL);
99
+
100
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
101
+ }
102
+
103
+ @Ignore("Remove to run test")
104
+ @Test
105
+ public void testSmallestQuadrupleByte() {
106
+ List<String> expected = Arrays.asList("0x81", "0x80", "0x80", "0x0");
107
+ List<Long> numbers = Arrays.asList(0x200000L);
108
+
109
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
110
+ }
111
+
112
+ @Ignore("Remove to run test")
113
+ @Test
114
+ public void testArbitraryQuadrupleByte() {
115
+ List<String> expected = Arrays.asList("0xc0", "0x80", "0x80", "0x0");
116
+ List<Long> numbers = Arrays.asList(0x8000000L);
117
+
118
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
119
+ }
120
+
121
+ @Ignore("Remove to run test")
122
+ @Test
123
+ public void testLargestQuadrupleByte() {
124
+ List<String> expected = Arrays.asList("0xff", "0xff", "0xff", "0x7f");
125
+ List<Long> numbers = Arrays.asList(0xfffffffL);
126
+
127
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
128
+ }
129
+
130
+ @Ignore("Remove to run test")
131
+ @Test
132
+ public void testSmallestQuintupleByte() {
133
+ List<String> expected = Arrays.asList("0x81", "0x80", "0x80", "0x80", "0x0");
134
+ List<Long> numbers = Arrays.asList(0x10000000L);
135
+
136
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
137
+ }
138
+
139
+ @Ignore("Remove to run test")
140
+ @Test
141
+ public void testArbitraryQuintupleByte() {
142
+ List<String> expected = Arrays.asList("0x8f", "0xf8", "0x80", "0x80", "0x0");
143
+ List<Long> numbers = Arrays.asList(0xff000000L);
144
+
145
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
146
+ }
147
+
148
+ @Ignore("Remove to run test")
149
+ @Test
150
+ public void testMaximum32BitIntegerInput() {
151
+ List<String> expected = Arrays.asList("0x8f", "0xff", "0xff", "0xff", "0x7f");
152
+ List<Long> numbers = Arrays.asList(0xffffffffL);
153
+
154
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
155
+ }
156
+
157
+ @Ignore("Remove to run test")
158
+ @Test
159
+ public void testTwoSingleByteValues() {
160
+ List<String> expected = Arrays.asList("0x40", "0x7f");
161
+ List<Long> numbers = Arrays.asList(0x40L, 0x7fL);
162
+
163
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
164
+ }
165
+
166
+ @Ignore("Remove to run test")
167
+ @Test
168
+ public void testTwoMultiByteValues() {
169
+ List<String> expected = Arrays.asList("0x81", "0x80", "0x0", "0xc8", "0xe8", "0x56");
170
+ List<Long> numbers = Arrays.asList(0x4000L, 0x123456L);
171
+
172
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
173
+ }
174
+
175
+ @Ignore("Remove to run test")
176
+ @Test
177
+ public void testManyMultiByteValues() {
178
+ List<String> expected = Arrays.asList("0xc0", "0x0", "0xc8", "0xe8",
179
+ "0x56", "0xff", "0xff", "0xff",
180
+ "0x7f", "0x0", "0xff", "0x7f",
181
+ "0x81", "0x80", "0x0");
182
+ List<Long> numbers = Arrays.asList(0x2000L, 0x123456L, 0xfffffffL,
183
+ 0x0L, 0x3fffL, 0x4000L);
184
+
185
+ assertEquals(expected, variableLengthQuantity.encode(numbers));
186
+ }
187
+
188
+ @Ignore("Remove to run test")
189
+ @Test
190
+ public void testDecodeOneByte() {
191
+ List<String> expected = Arrays.asList("0x7f");
192
+ List<Long> bytes = Arrays.asList(0x7fL);
193
+
194
+ assertEquals(expected, variableLengthQuantity.decode(bytes));
195
+ }
196
+
197
+ @Ignore("Remove to run test")
198
+ @Test
199
+ public void testDecodeTwoBytes() {
200
+ List<String> expected = Arrays.asList("0x2000");
201
+ List<Long> bytes = Arrays.asList(0xc0L, 0x0L);
202
+
203
+ assertEquals(expected, variableLengthQuantity.decode(bytes));
204
+ }
205
+
206
+ @Ignore("Remove to run test")
207
+ @Test
208
+ public void testDecodeThreeBytes() {
209
+ List<String> expected = Arrays.asList("0x1fffff");
210
+ List<Long> bytes = Arrays.asList(0xffL, 0xffL, 0x7fL);
211
+
212
+ assertEquals(expected, variableLengthQuantity.decode(bytes));
213
+ }
214
+
215
+ @Ignore("Remove to run test")
216
+ @Test
217
+ public void testDecodeFourBytes() {
218
+ List<String> expected = Arrays.asList("0x200000");
219
+ List<Long> bytes = Arrays.asList(0x81L, 0x80L, 0x80L, 0x0L);
220
+
221
+ assertEquals(expected, variableLengthQuantity.decode(bytes));
222
+ }
223
+
224
+ @Ignore("Remove to run test")
225
+ @Test
226
+ public void testDecodeMaximum32BitInteger() {
227
+ List<String> expected = Arrays.asList("0xffffffff");
228
+ List<Long> bytes = Arrays.asList(0x8fL, 0xffL, 0xffL, 0xffL, 0x7fL);
229
+
230
+ assertEquals(expected, variableLengthQuantity.decode(bytes));
231
+ }
232
+
233
+ @Ignore("Remove to run test")
234
+ @Test
235
+ public void testCannotDecodeIncompleteSequence() {
236
+ List<Long> bytes = Arrays.asList(0xffL);
237
+ expectedException.expect(IllegalArgumentException.class);
238
+ expectedException.expectMessage("Invalid variable-length quantity encoding");
239
+
240
+ variableLengthQuantity.decode(bytes);
241
+ }
242
+
243
+ @Ignore("Remove to run test")
244
+ @Test
245
+ public void testCannotDecodeIncompleteSequenceEvenIfValueIsZero() {
246
+ List<Long> bytes = Arrays.asList(0x80L);
247
+ expectedException.expect(IllegalArgumentException.class);
248
+ expectedException.expectMessage("Invalid variable-length quantity encoding");
249
+
250
+ variableLengthQuantity.decode(bytes);
251
+ }
252
+
253
+ @Ignore("Remove to run test")
254
+ @Test
255
+ public void testDecodeMultipleBytes() {
256
+ List<String> expected = Arrays.asList("0x2000", "0x123456",
257
+ "0xfffffff", "0x0", "0x3fff",
258
+ "0x4000");
259
+ List<Long> bytes = Arrays.asList(0xc0L, 0x0L, 0xc8L, 0xe8L, 0x56L,
260
+ 0xffL, 0xffL, 0xffL, 0x7fL, 0x0L,
261
+ 0xffL, 0x7fL, 0x81L, 0x80L, 0x0L);
262
+
263
+ assertEquals(expected, variableLengthQuantity.decode(bytes));
264
+ }
265
+ }