trackler 2.0.6.28 → 2.0.6.29

Sign up to get free protection for your applications and to get access to all the features.
Files changed (323) hide show
  1. checksums.yaml +4 -4
  2. data/common/exercises/all-your-base/metadata.yml +1 -1
  3. data/common/exercises/allergies/metadata.yml +1 -1
  4. data/common/exercises/anagram/metadata.yml +1 -1
  5. data/common/exercises/beer-song/metadata.yml +1 -1
  6. data/common/exercises/binary-search-tree/metadata.yml +1 -1
  7. data/common/exercises/binary-search/metadata.yml +1 -1
  8. data/common/exercises/binary/metadata.yml +1 -1
  9. data/common/exercises/change/description.md +3 -3
  10. data/common/exercises/change/metadata.yml +1 -1
  11. data/common/exercises/crypto-square/description.md +1 -2
  12. data/common/exercises/etl/description.md +2 -2
  13. data/common/exercises/flatten-array/metadata.yml +1 -1
  14. data/common/exercises/food-chain/description.md +4 -5
  15. data/common/exercises/food-chain/metadata.yml +1 -1
  16. data/common/exercises/gigasecond/metadata.yml +1 -1
  17. data/common/exercises/grade-school/metadata.yml +1 -1
  18. data/common/exercises/grains/description.md +1 -1
  19. data/common/exercises/grains/metadata.yml +1 -1
  20. data/common/exercises/hamming/metadata.yml +1 -1
  21. data/common/exercises/hello-world/metadata.yml +1 -1
  22. data/common/exercises/hexadecimal/metadata.yml +1 -1
  23. data/common/exercises/house/metadata.yml +1 -1
  24. data/common/exercises/kindergarten-garden/metadata.yml +1 -1
  25. data/common/exercises/largest-series-product/metadata.yml +1 -1
  26. data/common/exercises/leap/metadata.yml +1 -1
  27. data/common/exercises/luhn/description.md +1 -1
  28. data/common/exercises/luhn/metadata.yml +1 -1
  29. data/common/exercises/matrix/metadata.yml +1 -1
  30. data/common/exercises/minesweeper/metadata.yml +1 -1
  31. data/common/exercises/nth-prime/metadata.yml +1 -1
  32. data/common/exercises/ocr-numbers/metadata.yml +1 -1
  33. data/common/exercises/octal/metadata.yml +1 -1
  34. data/common/exercises/paasio/metadata.yml +1 -1
  35. data/common/exercises/palindrome-products/description.md +30 -2
  36. data/common/exercises/palindrome-products/metadata.yml +1 -1
  37. data/common/exercises/parallel-letter-frequency/metadata.yml +1 -1
  38. data/common/exercises/pascals-triangle/metadata.yml +1 -1
  39. data/common/exercises/phone-number/metadata.yml +1 -1
  40. data/common/exercises/point-mutations/metadata.yml +1 -1
  41. data/common/exercises/protein-translation/description.md +1 -1
  42. data/common/exercises/protein-translation/metadata.yml +1 -1
  43. data/common/exercises/proverb/metadata.yml +1 -1
  44. data/common/exercises/queen-attack/metadata.yml +1 -1
  45. data/common/exercises/raindrops/metadata.yml +1 -1
  46. data/common/exercises/rna-transcription/metadata.yml +1 -1
  47. data/common/exercises/robot-name/metadata.yml +1 -1
  48. data/common/exercises/saddle-points/metadata.yml +1 -1
  49. data/common/exercises/say/metadata.yml +1 -1
  50. data/common/exercises/scale-generator/description.md +3 -4
  51. data/common/exercises/scale-generator/metadata.yml +1 -1
  52. data/common/exercises/scrabble-score/metadata.yml +1 -1
  53. data/common/exercises/secret-handshake/metadata.yml +1 -1
  54. data/common/exercises/series/metadata.yml +1 -1
  55. data/common/exercises/sieve/metadata.yml +1 -1
  56. data/common/exercises/space-age/metadata.yml +1 -1
  57. data/common/exercises/sum-of-multiples/description.md +2 -2
  58. data/common/exercises/sum-of-multiples/metadata.yml +1 -1
  59. data/common/exercises/transpose/description.md +1 -1
  60. data/common/exercises/transpose/metadata.yml +1 -1
  61. data/common/exercises/triangle/metadata.yml +1 -1
  62. data/common/exercises/trinary/metadata.yml +1 -1
  63. data/common/exercises/twelve-days/metadata.yml +1 -1
  64. data/common/exercises/two-bucket/description.md +1 -1
  65. data/common/exercises/two-bucket/metadata.yml +1 -1
  66. data/common/exercises/word-count/metadata.yml +1 -1
  67. data/common/exercises/zebra-puzzle/metadata.yml +1 -1
  68. data/lib/trackler/version.rb +1 -1
  69. data/tracks/erlang/.gitignore +2 -0
  70. data/tracks/erlang/.travis.yml +8 -4
  71. data/tracks/erlang/Makefile +16 -0
  72. data/tracks/erlang/README.md +77 -1
  73. data/tracks/erlang/_test/bootstrap.sh +17 -4
  74. data/tracks/erlang/_test/check-exercises.escript +64 -24
  75. data/tracks/erlang/config.json +63 -63
  76. data/tracks/erlang/docs/INSTALLATION.md +18 -0
  77. data/tracks/erlang/docs/TESTS.md +1 -3
  78. data/tracks/erlang/exercises/accumulate/include/exercism.hrl +6 -0
  79. data/tracks/erlang/exercises/accumulate/rebar.conf +30 -0
  80. data/tracks/erlang/exercises/accumulate/src/accumulate.app.src +9 -0
  81. data/tracks/erlang/exercises/accumulate/{example.erl → src/example.erl} +3 -2
  82. data/tracks/erlang/exercises/accumulate/test/accumulate_tests.erl +27 -0
  83. data/tracks/erlang/exercises/allergies/include/exercism.hrl +6 -0
  84. data/tracks/erlang/exercises/allergies/rebar.conf +30 -0
  85. data/tracks/erlang/exercises/allergies/src/allergies.app.src +9 -0
  86. data/tracks/erlang/exercises/allergies/{example.erl → src/example.erl} +9 -10
  87. data/tracks/erlang/exercises/allergies/{allergies_tests.erl → test/allergies_tests.erl} +17 -20
  88. data/tracks/erlang/exercises/anagram/include/exercism.hrl +6 -0
  89. data/tracks/erlang/exercises/anagram/rebar.conf +32 -0
  90. data/tracks/erlang/exercises/anagram/src/anagram.app.src +9 -0
  91. data/tracks/erlang/exercises/anagram/{example.erl → src/example.erl} +2 -1
  92. data/tracks/erlang/exercises/anagram/test/anagram_tests.erl +43 -0
  93. data/tracks/erlang/exercises/atbash-cipher/include/exercism.hrl +6 -0
  94. data/tracks/erlang/exercises/atbash-cipher/rebar.conf +30 -0
  95. data/tracks/erlang/exercises/atbash-cipher/src/atbash_cipher.app.src +9 -0
  96. data/tracks/erlang/exercises/atbash-cipher/{example.erl → src/example.erl} +1 -1
  97. data/tracks/erlang/exercises/atbash-cipher/{atbash_cipher_tests.erl → test/atbash_cipher_tests.erl} +6 -2
  98. data/tracks/erlang/exercises/bank-account/include/exercism.hrl +6 -0
  99. data/tracks/erlang/exercises/bank-account/rebar.conf +30 -0
  100. data/tracks/erlang/exercises/bank-account/src/bank_account.app.src +9 -0
  101. data/tracks/erlang/exercises/bank-account/{example.erl → src/example.erl} +1 -1
  102. data/tracks/erlang/exercises/bank-account/test/bank_account_tests.erl +98 -0
  103. data/tracks/erlang/exercises/beer-song/include/exercism.hrl +6 -0
  104. data/tracks/erlang/exercises/beer-song/rebar.conf +30 -0
  105. data/tracks/erlang/exercises/beer-song/src/beer_song.app.src +9 -0
  106. data/tracks/erlang/exercises/beer-song/{example.erl → src/example.erl} +1 -1
  107. data/tracks/erlang/exercises/beer-song/{beer_song_tests.erl → test/beer_song_tests.erl} +9 -9
  108. data/tracks/erlang/exercises/binary/include/exercism.hrl +6 -0
  109. data/tracks/erlang/exercises/binary/rebar.conf +30 -0
  110. data/tracks/erlang/exercises/binary/src/binary.app.src +9 -0
  111. data/tracks/erlang/exercises/binary/{example.erl → src/example.erl} +1 -1
  112. data/tracks/erlang/exercises/binary/{binary_string_tests.erl → test/binary_string_tests.erl} +7 -3
  113. data/tracks/erlang/exercises/bob/include/exercism.hrl +6 -0
  114. data/tracks/erlang/exercises/bob/rebar.conf +30 -0
  115. data/tracks/erlang/exercises/bob/src/bob.app.src +9 -0
  116. data/tracks/erlang/exercises/bob/{example.erl → src/example.erl} +1 -1
  117. data/tracks/erlang/exercises/bob/{bob_tests.erl → test/bob_tests.erl} +4 -4
  118. data/tracks/erlang/exercises/circular-buffer/include/exercism.hrl +6 -0
  119. data/tracks/erlang/exercises/circular-buffer/rebar.conf +30 -0
  120. data/tracks/erlang/exercises/circular-buffer/src/circular_buffer.app.src +9 -0
  121. data/tracks/erlang/exercises/circular-buffer/{example.erl → src/example.erl} +1 -34
  122. data/tracks/erlang/exercises/circular-buffer/test/circular_buffer_tests.erl +58 -0
  123. data/tracks/erlang/exercises/clock/include/exercism.hrl +6 -0
  124. data/tracks/erlang/exercises/clock/rebar.conf +30 -0
  125. data/tracks/erlang/exercises/clock/src/clock.app.src +9 -0
  126. data/tracks/erlang/exercises/clock/{example.erl → src/example.erl} +1 -1
  127. data/tracks/erlang/exercises/clock/{clock_tests.erl → test/clock_tests.erl} +51 -48
  128. data/tracks/erlang/exercises/difference-of-squares/include/exercism.hrl +6 -0
  129. data/tracks/erlang/exercises/difference-of-squares/rebar.conf +30 -0
  130. data/tracks/erlang/exercises/difference-of-squares/src/difference_of_squares.app.src +9 -0
  131. data/tracks/erlang/exercises/difference-of-squares/{example.erl → src/example.erl} +1 -1
  132. data/tracks/erlang/exercises/difference-of-squares/{difference_of_squares_tests.erl → test/difference_of_squares_tests.erl} +7 -3
  133. data/tracks/erlang/exercises/etl/include/exercism.hrl +6 -0
  134. data/tracks/erlang/exercises/etl/rebar.conf +30 -0
  135. data/tracks/erlang/exercises/etl/src/etl.app.src +9 -0
  136. data/tracks/erlang/exercises/etl/{example.erl → src/example.erl} +1 -2
  137. data/tracks/erlang/exercises/etl/{etl_tests.erl → test/etl_tests.erl} +3 -4
  138. data/tracks/erlang/exercises/gigasecond/include/exercism.hrl +6 -0
  139. data/tracks/erlang/exercises/gigasecond/rebar.conf +30 -0
  140. data/tracks/erlang/exercises/gigasecond/{example.erl → src/example.erl} +1 -2
  141. data/tracks/erlang/exercises/gigasecond/src/gigasecond.app.src +9 -0
  142. data/tracks/erlang/exercises/gigasecond/test/gigasecond_tests.erl +22 -0
  143. data/tracks/erlang/exercises/grade-school/include/exercism.hrl +6 -0
  144. data/tracks/erlang/exercises/grade-school/rebar.conf +30 -0
  145. data/tracks/erlang/exercises/grade-school/{example.erl → src/example.erl} +1 -1
  146. data/tracks/erlang/exercises/grade-school/src/grade_school.app.src +9 -0
  147. data/tracks/erlang/exercises/grade-school/test/grade_school_tests.erl +47 -0
  148. data/tracks/erlang/exercises/grains/include/exercism.hrl +6 -0
  149. data/tracks/erlang/exercises/grains/rebar.conf +30 -0
  150. data/tracks/erlang/exercises/grains/{example.erl → src/example.erl} +1 -2
  151. data/tracks/erlang/exercises/grains/src/grains.app.src +9 -0
  152. data/tracks/erlang/exercises/grains/test/grains_tests.erl +32 -0
  153. data/tracks/erlang/exercises/hamming/include/exercism.hrl +6 -0
  154. data/tracks/erlang/exercises/hamming/rebar.conf +30 -0
  155. data/tracks/erlang/exercises/hamming/{example.erl → src/example.erl} +1 -1
  156. data/tracks/erlang/exercises/hamming/src/hamming.app.src +9 -0
  157. data/tracks/erlang/exercises/hamming/test/hamming_tests.erl +24 -0
  158. data/tracks/erlang/exercises/hello-world/include/exercism.hrl +6 -0
  159. data/tracks/erlang/exercises/hello-world/rebar.conf +30 -0
  160. data/tracks/erlang/exercises/hello-world/{example.erl → src/example.erl} +1 -1
  161. data/tracks/erlang/exercises/hello-world/src/hello_world.app.src +9 -0
  162. data/tracks/erlang/exercises/hello-world/test/hello_world_tests.erl +18 -0
  163. data/tracks/erlang/exercises/largest-series-product/include/exercism.hrl +6 -0
  164. data/tracks/erlang/exercises/largest-series-product/rebar.conf +30 -0
  165. data/tracks/erlang/exercises/largest-series-product/{example.erl → src/example.erl} +1 -1
  166. data/tracks/erlang/exercises/largest-series-product/src/largest_series_product.app.src +9 -0
  167. data/tracks/erlang/exercises/largest-series-product/test/largest_series_product_tests.erl +57 -0
  168. data/tracks/erlang/exercises/leap/include/exercism.hrl +6 -0
  169. data/tracks/erlang/exercises/leap/rebar.conf +30 -0
  170. data/tracks/erlang/exercises/leap/{example.erl → src/example.erl} +1 -1
  171. data/tracks/erlang/exercises/leap/src/leap.app.src +9 -0
  172. data/tracks/erlang/exercises/leap/test/leap_tests.erl +18 -0
  173. data/tracks/erlang/exercises/luhn/include/exercism.hrl +6 -0
  174. data/tracks/erlang/exercises/luhn/rebar.conf +30 -0
  175. data/tracks/erlang/exercises/luhn/{example.erl → src/example.erl} +1 -1
  176. data/tracks/erlang/exercises/luhn/src/luhn.app.src +9 -0
  177. data/tracks/erlang/exercises/luhn/test/luhn_tests.erl +18 -0
  178. data/tracks/erlang/exercises/meetup/include/exercism.hrl +6 -0
  179. data/tracks/erlang/exercises/meetup/rebar.conf +30 -0
  180. data/tracks/erlang/exercises/meetup/{example.erl → src/example.erl} +1 -2
  181. data/tracks/erlang/exercises/meetup/src/meetup.app.src +9 -0
  182. data/tracks/erlang/exercises/meetup/{meetup_tests.erl → test/meetup_tests.erl} +94 -95
  183. data/tracks/erlang/exercises/nucleotide-count/include/exercism.hrl +6 -0
  184. data/tracks/erlang/exercises/nucleotide-count/rebar.conf +30 -0
  185. data/tracks/erlang/exercises/nucleotide-count/{example.erl → src/example.erl} +1 -1
  186. data/tracks/erlang/exercises/nucleotide-count/src/nucleotide_count.app.src +9 -0
  187. data/tracks/erlang/exercises/nucleotide-count/test/dna_tests.erl +30 -0
  188. data/tracks/erlang/exercises/parallel-letter-frequency/include/exercism.hrl +6 -0
  189. data/tracks/erlang/exercises/parallel-letter-frequency/rebar.conf +30 -0
  190. data/tracks/erlang/exercises/parallel-letter-frequency/{example.erl → src/example.erl} +1 -1
  191. data/tracks/erlang/exercises/parallel-letter-frequency/src/parallel_letter_frequency.app.src +9 -0
  192. data/tracks/erlang/exercises/parallel-letter-frequency/{parallel_letter_frequency_tests.erl → test/parallel_letter_frequency_tests.erl} +6 -2
  193. data/tracks/erlang/exercises/phone-number/include/exercism.hrl +6 -0
  194. data/tracks/erlang/exercises/phone-number/rebar.conf +30 -0
  195. data/tracks/erlang/exercises/phone-number/{example.erl → src/example.erl} +1 -1
  196. data/tracks/erlang/exercises/phone-number/src/phone_number.app.src +9 -0
  197. data/tracks/erlang/exercises/phone-number/test/phone_tests.erl +28 -0
  198. data/tracks/erlang/exercises/rna-transcription/include/exercism.hrl +6 -0
  199. data/tracks/erlang/exercises/rna-transcription/rebar.conf +30 -0
  200. data/tracks/erlang/exercises/rna-transcription/{example.erl → src/example.erl} +1 -1
  201. data/tracks/erlang/exercises/rna-transcription/src/rna_transcription.app.src +9 -0
  202. data/tracks/erlang/exercises/rna-transcription/test/rna_transcription_tests.erl +24 -0
  203. data/tracks/erlang/exercises/robot-simulator/include/exercism.hrl +6 -0
  204. data/tracks/erlang/exercises/robot-simulator/rebar.conf +30 -0
  205. data/tracks/erlang/exercises/robot-simulator/{example.erl → src/example.erl} +1 -1
  206. data/tracks/erlang/exercises/robot-simulator/src/robot_simulator.app.src +9 -0
  207. data/tracks/erlang/exercises/robot-simulator/test/robot_simulator_tests.erl +100 -0
  208. data/tracks/erlang/exercises/roman-numerals/include/exercism.hrl +6 -0
  209. data/tracks/erlang/exercises/roman-numerals/rebar.conf +30 -0
  210. data/tracks/erlang/exercises/roman-numerals/{example.erl → src/example.erl} +1 -1
  211. data/tracks/erlang/exercises/roman-numerals/src/roman_numerals.app.src +9 -0
  212. data/tracks/erlang/exercises/roman-numerals/{roman_numerals_tests.erl → test/roman_numerals_tests.erl} +3 -4
  213. data/tracks/erlang/exercises/scrabble-score/include/exercism.hrl +6 -0
  214. data/tracks/erlang/exercises/scrabble-score/rebar.conf +30 -0
  215. data/tracks/erlang/exercises/scrabble-score/{example.erl → src/example.erl} +2 -2
  216. data/tracks/erlang/exercises/scrabble-score/src/scrabble_score.app.src +9 -0
  217. data/tracks/erlang/exercises/scrabble-score/{scrabble_score_tests.erl → test/scrabble_score_tests.erl} +5 -1
  218. data/tracks/erlang/exercises/series/include/exercism.hrl +6 -0
  219. data/tracks/erlang/exercises/series/rebar.conf +30 -0
  220. data/tracks/erlang/exercises/series/{example.erl → src/example.erl} +1 -1
  221. data/tracks/erlang/exercises/series/src/series.app.src +9 -0
  222. data/tracks/erlang/exercises/series/test/series_tests.erl +10 -0
  223. data/tracks/erlang/exercises/space-age/include/exercism.hrl +6 -0
  224. data/tracks/erlang/exercises/space-age/rebar.conf +30 -0
  225. data/tracks/erlang/exercises/space-age/{example.erl → src/example.erl} +1 -1
  226. data/tracks/erlang/exercises/space-age/src/space_age.app.src +9 -0
  227. data/tracks/erlang/exercises/space-age/test/space_age_tests.erl +51 -0
  228. data/tracks/erlang/exercises/strain/include/exercism.hrl +6 -0
  229. data/tracks/erlang/exercises/strain/rebar.conf +30 -0
  230. data/tracks/erlang/exercises/strain/{example.erl → src/example.erl} +1 -1
  231. data/tracks/erlang/exercises/strain/src/strain.app.src +9 -0
  232. data/tracks/erlang/exercises/strain/test/strain_tests.erl +52 -0
  233. data/tracks/erlang/exercises/sum-of-multiples/include/exercism.hrl +6 -0
  234. data/tracks/erlang/exercises/sum-of-multiples/rebar.conf +30 -0
  235. data/tracks/erlang/exercises/sum-of-multiples/{example.erl → src/example.erl} +1 -1
  236. data/tracks/erlang/exercises/sum-of-multiples/src/sum_of_multiples.app.src +9 -0
  237. data/tracks/erlang/exercises/sum-of-multiples/test/sum_of_multiples_tests.erl +39 -0
  238. data/tracks/erlang/exercises/triangle/include/exercism.hrl +6 -0
  239. data/tracks/erlang/exercises/triangle/rebar.conf +30 -0
  240. data/tracks/erlang/exercises/triangle/{example.erl → src/example.erl} +1 -1
  241. data/tracks/erlang/exercises/triangle/src/triangle.app.src +9 -0
  242. data/tracks/erlang/exercises/triangle/{triangle_tests.erl → test/triangle_tests.erl} +19 -18
  243. data/tracks/erlang/exercises/trinary/include/exercism.hrl +6 -0
  244. data/tracks/erlang/exercises/trinary/rebar.conf +30 -0
  245. data/tracks/erlang/exercises/trinary/{example.erl → src/example.erl} +1 -2
  246. data/tracks/erlang/exercises/trinary/src/trinary.app.src +9 -0
  247. data/tracks/erlang/exercises/trinary/test/trinary_tests.erl +36 -0
  248. data/tracks/erlang/exercises/word-count/include/exercism.hrl +6 -0
  249. data/tracks/erlang/exercises/word-count/rebar.conf +30 -0
  250. data/tracks/erlang/exercises/word-count/{example.erl → src/example.erl} +1 -1
  251. data/tracks/erlang/exercises/word-count/src/word_count.app.src +9 -0
  252. data/tracks/erlang/exercises/word-count/{word_count_tests.erl → test/word_count_tests.erl} +4 -2
  253. data/tracks/erlang/exercises/zipper/include/exercism.hrl +6 -0
  254. data/tracks/erlang/exercises/zipper/rebar.conf +30 -0
  255. data/tracks/erlang/exercises/zipper/{example.erl → src/example.erl} +1 -1
  256. data/tracks/erlang/exercises/zipper/src/zipper.app.src +9 -0
  257. data/tracks/erlang/exercises/zipper/test/zipper_tests.erl +100 -0
  258. data/tracks/go/config.json +14 -4
  259. data/tracks/go/exercises/acronym/acronym_test.go +1 -1
  260. data/tracks/go/exercises/all-your-base/all_your_base_test.go +8 -8
  261. data/tracks/go/exercises/luhn/luhn_test.go +6 -6
  262. data/tracks/go/exercises/word-search/word_search_test.go +4 -1
  263. data/tracks/go/exercises/wordy/example.go +2 -0
  264. data/tracks/go/exercises/wordy/wordy_test.go +8 -0
  265. data/tracks/haskell/.travis.yml +3 -57
  266. data/tracks/haskell/README.md +13 -10
  267. data/tracks/haskell/bin/test-all-examples +20 -0
  268. data/tracks/haskell/bin/test-example +73 -0
  269. data/tracks/haskell/bin/test-stub +43 -0
  270. data/tracks/haskell/config.json +0 -1
  271. data/tracks/haskell/exercises/accumulate/examples/fail-reverse/package.yaml +16 -0
  272. data/tracks/haskell/exercises/accumulate/examples/fail-reverse/src/Accumulate.hs +7 -0
  273. data/tracks/haskell/exercises/accumulate/examples/success-standard/src/Accumulate.hs +0 -7
  274. data/tracks/haskell/exercises/atbash-cipher/test/Tests.hs +1 -5
  275. data/tracks/haskell/exercises/forth/test/Tests.hs +1 -4
  276. data/tracks/haskell/exercises/leap/examples/error-nosig/package.yaml +16 -0
  277. data/tracks/haskell/exercises/leap/examples/error-nosig/src/LeapYear.hs +4 -0
  278. data/tracks/haskell/exercises/nucleotide-count/examples/success-standard/src/DNA.hs +2 -5
  279. data/tracks/haskell/exercises/nucleotide-count/src/DNA.hs +1 -4
  280. data/tracks/haskell/exercises/nucleotide-count/test/Tests.hs +3 -22
  281. data/tracks/haskell/exercises/prime-factors/test/Tests.hs +9 -15
  282. data/tracks/haskell/exercises/scrabble-score/test/Tests.hs +1 -5
  283. data/tracks/haskell/exercises/secret-handshake/examples/success-standard/src/SecretHandshake.hs +3 -21
  284. data/tracks/haskell/exercises/secret-handshake/src/SecretHandshake.hs +1 -0
  285. data/tracks/haskell/exercises/secret-handshake/test/Tests.hs +20 -23
  286. data/tracks/haskell/exercises/strain/examples/fail-reverse/package.yaml +16 -0
  287. data/tracks/haskell/exercises/strain/examples/fail-reverse/src/Strain.hs +9 -0
  288. data/tracks/haskell/exercises/triangle/test/Tests.hs +6 -1
  289. data/tracks/julia/config.json +20 -2
  290. data/tracks/julia/exercises/raindrops/example.jl +16 -0
  291. data/tracks/julia/exercises/raindrops/raindrops.jl +3 -0
  292. data/tracks/julia/exercises/raindrops/runtests.jl +72 -0
  293. data/tracks/julia/exercises/secret-handshake/example.jl +12 -0
  294. data/tracks/julia/exercises/secret-handshake/runtests.jl +51 -0
  295. data/tracks/julia/exercises/secret-handshake/secret-handshake.jl +3 -0
  296. metadata +198 -79
  297. data/tracks/erlang/exercises/accumulate/accumulate_tests.erl +0 -28
  298. data/tracks/erlang/exercises/anagram/anagram_tests.erl +0 -39
  299. data/tracks/erlang/exercises/bank-account/bank_account_tests.erl +0 -95
  300. data/tracks/erlang/exercises/circular-buffer/circular_buffer_tests.erl +0 -54
  301. data/tracks/erlang/exercises/clock/clock.erl +0 -14
  302. data/tracks/erlang/exercises/gigasecond/gigasecond_tests.erl +0 -29
  303. data/tracks/erlang/exercises/grade-school/grade_school_tests.erl +0 -49
  304. data/tracks/erlang/exercises/grains/grains_tests.erl +0 -31
  305. data/tracks/erlang/exercises/hamming/dna_tests.erl +0 -21
  306. data/tracks/erlang/exercises/hello-world/hello_world_tests.erl +0 -19
  307. data/tracks/erlang/exercises/largest-series-product/largest_series_product.erl +0 -5
  308. data/tracks/erlang/exercises/largest-series-product/largest_series_product_tests.erl +0 -54
  309. data/tracks/erlang/exercises/leap/leap_tests.erl +0 -20
  310. data/tracks/erlang/exercises/luhn/luhn_tests.erl +0 -19
  311. data/tracks/erlang/exercises/nucleotide-count/dna_tests.erl +0 -27
  312. data/tracks/erlang/exercises/phone-number/phone_tests.erl +0 -29
  313. data/tracks/erlang/exercises/rna-transcription/rna_transcription_tests.erl +0 -24
  314. data/tracks/erlang/exercises/robot-simulator/robot_simulator_tests.erl +0 -96
  315. data/tracks/erlang/exercises/roman-numerals/roman_numerals.erl +0 -6
  316. data/tracks/erlang/exercises/series/series_tests.erl +0 -6
  317. data/tracks/erlang/exercises/space-age/space_age_tests.erl +0 -48
  318. data/tracks/erlang/exercises/strain/strain_tests.erl +0 -49
  319. data/tracks/erlang/exercises/sum-of-multiples/sum_of_multiples_tests.erl +0 -37
  320. data/tracks/erlang/exercises/trinary/trinary_tests.erl +0 -37
  321. data/tracks/erlang/exercises/zipper/zipper_tests.erl +0 -103
  322. data/tracks/haskell/exercises/secret-handshake/.meta/DONT-TEST-STUB +0 -1
  323. data/tracks/haskell/exercises/secret-handshake/HINTS.md +0 -6
@@ -146,7 +146,6 @@
146
146
  "slug": "secret-handshake",
147
147
  "difficulty": 3,
148
148
  "topics": [
149
- "instance custom"
150
149
  ]
151
150
  },
152
151
  {
@@ -0,0 +1,16 @@
1
+ name: accumulate
2
+
3
+ dependencies:
4
+ - base
5
+
6
+ library:
7
+ exposed-modules: Accumulate
8
+ source-dirs: src
9
+
10
+ tests:
11
+ test:
12
+ main: Tests.hs
13
+ source-dirs: test
14
+ dependencies:
15
+ - accumulate
16
+ - hspec
@@ -0,0 +1,7 @@
1
+ module Accumulate (accumulate) where
2
+
3
+ accumulate :: (a -> b) -> [a] -> [b]
4
+ accumulate f = accumulate' []
5
+ where
6
+ accumulate' acc [] = reverse acc
7
+ accumulate' acc (x:xs) = accumulate' (f x : acc) xs
@@ -12,11 +12,4 @@ accumulate f = foldr ((:) . f) []
12
12
 
13
13
  accumulate f xs = [f x | x <- xs]
14
14
 
15
- -- Commonly submitted inefficient solution (we test for this now):
16
-
17
- accumulate f = accumulate' []
18
- where
19
- accumulate' acc [] = reverse acc
20
- accumulate' acc (x:xs) = accumulate' (f x : acc) xs
21
-
22
15
  -}
@@ -16,7 +16,7 @@ specs = describe "atbash-cipher" $ do
16
16
  where
17
17
  test f Case{..} = it description $ f phrase `shouldBe` expected
18
18
 
19
- -- Test cases adapted from `exercism/x-common/atbash-cipher.json` on 2016-08-02.
19
+ -- Test cases adapted from `exercism/x-common/atbash-cipher.json` on 2017-02-01.
20
20
 
21
21
  data Case = Case { description :: String
22
22
  , phrase :: String
@@ -57,10 +57,6 @@ encodeCases =
57
57
  , phrase = "The quick brown fox jumps over the lazy dog."
58
58
  , expected = "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt"
59
59
  }
60
- , Case { description = "encode ignores non ascii"
61
- , phrase = "non ascii éignored"
62
- , expected = "mlmzh xrrrt mlivw"
63
- }
64
60
  ]
65
61
 
66
62
  decodeCases :: [Case]
@@ -12,7 +12,7 @@ main = hspecWith defaultConfig {configFastFail = True} specs
12
12
  specs :: Spec
13
13
  specs = describe "forth" $ do
14
14
 
15
- -- Test cases adapted from `exercism/x-common/forth` on 2016-11-06.
15
+ -- Test cases adapted from `exercism/x-common/forth` on 2017-02-01.
16
16
 
17
17
  let runTexts = fmap toList . foldM (flip evalText) empty
18
18
 
@@ -123,9 +123,6 @@ specs = describe "forth" $ do
123
123
  runTexts [ ": swap dup ;"
124
124
  , "1 swap" ] `shouldBe` Right [1, 1]
125
125
 
126
- it "can consist of arbitrary characters such as Unicode characters" $
127
- runTexts [": € 220371 ; €"] `shouldBe` Right [220371]
128
-
129
126
  it "cannot redefine numbers" $
130
127
  runTexts [": 1 2 ;"] `shouldBe` Left InvalidWord
131
128
 
@@ -0,0 +1,16 @@
1
+ name: leap
2
+
3
+ dependencies:
4
+ - base
5
+
6
+ library:
7
+ exposed-modules: LeapYear
8
+ source-dirs: src
9
+
10
+ tests:
11
+ test:
12
+ main: Tests.hs
13
+ source-dirs: test
14
+ dependencies:
15
+ - leap
16
+ - hspec
@@ -0,0 +1,4 @@
1
+ module LeapYear (isLeapYear) where
2
+
3
+ isLeapYear year = hasFactor 4 && (not (hasFactor 100) || hasFactor 400)
4
+ where hasFactor n = year `rem` n == 0
@@ -1,9 +1,6 @@
1
- module DNA (count, nucleotideCounts) where
1
+ module DNA (nucleotideCounts) where
2
2
 
3
- import Data.Map.Strict (Map, (!), fromDistinctAscList, fromListWith, findWithDefault)
4
-
5
- count :: Char -> String -> Either String Int
6
- count x xs = (!) <$> nucleotideCounts xs <*> valid x
3
+ import Data.Map.Strict (Map, fromDistinctAscList, fromListWith, findWithDefault)
7
4
 
8
5
  nucleotideCounts :: String -> Either String (Map Char Int)
9
6
  nucleotideCounts xs = fromDistinctAscList <$> mapM count' "ACGT"
@@ -1,9 +1,6 @@
1
- module DNA (count, nucleotideCounts) where
1
+ module DNA (nucleotideCounts) where
2
2
 
3
3
  import Data.Map (Map)
4
4
 
5
- count :: Char -> String -> Either String Int
6
- count = error "You need to implement this function."
7
-
8
5
  nucleotideCounts :: String -> Either String (Map Char Int)
9
6
  nucleotideCounts = error "You need to implement this function."
@@ -5,7 +5,7 @@ import Data.Map (fromList)
5
5
  import Test.Hspec (Spec, describe, it, shouldBe, shouldSatisfy)
6
6
  import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)
7
7
 
8
- import DNA (count, nucleotideCounts)
8
+ import DNA (nucleotideCounts)
9
9
 
10
10
  main :: IO ()
11
11
  main = hspecWith defaultConfig {configFastFail = True} specs
@@ -13,29 +13,10 @@ main = hspecWith defaultConfig {configFastFail = True} specs
13
13
  specs :: Spec
14
14
  specs = describe "nucleotide-count" $ do
15
15
 
16
- -- As of 2016-07-27, there was no reference file
17
- -- for the test cases in `exercism/x-common`.
16
+ -- Test cases adapted from `exercism/x-common/triangle.json` on 2017-01-31.
18
17
 
19
- let x `matches` y = x `shouldBe` Right y
20
18
  let x `matchesMap` y = x `shouldBe` (Right . fromList) y
21
19
 
22
- describe "count" $ do
23
-
24
- it "empty dna strand has no adenosine" $
25
- count 'A' "" `matches` 0
26
-
27
- it "repetitive cytidine gets counted" $
28
- count 'C' "CCCCC" `matches` 5
29
-
30
- it "counts only thymidine" $
31
- count 'T' "GGGGGTAACCCGG" `matches` 1
32
-
33
- it "validates nucleotides" $
34
- count 'X' "GACT" `shouldSatisfy` isLeft
35
-
36
- it "validates strand" $
37
- count 'G' "GACYT" `shouldSatisfy` isLeft
38
-
39
20
  describe "nucleotideCounts" $ do
40
21
 
41
22
  it "empty dna strand has no nucleotides" $
@@ -58,4 +39,4 @@ specs = describe "nucleotide-count" $ do
58
39
  , ('T', 21) ]
59
40
 
60
41
  it "validates strand" $
61
- nucleotideCounts "GPAC" `shouldSatisfy` isLeft
42
+ nucleotideCounts "AGXXACT" `shouldSatisfy` isLeft
@@ -14,22 +14,16 @@ specs = describe "prime-factors" $
14
14
  describe "primeFactors" $ for_ cases test
15
15
  where
16
16
 
17
- test (n, expected) = it explanation assertion
17
+ test (description, n, expected) = it description assertion
18
18
  where
19
- explanation = show n
20
19
  assertion = primeFactors n `shouldBe` expected
21
20
 
22
- -- As of 2016-07-31, there was no reference file
23
- -- for the test cases in `exercism/x-common`.
21
+ -- Test cases adapted from `exercism/x-common/prime-factors` on 2017-02-01.
24
22
 
25
- cases = [ ( 1, [] )
26
- , ( 2, [2] )
27
- , ( 3, [3] )
28
- , ( 4, [2, 2] )
29
- , ( 6, [2, 3] )
30
- , ( 8, [2, 2, 2] )
31
- , ( 9, [3, 3] )
32
- , ( 27, [3, 3, 3] )
33
- , ( 625, [5, 5, 5, 5] )
34
- , ( 901255, [5, 17, 23, 461] )
35
- , (93819012551, [11, 9539, 894119] ) ]
23
+ cases = [ ("no factors", 1, [] )
24
+ , ("prime number", 2, [2] )
25
+ , ("square of a prime", 9, [3, 3] )
26
+ , ("cube of a prime", 8, [2, 2, 2] )
27
+ , ("product of primes and non-primes", 12, [2, 2, 3] )
28
+ , ("product of primes", 901255, [5, 17, 23, 461] )
29
+ , ("factors include a large prime", 93819012551, [11, 9539, 894119] ) ]
@@ -23,7 +23,7 @@ specs = describe "scrabble-score" $ do
23
23
  where
24
24
  assertion = scoreWord input `shouldBe` fromIntegral expected
25
25
 
26
- -- Test cases adapted from `exercism/x-common/scrabble-score.json` on 2017-01-31.
26
+ -- Test cases adapted from `exercism/x-common/scrabble-score.json` on 2017-02-01.
27
27
 
28
28
  data Case = Case { description :: String
29
29
  , input :: String
@@ -67,10 +67,6 @@ cases = [ Case { description = "lowercase letter"
67
67
  , input = "pinata"
68
68
  , expected = 8
69
69
  }
70
- , Case { description = "non-english letter is not scored"
71
- , input = "piñata"
72
- , expected = 7
73
- }
74
70
  , Case { description = "empty input"
75
71
  , input = ""
76
72
  , expected = 0
@@ -1,6 +1,5 @@
1
1
  module SecretHandshake (handshake) where
2
2
 
3
- import Numeric (readInt)
4
3
  import Data.Bits (testBit)
5
4
 
6
5
  data Action = Wink
@@ -10,7 +9,7 @@ data Action = Wink
10
9
  | Reverse
11
10
  deriving (Show, Eq, Enum, Bounded)
12
11
 
13
- handshake :: Handshake a => a -> [String]
12
+ handshake :: Int -> [String]
14
13
  handshake = foldr f [] . toActions
15
14
  where f Reverse acc = reverse acc
16
15
  f action acc = toString action:acc
@@ -21,22 +20,5 @@ handshake = foldr f [] . toActions
21
20
  Jump -> "jump"
22
21
  Reverse -> undefined
23
22
 
24
- class Handshake a where
25
- toActions :: a -> [Action]
26
-
27
- instance Handshake Int where
28
- toActions n = [act | act <- Reverse:[Wink .. Jump], n `testBit` fromEnum act]
29
-
30
- class BinParsable a where
31
- listToInt :: [a] -> Int
32
-
33
- instance BinParsable Char where
34
- listToInt s = case readInt 2 isBin parseBin s of
35
- [(n, "")] -> n
36
- _ -> 0
37
- where isBin c = c == '0' || c == '1'
38
- parseBin = fromEnum . ('1'==)
39
-
40
-
41
- instance BinParsable a => Handshake [a] where
42
- toActions = toActions . listToInt
23
+ toActions :: Int -> [Action]
24
+ toActions n = [act | act <- Reverse:[Wink .. Jump], n `testBit` fromEnum act]
@@ -1,3 +1,4 @@
1
1
  module SecretHandshake (handshake) where
2
2
 
3
+ handshake :: Int -> [String]
3
4
  handshake = error "You need to implement this function."
@@ -9,43 +9,40 @@ main = hspecWith defaultConfig {configFastFail = True} specs
9
9
  specs :: Spec
10
10
  specs = describe "secret-handshake" $ do
11
11
 
12
- -- As of 2016-09-12, there was no reference file
13
- -- for the test cases in `exercism/x-common`.
12
+ -- Test cases adapted from `exercism/x-common/secret-handshake` on 2017-01-31.
14
13
 
15
- it "1 to wink" $ do
14
+ it "wink for 1" $
16
15
  handshake (1 :: Int) `shouldBe` ["wink"]
17
- handshake "1" `shouldBe` ["wink"]
18
16
 
19
- it "10 to double blink" $ do
17
+ it "double blink for 10" $
20
18
  handshake (2 :: Int) `shouldBe` ["double blink"]
21
- handshake "10" `shouldBe` ["double blink"]
22
19
 
23
- it "100 to close your eyes" $ do
20
+ it "close your eyes for 100" $
24
21
  handshake (4 :: Int) `shouldBe` ["close your eyes"]
25
- handshake "100" `shouldBe` ["close your eyes"]
26
22
 
27
- it "1000 to jump" $ do
23
+ it "jump for 1000" $
28
24
  handshake (8 :: Int) `shouldBe` ["jump"]
29
- handshake "1000" `shouldBe` ["jump"]
30
25
 
31
- it "11 to wink and double blink" $ do
26
+ it "combine two actions" $
32
27
  handshake (3 :: Int) `shouldBe` ["wink", "double blink"]
33
- handshake "11" `shouldBe` ["wink", "double blink"]
34
28
 
35
- it "10011 to double blink and wink" $ do
29
+ it "reverse two actions" $
36
30
  handshake (19 :: Int) `shouldBe` ["double blink", "wink"]
37
- handshake "10011" `shouldBe` ["double blink", "wink"]
38
31
 
39
- it "11111 to jump, close your eyes, double blink, and wink" $ do
32
+ it "reversing one action gives the same action" $
33
+ handshake (24 :: Int) `shouldBe` ["jump"]
34
+
35
+ it "reversing no actions still gives no actions" $
36
+ handshake (16 :: Int) `shouldBe` []
37
+
38
+ it "all possible actions" $
39
+ handshake (15 :: Int) `shouldBe` ["wink", "double blink", "close your eyes", "jump"]
40
+
41
+ it "reverse all possible actions" $
40
42
  handshake (31 :: Int) `shouldBe` ["jump", "close your eyes", "double blink", "wink"]
41
- handshake "11111" `shouldBe` ["jump", "close your eyes", "double blink", "wink"]
42
43
 
43
- it "zero" $ do
44
+ it "do nothing for zero" $
44
45
  handshake (0 :: Int) `shouldBe` []
45
- handshake "0" `shouldBe` []
46
-
47
- it "gibberish" $
48
- handshake "piggies" `shouldBe` []
49
46
 
50
- it "partial gibberish" $
51
- handshake "1piggies" `shouldBe` []
47
+ it "do nothing if lower 5 bits not set" $
48
+ handshake (32 :: Int) `shouldBe` []
@@ -0,0 +1,16 @@
1
+ name: strain
2
+
3
+ dependencies:
4
+ - base
5
+
6
+ library:
7
+ exposed-modules: Strain
8
+ source-dirs: src
9
+
10
+ tests:
11
+ test:
12
+ main: Tests.hs
13
+ source-dirs: test
14
+ dependencies:
15
+ - strain
16
+ - hspec
@@ -0,0 +1,9 @@
1
+ module Strain (keep, discard) where
2
+
3
+ keep, discard :: (a -> Bool) -> [a] -> [a]
4
+
5
+ keep p = keep' []
6
+ where keep' acc [] = reverse acc
7
+ keep' acc (x:xs) = keep' (if p x then x:acc else acc) xs
8
+
9
+ discard = keep . (not .)
@@ -25,7 +25,8 @@ specs = describe "triangle" $
25
25
  where
26
26
  assertion = triangleType a b c `shouldBe` expected
27
27
 
28
- -- Test cases adapted from `exercism/x-common/triangle.json` on 2016-08-03.
28
+ -- Test cases created from old version of `x-common` tests on 2017-01-31,
29
+ -- diverging from `exercism/x-common/triangle`.
29
30
 
30
31
  cases = [ ( "equilateral triangle has all sides equal"
31
32
  , (2, 2, 2)
@@ -55,6 +56,10 @@ specs = describe "triangle" $
55
56
  , (3, 4, 5)
56
57
  , Scalene
57
58
  )
59
+ , ( "2a == b+c looks like equilateral, but isn't always"
60
+ , (5, 4, 6)
61
+ , Scalene
62
+ )
58
63
  , ( "larger scalene triangle"
59
64
  , (10, 11, 12)
60
65
  , Scalene
@@ -53,8 +53,17 @@
53
53
  "difficulty": 1,
54
54
  "topics": [
55
55
  "control-flow (conditionals)",
56
- "integers",
57
- "mathematics"
56
+ "integers",
57
+ "mathematics"
58
+ ]
59
+ },
60
+ {
61
+ "slug": "raindrops",
62
+ "difficulty": 1,
63
+ "topics": [
64
+ "control-flow (loops)",
65
+ "arrays",
66
+ "strings"
58
67
  ]
59
68
  },
60
69
  {
@@ -96,6 +105,15 @@
96
105
  "integers",
97
106
  "mathematics"
98
107
  ]
108
+ },
109
+ {
110
+ "slug": "secret-handshake",
111
+ "difficulty": 2,
112
+ "topics": [
113
+ "arrays",
114
+ "filtering",
115
+ "mathematics"
116
+ ]
99
117
  }
100
118
  ],
101
119
  "deprecated": [
@@ -0,0 +1,16 @@
1
+ # If the number has 3 as a factor, output 'Pling'.
2
+ # If the number has 5 as a factor, output 'Plang'.
3
+ # If the number has 7 as a factor, output 'Plong'.
4
+ # If the number does not have 3, 5, or 7 as a factor, just pass the number's digits straight through.
5
+
6
+ function raindrops(number::Int)
7
+ drops = []
8
+ number % 3 == 0 && push!(drops, "Pling")
9
+ number % 5 == 0 && push!(drops, "Plang")
10
+ number % 7 == 0 && push!(drops, "Plong")
11
+ if size(drops, 1) == 0
12
+ repr(number)
13
+ else
14
+ join(drops)
15
+ end
16
+ end