trackler 2.2.1.56 → 2.2.1.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b0c0c7112b74d60e756fef9303430876ce7be49d
4
- data.tar.gz: bd3104d6dfb0c233bbdf623e9808f246e5809742
3
+ metadata.gz: bf59a091755957ae186e813e2caf4399219caf02
4
+ data.tar.gz: 8c62a92e24400de5a47ac799a1df71fb569d9329
5
5
  SHA512:
6
- metadata.gz: 56c13967f711c9dced182ddd89f0adf1cbbaa334993e0e9b94c23e13f7ab42135be63b46e57dfd6ba55b473a7d0f7a64ad9ea141872e400a598074dda8510f03
7
- data.tar.gz: 11b81bc90cab6037db2614c4b461758fc1f884315163c6392ba8283bf76d4481c57c1bed510e6d64d82dfbe6a8499ebd90fae2cc2a12af831cc3dd172f80ce2d
6
+ metadata.gz: 45246361a3465ea25273cb746941897588b0f9320af8a414875bb062c2c32195aa78df334d85a265ada89ad43a4ae059eb312e1de62a5f9c0019f932fcaf933c
7
+ data.tar.gz: 981e6c1e993964aa5e56beda808a442a99e5ded61a4294c8ae2fa73781a54203363cc1ec7491e562d5a591cf6aa646c533057cb84a0fb3291466cc01e2444bb4
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.2.1.56"
2
+ VERSION = "2.2.1.57"
3
3
  end
@@ -58,7 +58,7 @@ logic
58
58
  mathematics
59
59
  memory_management
60
60
  networking
61
- parallellism
61
+ parallelism
62
62
  parsing
63
63
  pattern_recognition
64
64
  performance
@@ -77,4 +77,4 @@ behavior_driven_development
77
77
  functional_programming
78
78
  object_oriented_programming
79
79
  reactive_programming
80
- test_driven_development
80
+ test_driven_development
@@ -1,7 +1,7 @@
1
1
  Creating a zipper for a binary tree.
2
2
 
3
3
  [Zippers](https://en.wikipedia.org/wiki/Zipper_%28data_structure%29) are
4
- a way purely functional of navigating within a data structure and
4
+ a purely functional way of navigating within a data structure and
5
5
  manipulating it. They essentially contain a data structure and a
6
6
  pointer into that data structure (called the focus).
7
7
 
@@ -6,10 +6,10 @@ import "dart:async";
6
6
  import "package:test/test.dart";
7
7
  import "package:yaml/yaml.dart";
8
8
 
9
- /** Constants */
10
- const ENV_NAME = "EXERCISE";
9
+ /// Constants
10
+ const envName = "EXERCISE";
11
11
 
12
- /** Helpers */
12
+ /// Helpers
13
13
  Future runCmd(List<String> cmds) async {
14
14
  final cmd = cmds.first;
15
15
  final other = cmds.skip(1).toList();
@@ -112,19 +112,19 @@ Running tests for: $packageName
112
112
  }
113
113
 
114
114
  void main() {
115
- final testname = Platform.environment[ENV_NAME];
115
+ final testName = Platform.environment[envName];
116
116
 
117
117
  test("Exercises", () async {
118
- if (testname == null) {
118
+ if (testName == null) {
119
119
  await runAllTests();
120
120
  } else {
121
- final testpath = "${Directory.current.path}/exercises/$testname";
121
+ final testPath = "${Directory.current.path}/exercises/$testName";
122
122
 
123
- if (!await new Directory(testpath).exists()) {
124
- throw new ArgumentError("No exercise with this name: $testname");
123
+ if (!await new Directory(testPath).exists()) {
124
+ throw new ArgumentError("No exercise with this name: $testName");
125
125
  }
126
126
 
127
- await runTest(testpath);
127
+ await runTest(testPath);
128
128
  }
129
129
  });
130
130
  }
@@ -8,7 +8,7 @@ type
8
8
  ['{E3531870-DA5D-451A-9E7A-86B1C46B4D29}']
9
9
  function Read: T;
10
10
  procedure Write(aValue: T);
11
- procedure ForceWrite(aValue: T);
11
+ procedure OverWrite(aValue: T);
12
12
  procedure Clear;
13
13
  end;
14
14
 
@@ -21,7 +21,7 @@ type
21
21
  destructor destroy;
22
22
  function Read: T;
23
23
  procedure Write(aValue: T);
24
- procedure ForceWrite(aValue: T);
24
+ procedure OverWrite(aValue: T);
25
25
  procedure Clear;
26
26
  end;
27
27
 
@@ -57,7 +57,7 @@ begin
57
57
  FBuffer.Enqueue(aValue);
58
58
  end;
59
59
 
60
- procedure TCircularBuffer<T>.ForceWrite(aValue: T);
60
+ procedure TCircularBuffer<T>.OverWrite(aValue: T);
61
61
  begin
62
62
  if FBuffer.Count = FSize then
63
63
  FBuffer.Dequeue;
@@ -4,6 +4,9 @@ interface
4
4
  uses
5
5
  DUnitX.TestFramework;
6
6
 
7
+ const
8
+ CanonicalVersion = '1.0.1';
9
+
7
10
  type
8
11
 
9
12
  [TestFixture]
@@ -11,7 +14,11 @@ type
11
14
  public
12
15
  [Test]
13
16
  // [Ignore('Comment the "[Ignore]" statement to run the test')]
14
- procedure Write_and_read_back_one_item;
17
+ procedure reading_empty_buffer_should_fail;
18
+
19
+ [Test]
20
+ [Ignore]
21
+ procedure can_read_an_item_just_written;
15
22
 
16
23
  [Test]
17
24
  [Ignore]
@@ -19,37 +26,53 @@ type
19
26
 
20
27
  [Test]
21
28
  [Ignore]
22
- procedure Clearing_buffer;
29
+ procedure each_item_may_only_be_read_once;
30
+
31
+ [Test]
32
+ [Ignore]
33
+ procedure items_are_read_in_the_order_they_are_written;
34
+
35
+ [Test]
36
+ [Ignore]
37
+ procedure full_buffer_cannot_be_written_to;
38
+
39
+ [Test]
40
+ [Ignore]
41
+ procedure a_read_frees_up_capacity_for_another_write;
42
+
43
+ [Test]
44
+ [Ignore]
45
+ procedure read_position_is_maintained_even_across_multiple_writes;
23
46
 
24
47
  [Test]
25
48
  [Ignore]
26
- procedure Alternate_write_and_read;
49
+ procedure items_cleared_out_of_buffer_cannot_be_read;
27
50
 
28
51
  [Test]
29
52
  [Ignore]
30
- procedure Reads_back_oldest_item;
53
+ procedure clear_frees_up_capacity_for_another_write;
31
54
 
32
55
  [Test]
33
56
  [Ignore]
34
- procedure Writing_to_a_full_buffer_throws_an_exception;
57
+ procedure clear_does_nothing_on_empty_buffer;
35
58
 
36
59
  [Test]
37
60
  [Ignore]
38
- procedure Overwriting_oldest_item_in_a_full_buffer;
61
+ procedure overwrite_acts_like_write_on_non_full_buffer;
39
62
 
40
63
  [Test]
41
64
  [Ignore]
42
- procedure Forced_writes_to_non_full_buffer_should_behave_like_writes;
65
+ procedure overwrite_replaces_the_oldest_item_on_full_buffer;
43
66
 
44
67
  [Test]
45
68
  [Ignore]
46
- procedure Alternate_read_and_write_into_buffer_overflow;
69
+ procedure overwrite_replaces_the_oldest_item_remaining_in_buffer_following_a_read;
47
70
  end;
48
71
 
49
72
  implementation
50
73
  uses System.SysUtils, uCircularBuffer;
51
74
 
52
- procedure TestCircularBuffer.Write_and_read_back_one_item;
75
+ procedure TestCircularBuffer.can_read_an_item_just_written;
53
76
  var MyBuffer: ICircularBuffer<char>;
54
77
  Actual: char;
55
78
  begin
@@ -59,6 +82,45 @@ begin
59
82
  assert.AreEqual('1', Actual);
60
83
  end;
61
84
 
85
+ procedure TestCircularBuffer.clear_does_nothing_on_empty_buffer;
86
+ var MyBuffer: ICircularBuffer<integer>;
87
+ Actual: integer;
88
+ MyProc: TTestLocalMethod;
89
+ begin
90
+ MyBuffer := TCircularBuffer<integer>.Create(1);
91
+ MyBuffer.Clear;
92
+
93
+ MyProc := procedure
94
+ begin
95
+ MyBuffer.Write(1);
96
+ end;
97
+
98
+ Assert.WillNotRaise(MyProc, EInvalidOpException);
99
+
100
+ Actual := MyBuffer.Read;
101
+ Assert.AreEqual(1, Actual);
102
+ end;
103
+
104
+ procedure TestCircularBuffer.clear_frees_up_capacity_for_another_write;
105
+ var MyBuffer: ICircularBuffer<integer>;
106
+ Actual: integer;
107
+ MyProc: TTestLocalMethod;
108
+ begin
109
+ MyBuffer := TCircularBuffer<integer>.Create(1);
110
+ MyBuffer.Write(1);
111
+ MyBuffer.Clear;
112
+
113
+ MyProc := procedure
114
+ begin
115
+ MyBuffer.Write(2);
116
+ end;
117
+
118
+ Assert.WillNotRaise(MyProc, EInvalidOpException);
119
+
120
+ Actual := MyBuffer.Read;
121
+ Assert.AreEqual(2, Actual);
122
+ end;
123
+
62
124
  procedure TestCircularBuffer.Write_and_read_back_multiple_items;
63
125
  var MyBuffer: ICircularBuffer<char>;
64
126
  Act1, Act2: char;
@@ -82,16 +144,14 @@ begin
82
144
  Assert.WillRaise(MyProc, EInvalidOpException);
83
145
  end;
84
146
 
85
- procedure TestCircularBuffer.Clearing_buffer;
147
+ procedure TestCircularBuffer.items_cleared_out_of_buffer_cannot_be_read;
86
148
  var MyBuffer: ICircularBuffer<char>;
87
149
  Act1, Act2: char;
88
150
  MyProc: TTestLocalMethod;
89
151
  begin
90
- MyBuffer := TCircularBuffer<char>.Create(3);
152
+ MyBuffer := TCircularBuffer<char>.Create(1);
91
153
 
92
154
  MyBuffer.Write('1');
93
- MyBuffer.Write('2');
94
- MyBuffer.Write('3');
95
155
 
96
156
  MyBuffer.Clear;
97
157
 
@@ -100,79 +160,120 @@ begin
100
160
  MyBuffer.Read;
101
161
  end;
102
162
  Assert.WillRaise(MyProc, EInvalidOpException);
163
+ end;
103
164
 
104
- MyBuffer.Write('1');
105
- MyBuffer.Write('2');
106
-
107
- Act1 := MyBuffer.Read;
108
- MyBuffer.Write('3');
109
- Act2 := MyBuffer.Read;
110
-
111
- Assert.AreEqual('1', Act1);
112
- Assert.AreEqual('2', Act2);
165
+ procedure TestCircularBuffer.each_item_may_only_be_read_once;
166
+ var MyBuffer: ICircularBuffer<integer>;
167
+ Actual: integer;
168
+ MyProc: TTestLocalMethod;
169
+ begin
170
+ MyBuffer := TCircularBuffer<integer>.Create(1);
171
+ MyBuffer.Write(1);
172
+ Actual := MyBuffer.Read;
173
+ assert.AreEqual(1, Actual);
174
+ MyProc := procedure
175
+ begin
176
+ MyBuffer.Read;
177
+ end;
178
+ Assert.WillRaise(MyProc, EInvalidOpException);
113
179
  end;
114
180
 
115
- procedure TestCircularBuffer.Alternate_write_and_read;
116
- var MyBuffer: ICircularBuffer<char>;
117
- Act1, Act2: char;
181
+ procedure TestCircularBuffer.a_read_frees_up_capacity_for_another_write;
182
+ var MyBuffer: ICircularBuffer<integer>;
183
+ Actual: integer;
184
+ MyProc: TTestLocalMethod;
118
185
  begin
119
- MyBuffer := TCircularBuffer<char>.create(2);
120
- MyBuffer.Write('1');
121
- Act1 := MyBuffer.Read;
122
- MyBuffer.Write('2');
123
- Act2 := MyBuffer.Read;
186
+ MyBuffer := TCircularBuffer<integer>.create(1);
187
+ MyBuffer.Write(1);
188
+ Actual := MyBuffer.Read;
124
189
 
125
- Assert.AreEqual('1', Act1);
126
- Assert.AreEqual('2', Act2);
190
+ MyProc := procedure
191
+ begin
192
+ MyBuffer.Write(2);
193
+ end;
194
+ Assert.WillNotRaise(MyProc, EInvalidOpException);
195
+ Actual := MyBuffer.Read;
196
+ Assert.AreEqual(2, Actual);
127
197
  end;
128
198
 
129
- procedure TestCircularBuffer.Reads_back_oldest_item;
199
+ procedure TestCircularBuffer.read_position_is_maintained_even_across_multiple_writes;
130
200
  var MyBuffer: ICircularBuffer<char>;
131
- Act1, Act2, Act3: char;
201
+ Actual: char;
132
202
  begin
133
203
  MyBuffer := TCircularBuffer<char>.create(3);
134
204
  MyBuffer.Write('1');
135
205
  MyBuffer.Write('2');
136
- Act1 := MyBuffer.Read;
206
+ Actual := MyBuffer.Read;
207
+ Assert.AreEqual('1', Actual);
137
208
 
138
209
  MyBuffer.Write('3');
139
- Act2 := MyBuffer.Read;
140
- Act3 := MyBuffer.Read;
141
210
 
142
- Assert.AreEqual('2', Act2);
143
- Assert.AreEqual('3', Act3);
211
+ Actual := MyBuffer.Read;
212
+ Assert.AreEqual('2',Actual);
213
+ Actual := MyBuffer.Read;
214
+ Assert.AreEqual('3',Actual);
144
215
  end;
145
216
 
146
- procedure TestCircularBuffer.Writing_to_a_full_buffer_throws_an_exception;
217
+ procedure TestCircularBuffer.full_buffer_cannot_be_written_to;
147
218
  var MyBuffer: ICircularBuffer<char>;
148
219
  MyProc: TTestLocalMethod;
149
220
  begin
150
- MyBuffer := TCircularBuffer<char>.create(2);
221
+ MyBuffer := TCircularBuffer<char>.create(1);
151
222
  MyBuffer.Write('1');
152
- MyBuffer.Write('2');
153
223
 
154
224
  MyProc := procedure
155
225
  begin
156
- MyBuffer.Write('A');
226
+ MyBuffer.Write('2');
157
227
  end;
158
228
  Assert.WillRaise(MyProc, EInvalidOpException);
159
229
  end;
160
230
 
161
- procedure TestCircularBuffer.Overwriting_oldest_item_in_a_full_buffer;
162
- var MyBuffer: ICircularBuffer<char>;
163
- Act1, Act2: char;
231
+ procedure TestCircularBuffer.overwrite_replaces_the_oldest_item_on_full_buffer;
232
+ var MyBuffer: ICircularBuffer<integer>;
233
+ Act1, Act2: integer;
164
234
  MyProc: TTestLocalMethod;
165
235
  begin
166
- MyBuffer := TCircularBuffer<char>.create(2);
167
- MyBuffer.Write('1');
168
- MyBuffer.Write('2');
169
- MyBuffer.ForceWrite('A');
236
+ MyBuffer := TCircularBuffer<integer>.create(2);
237
+ MyBuffer.Write(1);
238
+ MyBuffer.Write(2);
239
+ MyBuffer.OverWrite(3);
170
240
 
171
241
  Act1 := MyBuffer.Read;
172
242
  Act2 := MyBuffer.Read;
173
243
 
174
- Assert.AreEqual('2', Act1);
175
- Assert.AreEqual('A', Act2);
244
+ Assert.AreEqual(2, Act1);
245
+ Assert.AreEqual(3, Act2);
246
+ end;
247
+
248
+ procedure TestCircularBuffer.overwrite_replaces_the_oldest_item_remaining_in_buffer_following_a_read;
249
+ var MyBuffer: ICircularBuffer<integer>;
250
+ MyProc: TTestLocalMethod;
251
+ Actual: integer;
252
+ begin
253
+ MyBuffer := TCircularBuffer<integer>.create(3);
254
+ MyBuffer.Write(1);
255
+ MyBuffer.Write(2);
256
+ MyBuffer.Write(3);
257
+
258
+ Actual := MyBuffer.Read;
259
+ Assert.AreEqual(1,Actual);
260
+
261
+ MyBuffer.Write(4);
262
+ MyBuffer.OverWrite(5);
263
+
264
+ Actual := MyBuffer.Read;
265
+ Assert.AreEqual(3,Actual);
266
+ Actual := MyBuffer.Read;
267
+ Assert.AreEqual(4,Actual);
268
+ Actual := MyBuffer.Read;
269
+ Assert.AreEqual(5,Actual);
270
+ end;
271
+
272
+ procedure TestCircularBuffer.reading_empty_buffer_should_fail;
273
+ var MyBuffer: ICircularBuffer<integer>;
274
+ MyProc: TTestLocalMethod;
275
+ begin
276
+ MyBuffer := TCircularBuffer<integer>.create(2);
176
277
  MyProc := procedure
177
278
  begin
178
279
  MyBuffer.Read;
@@ -180,14 +281,14 @@ begin
180
281
  Assert.WillRaise(MyProc, EInvalidOpException);
181
282
  end;
182
283
 
183
- procedure TestCircularBuffer.Forced_writes_to_non_full_buffer_should_behave_like_writes;
284
+ procedure TestCircularBuffer.overwrite_acts_like_write_on_non_full_buffer;
184
285
  var MyBuffer: ICircularBuffer<char>;
185
286
  Act1, Act2: char;
186
287
  MyProc: TTestLocalMethod;
187
288
  begin
188
289
  MyBuffer := TCircularBuffer<char>.create(2);
189
290
  MyBuffer.Write('1');
190
- MyBuffer.ForceWrite('2');
291
+ MyBuffer.OverWrite('2');
191
292
 
192
293
  Act1 := MyBuffer.Read;
193
294
  Act2 := MyBuffer.Read;
@@ -201,47 +302,20 @@ begin
201
302
  Assert.WillRaise(MyProc, EInvalidOpException);
202
303
  end;
203
304
 
204
- procedure TestCircularBuffer.Alternate_read_and_write_into_buffer_overflow;
305
+ procedure TestCircularBuffer.items_are_read_in_the_order_they_are_written;
205
306
  var MyBuffer: ICircularBuffer<char>;
206
307
  Act: TArray<char>;
207
- MyProc: TTestLocalMethod;
208
308
  begin
209
- SetLength(Act, 8);
210
- MyBuffer := TCircularBuffer<char>.create(5);
309
+ SetLength(Act, 2);
310
+ MyBuffer := TCircularBuffer<char>.create(2);
211
311
  MyBuffer.Write('1');
212
312
  MyBuffer.Write('2');
213
- MyBuffer.Write('3');
214
313
 
215
314
  Act[0] := MyBuffer.Read;
216
315
  Act[1] := MyBuffer.Read;
217
- MyBuffer.Write('4');
218
- Act[2] := MyBuffer.Read;
219
-
220
- MyBuffer.Write('5');
221
- MyBuffer.Write('6');
222
- MyBuffer.Write('7');
223
- MyBuffer.Write('8');
224
-
225
- MyBuffer.ForceWrite('A');
226
- MyBuffer.ForceWrite('B');
227
316
 
228
- Act[3] := MyBuffer.Read;
229
- Act[4] := MyBuffer.Read;
230
- Act[5] := MyBuffer.Read;
231
- Act[6] := MyBuffer.Read;
232
- Act[7] := MyBuffer.Read;
233
-
234
- Assert.AreEqual('6', Act[3]);
235
- Assert.AreEqual('7', Act[4]);
236
- Assert.AreEqual('8', Act[5]);
237
- Assert.AreEqual('A', Act[6]);
238
- Assert.AreEqual('B', Act[7]);
239
-
240
- MyProc := procedure
241
- begin
242
- MyBuffer.Read;
243
- end;
244
- Assert.WillRaise(MyProc, EInvalidOpException);
317
+ Assert.AreEqual('1', Act[0]);
318
+ Assert.AreEqual('2', Act[1]);
245
319
  end;
246
320
 
247
321
  initialization