trackler 2.2.1.56 → 2.2.1.57

Sign up to get free protection for your applications and to get access to all the features.
Files changed (340) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/TOPICS.txt +2 -2
  4. data/problem-specifications/exercises/zipper/description.md +1 -1
  5. data/tracks/dart/test/exercises_test.dart +9 -9
  6. data/tracks/delphi/exercises/circular-buffer/uCircularBufferExample.pas +3 -3
  7. data/tracks/delphi/exercises/circular-buffer/uCircularBufferTests.pas +160 -86
  8. data/tracks/delphi/exercises/phone-number/README.md +1 -1
  9. data/tracks/erlang/config.json +10 -0
  10. data/tracks/erlang/exercises/isogram/README.md +65 -0
  11. data/tracks/erlang/exercises/isogram/include/exercism.hrl +11 -0
  12. data/tracks/erlang/exercises/isogram/rebar.config +30 -0
  13. data/tracks/erlang/exercises/isogram/src/example.erl +16 -0
  14. data/tracks/erlang/exercises/isogram/src/isogram.app.src +9 -0
  15. data/tracks/erlang/exercises/isogram/src/isogram.erl +9 -0
  16. data/tracks/erlang/exercises/isogram/test/isogram_tests.erl +32 -0
  17. data/tracks/fsharp/exercises/binary-search/BinarySearch.fs +1 -1
  18. data/tracks/fsharp/exercises/binary-search/BinarySearchTest.fs +58 -30
  19. data/tracks/fsharp/exercises/binary-search/Example.fs +1 -1
  20. data/tracks/fsharp/exercises/poker/Example.fs +23 -20
  21. data/tracks/fsharp/exercises/poker/PokerTest.fs +135 -76
  22. data/tracks/fsharp/generators/Generators.fs +21 -0
  23. data/tracks/go/README.md +0 -15
  24. data/tracks/go/bin/run-generators +11 -0
  25. data/tracks/go/config.json +389 -277
  26. data/tracks/go/config/maintainers.json +2 -2
  27. data/tracks/go/docs/TESTS.md +0 -15
  28. data/tracks/go/exercises/accumulate/accumulate_test.go +0 -8
  29. data/tracks/go/exercises/accumulate/example.go +0 -2
  30. data/tracks/go/exercises/acronym/acronym.go +14 -2
  31. data/tracks/go/exercises/acronym/acronym_test.go +0 -8
  32. data/tracks/go/exercises/acronym/cases_test.go +2 -2
  33. data/tracks/go/exercises/acronym/example.go +0 -2
  34. data/tracks/go/exercises/all-your-base/all_your_base_test.go +0 -8
  35. data/tracks/go/exercises/all-your-base/example.go +0 -2
  36. data/tracks/go/exercises/allergies/allergies_test.go +0 -8
  37. data/tracks/go/exercises/allergies/example.go +0 -2
  38. data/tracks/go/exercises/anagram/.meta/gen.go +55 -0
  39. data/tracks/go/exercises/anagram/anagram_test.go +0 -130
  40. data/tracks/go/exercises/anagram/cases_test.go +164 -0
  41. data/tracks/go/exercises/anagram/example.go +0 -2
  42. data/tracks/go/exercises/atbash-cipher/atbash_cipher_test.go +0 -8
  43. data/tracks/go/exercises/atbash-cipher/cases_test.go +2 -2
  44. data/tracks/go/exercises/atbash-cipher/example.go +0 -2
  45. data/tracks/go/exercises/bank-account/bank_account_test.go +0 -8
  46. data/tracks/go/exercises/bank-account/example.go +0 -2
  47. data/tracks/go/exercises/beer-song/beer_test.go +0 -8
  48. data/tracks/go/exercises/beer-song/example.go +0 -2
  49. data/tracks/go/exercises/binary-search-tree/binary_search_tree_test.go +0 -8
  50. data/tracks/go/exercises/binary-search-tree/example.go +0 -2
  51. data/tracks/go/exercises/binary-search/binary_search_test.go +0 -8
  52. data/tracks/go/exercises/binary-search/example.go +0 -2
  53. data/tracks/go/exercises/binary/binary_test.go +0 -11
  54. data/tracks/go/exercises/binary/example.go +0 -2
  55. data/tracks/go/exercises/bob/bob.go +14 -0
  56. data/tracks/go/exercises/bob/bob_test.go +2 -10
  57. data/tracks/go/exercises/bob/cases_test.go +2 -2
  58. data/tracks/go/exercises/bob/example.go +12 -13
  59. data/tracks/go/exercises/book-store/README.md +92 -0
  60. data/tracks/go/exercises/book-store/book_store_test.go +91 -0
  61. data/tracks/go/exercises/book-store/example.go +52 -0
  62. data/tracks/go/exercises/bowling/bowling_test.go +0 -8
  63. data/tracks/go/exercises/bowling/cases_test.go +2 -2
  64. data/tracks/go/exercises/bowling/example.go +0 -2
  65. data/tracks/go/exercises/bracket-push/bracket_push_test.go +0 -8
  66. data/tracks/go/exercises/bracket-push/cases_test.go +2 -2
  67. data/tracks/go/exercises/bracket-push/example.go +0 -3
  68. data/tracks/go/exercises/change/cases_test.go +10 -3
  69. data/tracks/go/exercises/change/change_test.go +1 -9
  70. data/tracks/go/exercises/change/example.go +0 -2
  71. data/tracks/go/exercises/circular-buffer/circular_buffer_test.go +0 -8
  72. data/tracks/go/exercises/circular-buffer/example.go +0 -2
  73. data/tracks/go/exercises/clock/cases_test.go +2 -2
  74. data/tracks/go/exercises/clock/clock_test.go +2 -9
  75. data/tracks/go/exercises/clock/example.go +0 -2
  76. data/tracks/go/exercises/collatz-conjecture/README.md +51 -0
  77. data/tracks/go/exercises/collatz-conjecture/collatz_conjecture_test.go +77 -0
  78. data/tracks/go/exercises/collatz-conjecture/example.go +24 -0
  79. data/tracks/go/exercises/connect/cases_test.go +2 -2
  80. data/tracks/go/exercises/connect/connect_test.go +0 -8
  81. data/tracks/go/exercises/connect/example.go +0 -2
  82. data/tracks/go/exercises/crypto-square/crypto_square_test.go +0 -8
  83. data/tracks/go/exercises/crypto-square/example.go +0 -2
  84. data/tracks/go/exercises/custom-set/cases_test.go +2 -2
  85. data/tracks/go/exercises/custom-set/custom_set_test.go +0 -8
  86. data/tracks/go/exercises/custom-set/example.go +0 -2
  87. data/tracks/go/exercises/custom-set/example_slice.go +0 -2
  88. data/tracks/go/exercises/diamond/diamond_test.go +0 -8
  89. data/tracks/go/exercises/diamond/example.go +0 -2
  90. data/tracks/go/exercises/difference-of-squares/difference_of_squares_test.go +0 -8
  91. data/tracks/go/exercises/difference-of-squares/example.go +0 -2
  92. data/tracks/go/exercises/diffie-hellman/diffie_hellman_test.go +0 -8
  93. data/tracks/go/exercises/diffie-hellman/example.go +0 -2
  94. data/tracks/go/exercises/error-handling/error_handling_test.go +0 -7
  95. data/tracks/go/exercises/error-handling/example.go +0 -2
  96. data/tracks/go/exercises/etl/etl_test.go +0 -8
  97. data/tracks/go/exercises/etl/example.go +0 -2
  98. data/tracks/go/exercises/flatten-array/.meta/gen.go +52 -0
  99. data/tracks/go/exercises/flatten-array/README.md +35 -0
  100. data/tracks/go/exercises/flatten-array/cases_test.go +42 -0
  101. data/tracks/go/exercises/flatten-array/example.go +25 -0
  102. data/tracks/go/exercises/flatten-array/flatten_test.go +23 -0
  103. data/tracks/go/exercises/food-chain/example.go +0 -2
  104. data/tracks/go/exercises/food-chain/food_chain_test.go +0 -8
  105. data/tracks/go/exercises/forth/cases_test.go +2 -2
  106. data/tracks/go/exercises/forth/example.go +0 -2
  107. data/tracks/go/exercises/forth/forth_test.go +0 -8
  108. data/tracks/go/exercises/gigasecond/cases_test.go +2 -2
  109. data/tracks/go/exercises/gigasecond/example.go +0 -2
  110. data/tracks/go/exercises/gigasecond/gigasecond.go +13 -3
  111. data/tracks/go/exercises/gigasecond/gigasecond_test.go +0 -8
  112. data/tracks/go/exercises/grade-school/example.go +0 -2
  113. data/tracks/go/exercises/grade-school/grade_school_test.go +0 -8
  114. data/tracks/go/exercises/grains/example.go +0 -2
  115. data/tracks/go/exercises/grains/grains_test.go +0 -8
  116. data/tracks/go/exercises/hamming/.meta/hints.md +4 -0
  117. data/tracks/go/exercises/hamming/README.md +6 -0
  118. data/tracks/go/exercises/hamming/example.go +0 -2
  119. data/tracks/go/exercises/hamming/hamming.go +0 -2
  120. data/tracks/go/exercises/hamming/hamming_test.go +0 -8
  121. data/tracks/go/exercises/hello-world/hello_world.go +9 -1
  122. data/tracks/go/exercises/hexadecimal/example.go +0 -2
  123. data/tracks/go/exercises/hexadecimal/hexadecimal_test.go +0 -8
  124. data/tracks/go/exercises/house/example.go +0 -2
  125. data/tracks/go/exercises/house/house_test.go +0 -8
  126. data/tracks/go/exercises/isbn-verifier/README.md +60 -0
  127. data/tracks/go/exercises/isbn-verifier/example.go +57 -0
  128. data/tracks/go/exercises/isbn-verifier/isbn_verifier_test.go +35 -0
  129. data/tracks/go/exercises/isogram/example.go +0 -2
  130. data/tracks/go/exercises/isogram/isogram_test.go +0 -8
  131. data/tracks/go/exercises/kindergarten-garden/example.go +0 -2
  132. data/tracks/go/exercises/kindergarten-garden/kindergarten_garden_test.go +0 -8
  133. data/tracks/go/exercises/largest-series-product/cases_test.go +2 -2
  134. data/tracks/go/exercises/largest-series-product/example.go +0 -2
  135. data/tracks/go/exercises/largest-series-product/largest_series_product_test.go +0 -8
  136. data/tracks/go/exercises/leap/.meta/hints.md +14 -0
  137. data/tracks/go/exercises/leap/README.md +16 -0
  138. data/tracks/go/exercises/leap/cases_test.go +4 -4
  139. data/tracks/go/exercises/leap/example.go +0 -2
  140. data/tracks/go/exercises/leap/leap.go +11 -2
  141. data/tracks/go/exercises/leap/leap_test.go +0 -15
  142. data/tracks/go/exercises/ledger/example.go +0 -2
  143. data/tracks/go/exercises/ledger/ledger.go +0 -2
  144. data/tracks/go/exercises/ledger/ledger_test.go +0 -8
  145. data/tracks/go/exercises/luhn/cases_test.go +2 -2
  146. data/tracks/go/exercises/luhn/example.go +0 -2
  147. data/tracks/go/exercises/luhn/luhn_test.go +0 -8
  148. data/tracks/go/exercises/matrix/example.go +0 -2
  149. data/tracks/go/exercises/matrix/matrix_test.go +0 -8
  150. data/tracks/go/exercises/meetup/cases_test.go +2 -2
  151. data/tracks/go/exercises/meetup/example.go +0 -2
  152. data/tracks/go/exercises/meetup/meetup_test.go +0 -8
  153. data/tracks/go/exercises/minesweeper/example.go +0 -2
  154. data/tracks/go/exercises/minesweeper/minesweeper_test.go +0 -8
  155. data/tracks/go/exercises/nth-prime/example.go +0 -2
  156. data/tracks/go/exercises/nth-prime/nth_prime_test.go +0 -8
  157. data/tracks/go/exercises/nucleotide-count/example.go +0 -2
  158. data/tracks/go/exercises/nucleotide-count/nucleotide_count.go +26 -0
  159. data/tracks/go/exercises/nucleotide-count/nucleotide_count_test.go +0 -8
  160. data/tracks/go/exercises/ocr-numbers/example.go +0 -2
  161. data/tracks/go/exercises/ocr-numbers/ocr_numbers_test.go +0 -8
  162. data/tracks/go/exercises/octal/example.go +0 -2
  163. data/tracks/go/exercises/octal/octal_test.go +0 -8
  164. data/tracks/go/exercises/paasio/example.go +0 -2
  165. data/tracks/go/exercises/paasio/paasio_test.go +0 -8
  166. data/tracks/go/exercises/palindrome-products/example.go +0 -2
  167. data/tracks/go/exercises/palindrome-products/palindrome_products_test.go +0 -8
  168. data/tracks/go/exercises/pangram/example.go +0 -2
  169. data/tracks/go/exercises/pangram/pangram_test.go +2 -8
  170. data/tracks/go/exercises/parallel-letter-frequency/example.go +0 -2
  171. data/tracks/go/exercises/parallel-letter-frequency/parallel_letter_frequency_test.go +0 -8
  172. data/tracks/go/exercises/pascals-triangle/example.go +0 -2
  173. data/tracks/go/exercises/pascals-triangle/pascals_triangle_test.go +0 -8
  174. data/tracks/go/exercises/perfect-numbers/example.go +0 -2
  175. data/tracks/go/exercises/perfect-numbers/perfect_numbers_test.go +0 -8
  176. data/tracks/go/exercises/phone-number/cases_test.go +2 -2
  177. data/tracks/go/exercises/phone-number/example.go +0 -2
  178. data/tracks/go/exercises/phone-number/phone_number_test.go +0 -8
  179. data/tracks/go/exercises/pig-latin/example.go +0 -2
  180. data/tracks/go/exercises/pig-latin/pig_latin_test.go +0 -8
  181. data/tracks/go/exercises/poker/.meta/hints.md +7 -0
  182. data/tracks/go/exercises/poker/README.md +9 -0
  183. data/tracks/go/exercises/poker/cases_test.go +2 -2
  184. data/tracks/go/exercises/poker/example.go +0 -2
  185. data/tracks/go/exercises/poker/poker_test.go +0 -11
  186. data/tracks/go/exercises/pov/example.go +0 -2
  187. data/tracks/go/exercises/pov/pov_test.go +1 -9
  188. data/tracks/go/exercises/prime-factors/example.go +0 -2
  189. data/tracks/go/exercises/prime-factors/prime_factors_test.go +1 -9
  190. data/tracks/go/exercises/protein-translation/example.go +0 -2
  191. data/tracks/go/exercises/protein-translation/protein_translation_test.go +0 -8
  192. data/tracks/go/exercises/pythagorean-triplet/example.go +0 -2
  193. data/tracks/go/exercises/pythagorean-triplet/pythagorean_triplet_test.go +0 -8
  194. data/tracks/go/exercises/queen-attack/example.go +0 -2
  195. data/tracks/go/exercises/queen-attack/queen_attack_test.go +0 -8
  196. data/tracks/go/exercises/raindrops/.meta/hints.md +7 -0
  197. data/tracks/go/exercises/raindrops/cases_test.go +2 -2
  198. data/tracks/go/exercises/raindrops/example.go +0 -2
  199. data/tracks/go/exercises/raindrops/raindrops_test.go +0 -8
  200. data/tracks/go/exercises/react/example.go +0 -2
  201. data/tracks/go/exercises/react/react_test.go +0 -11
  202. data/tracks/go/exercises/rna-transcription/cases_test.go +2 -2
  203. data/tracks/go/exercises/rna-transcription/example.go +0 -2
  204. data/tracks/go/exercises/rna-transcription/rna_transcription.go +6 -0
  205. data/tracks/go/exercises/rna-transcription/rna_transcription_test.go +0 -8
  206. data/tracks/go/exercises/robot-name/example.go +0 -2
  207. data/tracks/go/exercises/robot-name/robot_name_test.go +0 -8
  208. data/tracks/go/exercises/robot-simulator/example.go +0 -1
  209. data/tracks/go/exercises/robot-simulator/robot_simulator_test.go +0 -8
  210. data/tracks/go/exercises/roman-numerals/cases_test.go +2 -2
  211. data/tracks/go/exercises/roman-numerals/example.go +0 -2
  212. data/tracks/go/exercises/roman-numerals/roman_numerals_test.go +0 -8
  213. data/tracks/go/exercises/rotational-cipher/README.md +56 -0
  214. data/tracks/go/exercises/rotational-cipher/example.go +20 -0
  215. data/tracks/go/exercises/rotational-cipher/rotational_cipher_test.go +86 -0
  216. data/tracks/go/exercises/run-length-encoding/README.md +31 -0
  217. data/tracks/go/exercises/run-length-encoding/example.go +53 -0
  218. data/tracks/go/exercises/run-length-encoding/run_length_encoding_test.go +59 -0
  219. data/tracks/go/exercises/saddle-points/example.go +0 -2
  220. data/tracks/go/exercises/saddle-points/saddle_points_test.go +0 -8
  221. data/tracks/go/exercises/say/.meta/gen.go +70 -0
  222. data/tracks/go/exercises/say/cases_test.go +88 -0
  223. data/tracks/go/exercises/say/example.go +12 -6
  224. data/tracks/go/exercises/say/say_test.go +17 -43
  225. data/tracks/go/exercises/scrabble-score/cases_test.go +2 -2
  226. data/tracks/go/exercises/scrabble-score/example.go +0 -3
  227. data/tracks/go/exercises/scrabble-score/scrabble_score_test.go +0 -8
  228. data/tracks/go/exercises/secret-handshake/cases_test.go +2 -2
  229. data/tracks/go/exercises/secret-handshake/example.go +0 -2
  230. data/tracks/go/exercises/secret-handshake/secret_handshake_test.go +0 -8
  231. data/tracks/go/exercises/series/example.go +0 -2
  232. data/tracks/go/exercises/series/series_test.go +0 -8
  233. data/tracks/go/exercises/sieve/example.go +0 -2
  234. data/tracks/go/exercises/sieve/sieve_test.go +0 -8
  235. data/tracks/go/exercises/simple-cipher/example.go +0 -2
  236. data/tracks/go/exercises/simple-cipher/simple_cipher_test.go +0 -8
  237. data/tracks/go/exercises/space-age/.meta/gen.go +56 -0
  238. data/tracks/go/exercises/space-age/README.md +42 -0
  239. data/tracks/go/exercises/space-age/cases_test.go +61 -0
  240. data/tracks/go/exercises/space-age/example.go +36 -0
  241. data/tracks/go/exercises/space-age/space_age_test.go +22 -0
  242. data/tracks/go/exercises/spiral-matrix/README.md +48 -0
  243. data/tracks/go/exercises/spiral-matrix/example.go +93 -0
  244. data/tracks/go/exercises/spiral-matrix/spiral_matrix_test.go +71 -0
  245. data/tracks/go/exercises/strain/example.go +0 -2
  246. data/tracks/go/exercises/strain/strain_test.go +0 -8
  247. data/tracks/go/exercises/sublist/.meta/gen.go +56 -0
  248. data/tracks/go/exercises/sublist/README.md +39 -0
  249. data/tracks/go/exercises/sublist/cases_test.go +115 -0
  250. data/tracks/go/exercises/sublist/example.go +49 -0
  251. data/tracks/go/exercises/sublist/sublist_test.go +22 -0
  252. data/tracks/go/exercises/sum-of-multiples/cases_test.go +4 -3
  253. data/tracks/go/exercises/sum-of-multiples/example.go +0 -2
  254. data/tracks/go/exercises/sum-of-multiples/sum_of_multiples_test.go +0 -8
  255. data/tracks/go/exercises/tournament/example.go +0 -2
  256. data/tracks/go/exercises/tournament/tournament_test.go +0 -11
  257. data/tracks/go/exercises/transpose/cases_test.go +2 -2
  258. data/tracks/go/exercises/transpose/example.go +0 -2
  259. data/tracks/go/exercises/transpose/transpose_test.go +0 -8
  260. data/tracks/go/exercises/tree-building/example.go +0 -2
  261. data/tracks/go/exercises/tree-building/tree_building.go +0 -2
  262. data/tracks/go/exercises/tree-building/tree_test.go +0 -11
  263. data/tracks/go/exercises/triangle/.meta/hints.md +10 -0
  264. data/tracks/go/exercises/triangle/example.go +0 -2
  265. data/tracks/go/exercises/triangle/triangle.go +21 -9
  266. data/tracks/go/exercises/triangle/triangle_test.go +0 -8
  267. data/tracks/go/exercises/trinary/example.go +0 -2
  268. data/tracks/go/exercises/trinary/trinary_test.go +0 -8
  269. data/tracks/go/exercises/twelve-days/example.go +0 -2
  270. data/tracks/go/exercises/twelve-days/twelve_days_test.go +0 -8
  271. data/tracks/go/exercises/two-fer/two_fer.go +2 -2
  272. data/tracks/go/exercises/variable-length-quantity/cases_test.go +2 -2
  273. data/tracks/go/exercises/variable-length-quantity/example.go +0 -2
  274. data/tracks/go/exercises/variable-length-quantity/variable_length_quantity_test.go +0 -8
  275. data/tracks/go/exercises/word-count/cases_test.go +2 -2
  276. data/tracks/go/exercises/word-count/example.go +0 -2
  277. data/tracks/go/exercises/word-count/word_count_test.go +4 -7
  278. data/tracks/go/exercises/word-search/.meta/gen.go +96 -0
  279. data/tracks/go/exercises/word-search/cases_test.go +154 -0
  280. data/tracks/go/exercises/word-search/example.go +0 -2
  281. data/tracks/go/exercises/word-search/word_search_test.go +16 -52
  282. data/tracks/go/exercises/wordy/example.go +0 -2
  283. data/tracks/go/exercises/wordy/wordy_test.go +0 -8
  284. data/tracks/go/gen/gen.go +4 -1
  285. data/tracks/java/exercises/phone-number/README.md +1 -1
  286. data/tracks/kotlin/exercises/phone-number/README.md +1 -1
  287. data/tracks/perl6/config.json +50 -0
  288. data/tracks/perl6/exercises/etl/ETL.pm6 +6 -0
  289. data/tracks/perl6/exercises/etl/Example.pm6 +7 -0
  290. data/tracks/perl6/exercises/etl/README.md +72 -0
  291. data/tracks/perl6/exercises/etl/etl.t +139 -0
  292. data/tracks/perl6/exercises/etl/example.yaml +35 -0
  293. data/tracks/perl6/exercises/hamming/Example.pm6 +6 -0
  294. data/tracks/perl6/exercises/hamming/Hamming.pm6 +4 -0
  295. data/tracks/perl6/exercises/hamming/README.md +61 -0
  296. data/tracks/perl6/exercises/hamming/example.yaml +22 -0
  297. data/tracks/perl6/exercises/hamming/hamming.t +175 -0
  298. data/tracks/perl6/exercises/meetup/Example.pm6 +37 -0
  299. data/tracks/perl6/exercises/meetup/Meetup.pm6 +4 -0
  300. data/tracks/perl6/exercises/meetup/README.md +48 -0
  301. data/tracks/perl6/exercises/meetup/example.yaml +48 -0
  302. data/tracks/perl6/exercises/meetup/meetup.t +907 -0
  303. data/tracks/perl6/exercises/pangram/Example.pm6 +5 -0
  304. data/tracks/perl6/exercises/pangram/Pangram.pm6 +4 -0
  305. data/tracks/perl6/exercises/pangram/README.md +34 -0
  306. data/tracks/perl6/exercises/pangram/example.yaml +17 -0
  307. data/tracks/perl6/exercises/pangram/pangram.t +125 -0
  308. data/tracks/perl6/exercises/phone-number/README.md +1 -1
  309. data/tracks/perl6/exercises/two-fer/Example.pm6 +14 -0
  310. data/tracks/perl6/exercises/two-fer/README.md +38 -0
  311. data/tracks/perl6/exercises/two-fer/TwoFer.pm6 +15 -0
  312. data/tracks/perl6/exercises/two-fer/example.yaml +43 -0
  313. data/tracks/perl6/exercises/two-fer/two-fer.t +82 -0
  314. data/tracks/php/config.json +13 -0
  315. data/tracks/php/exercises/rail-fence-cipher/README.md +80 -0
  316. data/tracks/php/exercises/rail-fence-cipher/example.php +61 -0
  317. data/tracks/php/exercises/rail-fence-cipher/rail-fence-cipher_test.php +76 -0
  318. data/tracks/purescript/.travis.yml +1 -1
  319. data/tracks/python/config.json +13 -0
  320. data/tracks/python/exercises/alphametics/example.py +42 -29
  321. data/tracks/python/exercises/crypto-square/crypto_square_test.py +20 -13
  322. data/tracks/python/exercises/crypto-square/example.py +1 -1
  323. data/tracks/python/exercises/kindergarten-garden/kindergarten_garden_test.py +15 -2
  324. data/tracks/python/exercises/phone-number/README.md +2 -1
  325. data/tracks/python/exercises/pov/README.md +53 -0
  326. data/tracks/python/exercises/pov/example.py +70 -0
  327. data/tracks/python/exercises/pov/pov.py +25 -0
  328. data/tracks/python/exercises/pov/pov_test.py +200 -0
  329. data/tracks/python/test/check-exercises.py +11 -1
  330. data/tracks/ruby/exercises/meetup/.meta/.version +1 -0
  331. data/tracks/ruby/exercises/meetup/.meta/generator/meetup_case.rb +11 -0
  332. data/tracks/ruby/exercises/meetup/.meta/solutions/meetup.rb +5 -0
  333. data/tracks/ruby/exercises/meetup/meetup_test.rb +48 -4
  334. metadata +90 -8
  335. data/tracks/go/exercises/accumulate/accumulate.go +0 -5
  336. data/tracks/go/exercises/clock/clock.go +0 -19
  337. data/tracks/go/exercises/pangram/pangram.go +0 -5
  338. data/tracks/go/exercises/raindrops/raindrops.go +0 -8
  339. data/tracks/go/exercises/twelve-days/HINTS.md +0 -2
  340. data/tracks/go/exercises/word-count/word_count.go +0 -9
@@ -1,7 +1,5 @@
1
1
  package foodchain
2
2
 
3
- const testVersion = 3
4
-
5
3
  var verse = []struct{ eaten, comment string }{
6
4
  {"", ""},
7
5
  {"fly", "I don't know why she swallowed the fly. Perhaps she'll die."},
@@ -6,8 +6,6 @@ import (
6
6
  "testing"
7
7
  )
8
8
 
9
- const targetTestVersion = 3
10
-
11
9
  var ref = []string{``,
12
10
 
13
11
  `I know an old lady who swallowed a fly.
@@ -86,12 +84,6 @@ func diff(got, want string) string {
86
84
  }
87
85
  }
88
86
 
89
- func TestTestVersion(t *testing.T) {
90
- if testVersion != targetTestVersion {
91
- t.Fatalf("Found testVersion = %v, want %v.", testVersion, targetTestVersion)
92
- }
93
- }
94
-
95
87
  func TestVerse(t *testing.T) {
96
88
  for v := 1; v <= 8; v++ {
97
89
  if ret := Verse(v); ret != ref[v] {
@@ -1,8 +1,8 @@
1
1
  package forth
2
2
 
3
- // Source: exercism/x-common
3
+ // Source: exercism/problem-specifications
4
4
  // Commit: 1b4165d Add test for Forth that an operator can be overridden.
5
- // x-common version: 1.2.0
5
+ // Problem Specifications Version: 1.2.0
6
6
 
7
7
  type testGroup struct {
8
8
  group string
@@ -233,5 +233,3 @@ var errNotEnoughOperands = errors.New("not enough operands")
233
233
  var errDivideByZero = errors.New("attempt to divide by zero")
234
234
  var errEmptyUserDef = errors.New("empty user definition")
235
235
  var errInvalidUserDef = errors.New("invalid user def word")
236
-
237
- const testVersion = 2
@@ -9,14 +9,6 @@ import (
9
9
  "testing"
10
10
  )
11
11
 
12
- const targetTestVersion = 2
13
-
14
- func TestTestVersion(t *testing.T) {
15
- if testVersion != targetTestVersion {
16
- t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion)
17
- }
18
- }
19
-
20
12
  func TestForth(t *testing.T) {
21
13
  for _, tg := range testGroups {
22
14
  for _, tc := range tg.tests {
@@ -1,8 +1,8 @@
1
1
  package gigasecond
2
2
 
3
- // Source: exercism/x-common
3
+ // Source: exercism/problem-specifications
4
4
  // Commit: 61e7d70 Fix "Gigasecond: Schema Compliance"
5
- // x-common version: 1.0.0
5
+ // Problem Specifications Version: 1.0.0
6
6
 
7
7
  // Add one gigasecond to the input.
8
8
  var addCases = []struct {
@@ -2,8 +2,6 @@ package gigasecond
2
2
 
3
3
  import "time"
4
4
 
5
- const testVersion = 4
6
-
7
5
  // AddGigasecond returns time t plus one gigasecond.
8
6
  func AddGigasecond(t time.Time) time.Time {
9
7
  return t.Add(1e9 * time.Second)
@@ -1,8 +1,18 @@
1
+ // This is a "stub" file. It's a little start on your solution.
2
+ // It's not a complete solution though; you have to write some code.
3
+
4
+ // Package gigasecond should have a package comment that summarizes what it's about.
5
+ // https://golang.org/doc/effective_go.html#commentary
1
6
  package gigasecond
2
7
 
3
8
  // import path for the time package from the standard library
4
9
  import "time"
5
10
 
6
- const testVersion = 4
7
-
8
- func AddGigasecond(time.Time) time.Time
11
+ // AddGigasecond should have a comment documenting it.
12
+ func AddGigasecond(t time.Time) time.Time {
13
+ // Write some code here to pass the test suite.
14
+ // Then remove all the stock comments.
15
+ // They're here to help you get started but they only clutter a finished solution.
16
+ // If you leave them in, reviewers may protest!
17
+ return t
18
+ }
@@ -8,20 +8,12 @@ import (
8
8
  "time"
9
9
  )
10
10
 
11
- const targetTestVersion = 4
12
-
13
11
  // date formats used in test data
14
12
  const (
15
13
  fmtD = "2006-01-02"
16
14
  fmtDT = "2006-01-02T15:04:05"
17
15
  )
18
16
 
19
- func TestTestVersion(t *testing.T) {
20
- if testVersion != targetTestVersion {
21
- t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion)
22
- }
23
- }
24
-
25
17
  func TestAddGigasecond(t *testing.T) {
26
18
  for _, tc := range addCases {
27
19
  in := parse(tc.in, t)
@@ -2,8 +2,6 @@ package school
2
2
 
3
3
  import "sort"
4
4
 
5
- const testVersion = 1
6
-
7
5
  type School map[int][]string
8
6
 
9
7
  func New() *School {
@@ -19,14 +19,6 @@ import (
19
19
  "testing"
20
20
  )
21
21
 
22
- const targetTestVersion = 1
23
-
24
- func TestTestVersion(t *testing.T) {
25
- if testVersion != targetTestVersion {
26
- t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion)
27
- }
28
- }
29
-
30
22
  func TestNewSchoolIsEmpty(t *testing.T) {
31
23
  if len(New().Enrollment()) != 0 {
32
24
  t.Error("New school not empty")
@@ -4,8 +4,6 @@ import (
4
4
  "fmt"
5
5
  )
6
6
 
7
- const testVersion = 1
8
-
9
7
  // Square returns the number of grains on a square on a chess board where the
10
8
  // first square has 1 and every subsequent square doubles the number.
11
9
  func Square(num int) (uint64, error) {
@@ -4,8 +4,6 @@ import (
4
4
  "testing"
5
5
  )
6
6
 
7
- const targetTestVersion = 1
8
-
9
7
  var squareTests = []struct {
10
8
  input int
11
9
  expectedVal uint64
@@ -23,12 +21,6 @@ var squareTests = []struct {
23
21
  {-1, 0, true},
24
22
  }
25
23
 
26
- func TestTestVersion(t *testing.T) {
27
- if testVersion != targetTestVersion {
28
- t.Fatalf("Found testVersion = %v, want %v.", testVersion, targetTestVersion)
29
- }
30
- }
31
-
32
24
  func TestSquare(t *testing.T) {
33
25
  for _, test := range squareTests {
34
26
  actualVal, actualErr := Square(test.input)
@@ -0,0 +1,4 @@
1
+ You may be wondering about the `cases_test.go` file. We explain it in the
2
+ [leap exercise][leap-exercise-readme].
3
+
4
+ [leap-exercise-readme]: https://github.com/exercism/go/blob/master/exercises/leap/README.md
@@ -35,6 +35,12 @@ The Hamming distance is only defined for sequences of equal length. This means
35
35
  that based on the definition, each language could deal with getting sequences
36
36
  of equal length differently.
37
37
 
38
+ You may be wondering about the `cases_test.go` file. We explain it in the
39
+ [leap exercise][leap-exercise-readme].
40
+
41
+ [leap-exercise-readme]: https://github.com/exercism/go/blob/master/exercises/leap/README.md
42
+
43
+
38
44
  ## Running the tests
39
45
 
40
46
  To run the tests run the command `go test` from within the exercise directory.
@@ -2,8 +2,6 @@ package hamming
2
2
 
3
3
  import "errors"
4
4
 
5
- const testVersion = 6
6
-
7
5
  func Distance(a, b string) (d int, err error) {
8
6
  if len(b) != len(a) {
9
7
  return 0, errors.New("strings of unequal length")
@@ -1,6 +1,4 @@
1
1
  package hamming
2
2
 
3
- const testVersion = 6
4
-
5
3
  func Distance(a, b string) (int, error) {
6
4
  }
@@ -2,14 +2,6 @@ package hamming
2
2
 
3
3
  import "testing"
4
4
 
5
- const targetTestVersion = 6
6
-
7
- func TestTestVersion(t *testing.T) {
8
- if testVersion != targetTestVersion {
9
- t.Fatalf("Found testVersion = %v, want %v.", testVersion, targetTestVersion)
10
- }
11
- }
12
-
13
5
  func TestHamming(t *testing.T) {
14
6
  for _, tc := range testCases {
15
7
  got, err := Distance(tc.s1, tc.s2)
@@ -1,7 +1,15 @@
1
+ // This is a "stub" file. It's a little start on your solution.
2
+ // It's not a complete solution though; you have to write some code.
3
+
4
+ // Package greeting should have a package comment that summarizes what it's about.
5
+ // https://golang.org/doc/effective_go.html#commentary
1
6
  package greeting
2
7
 
8
+ // HelloWorld should have a comment documenting it.
3
9
  func HelloWorld() string {
4
10
  // Write some code here to pass the test suite.
5
- // Then delete this comment stub.
11
+ // Then remove all the stock comments.
12
+ // They're here to help you get started but they only clutter a finished solution.
13
+ // If you leave them in, reviewers may protest!
6
14
  return ""
7
15
  }
@@ -8,8 +8,6 @@ import (
8
8
  "math"
9
9
  )
10
10
 
11
- const testVersion = 1
12
-
13
11
  // ErrRange indicates that a value is out of range for the target type.
14
12
  var ErrRange = errors.New("value out of range")
15
13
 
@@ -15,8 +15,6 @@ import (
15
15
  "testing"
16
16
  )
17
17
 
18
- const targetTestVersion = 1
19
-
20
18
  var testCases = []struct {
21
19
  in string
22
20
  out int64
@@ -35,12 +33,6 @@ var testCases = []struct {
35
33
  {"9223372036854775809", 0, "range"},
36
34
  }
37
35
 
38
- func TestTestVersion(t *testing.T) {
39
- if testVersion != targetTestVersion {
40
- t.Fatalf("Found testVersion = %v, want %v.", testVersion, targetTestVersion)
41
- }
42
- }
43
-
44
36
  func TestParseHex(t *testing.T) {
45
37
  for _, test := range testCases {
46
38
  out, err := ParseHex(test.in)
@@ -1,7 +1,5 @@
1
1
  package house
2
2
 
3
- const testVersion = 1
4
-
5
3
  var songLines = []string{
6
4
  "the horse and the hound and the horn\nthat belonged to",
7
5
  "the farmer sowing his corn\nthat kept",
@@ -15,8 +15,6 @@ import (
15
15
  "testing"
16
16
  )
17
17
 
18
- const targetTestVersion = 1
19
-
20
18
  var (
21
19
  // song copied from README
22
20
  expectedSong = `This is the house that Jack built.
@@ -112,12 +110,6 @@ that lay in the house that Jack built.`
112
110
  expectedVerses = strings.Split(expectedSong, "\n\n")
113
111
  )
114
112
 
115
- func TestTestVersion(t *testing.T) {
116
- if testVersion != targetTestVersion {
117
- t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion)
118
- }
119
- }
120
-
121
113
  func TestVerse(t *testing.T) {
122
114
  for v := 0; v < len(expectedVerses); v++ {
123
115
  if ret := Verse(v + 1); ret != expectedVerses[v] {
@@ -0,0 +1,60 @@
1
+ # Isbn Verifier
2
+
3
+ Check if a given ISBN-10 is valid.
4
+
5
+ ## Functionality
6
+
7
+ Given an unknown string the program should check if the provided string is a valid ISBN-10.
8
+ Putting this into place requires some thinking about preprocessing/parsing of the string prior to calculating the check digit for the ISBN.
9
+
10
+ The program should allow for ISBN-10 without the separating dashes to be verified as well.
11
+
12
+ ## ISBN
13
+
14
+ Let's take a random ISBN-10 number, say `3-598-21508-8` for this.
15
+ The first digit block indicates the group where the ISBN belongs. Groups can consist of shared languages, geographic regions or countries. The leading '3' signals this ISBN is from a german speaking country.
16
+ The following number block is to identify the publisher. Since this is a three digit publisher number there is a 5 digit title number for this book.
17
+ The last digit in the ISBN is the check digit which is used to detect read errors.
18
+
19
+ The first 9 digits in the ISBN have to be between 0 and 9.
20
+ The check digit can additionally be an 'X' to allow 10 to be a valid check digit as well.
21
+
22
+ A valid ISBN-10 is calculated with this formula `(x1 * 10 + x2 * 9 + x3 * 8 + x4 * 7 + x5 * 6 + x6 * 5 + x7 * 4 + x8 * 3 + x9 * 2 + x10 * 1) mod 11 == 0`
23
+ So for our example ISBN this means:
24
+ (3 * 10 + 5 * 9 + 9 * 8 + 8 * 7 + 2 * 6 + 1 * 5 + 5 * 4 + 0 * 3 + 8 * 2 + 8 * 1) mod 11 = 0
25
+
26
+ Which proves that the ISBN is valid.
27
+
28
+ ## Caveats
29
+
30
+ Converting from string to number can be tricky in certain languages.
31
+ It's getting even trickier since the check-digit of an ISBN-10 can be 'X'.
32
+
33
+ ## Bonus tasks
34
+
35
+ * Generate a valid ISBN-13 from the input ISBN-10 (and maybe verify it again with a derived verifier)
36
+
37
+ * Generate valid ISBN, maybe even from a given starting ISBN
38
+ ## Running the tests
39
+
40
+ To run the tests run the command `go test` from within the exercise directory.
41
+
42
+ If the test suite contains benchmarks, you can run these with the `-bench`
43
+ flag:
44
+
45
+ go test -bench .
46
+
47
+ Keep in mind that each reviewer will run benchmarks on a different machine, with
48
+ different specs, so the results from these benchmark tests may vary.
49
+
50
+ ## Further information
51
+
52
+ For more detailed information about the Go track, including how to get help if
53
+ you're having trouble, please visit the exercism.io [Go language page](http://exercism.io/languages/go/about).
54
+
55
+ ## Source
56
+
57
+ Converting a string into a number and some basic processing utilizing a relatable real world example. [https://en.wikipedia.org/wiki/International_Standard_Book_Number#ISBN-10_check_digit_calculation](https://en.wikipedia.org/wiki/International_Standard_Book_Number#ISBN-10_check_digit_calculation)
58
+
59
+ ## Submitting Incomplete Solutions
60
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,57 @@
1
+ package isbn
2
+
3
+ import (
4
+ "errors"
5
+ "math"
6
+ "strconv"
7
+ "unicode"
8
+ )
9
+
10
+ func IsValidISBN(isbn string) bool {
11
+
12
+ isbn = dropHyphen(isbn)
13
+
14
+ ary, err := strToSlice(isbn)
15
+ if len(ary) != 10 || err != nil {
16
+ return false
17
+ }
18
+
19
+ return calcCheckDigit(ary)
20
+ }
21
+
22
+ func dropHyphen(isbn string) string {
23
+ var result string
24
+ for _, char := range isbn {
25
+ if char == '-' {
26
+ continue
27
+ }
28
+ result += string(char)
29
+ }
30
+ return result
31
+ }
32
+
33
+ func strToSlice(isbn string) (result []int, err error) {
34
+
35
+ for _, char := range isbn {
36
+ if unicode.IsLetter(char) && char != 'X' {
37
+ err = errors.New("invalid character")
38
+ return
39
+ } else if char == 'X' {
40
+ result = append(result, 10)
41
+ } else {
42
+ i, _ := strconv.Atoi(string(char))
43
+ result = append(result, i)
44
+ }
45
+ }
46
+ return
47
+ }
48
+
49
+ func calcCheckDigit(isbn []int) bool {
50
+ var pool int
51
+ for idx, value := range isbn {
52
+ pool += int(math.Abs(float64(idx)-10)) * value
53
+ }
54
+ result := pool % 11
55
+
56
+ return result == 0
57
+ }