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
@@ -88,6 +88,22 @@ type BeerSong() =
88
88
 
89
89
  override this.PropertiesWithIdentifier canonicalDataCase = ["expected"]
90
90
 
91
+ type BinarySearch() =
92
+ inherit Exercise()
93
+
94
+ override this.PropertiesWithIdentifier canonicalDataCase = ["array"; "value"; "expected"]
95
+
96
+ override this.RenderValueWithoutIdentifier (canonicalDataCase, key, value) =
97
+ match key with
98
+ | "array" ->
99
+ (value :?> JToken).ToObject<string []>() |> formatArray
100
+ | "expected" ->
101
+ match string value with
102
+ | "-1" -> None |> formatOption
103
+ | x -> Some x |> formatOption
104
+ | _ ->
105
+ base.RenderValueWithoutIdentifier (canonicalDataCase, key, value)
106
+
91
107
  type Bob() =
92
108
  inherit Exercise()
93
109
 
@@ -470,6 +486,11 @@ type PhoneNumber() =
470
486
  type PigLatin() =
471
487
  inherit Exercise()
472
488
 
489
+ type Poker() =
490
+ inherit Exercise()
491
+
492
+ override this.PropertiesWithIdentifier canonicalDataCase = ["input"; "expected"]
493
+
473
494
  type PrimeFactors() =
474
495
  inherit Exercise()
475
496
 
data/tracks/go/README.md CHANGED
@@ -198,21 +198,6 @@ create their own solutions from scratch. Some of the later exercises may have st
198
198
  files if the author thinks there may be implementation confusion, a particularly
199
199
  difficult concept, or boilerplate code needed.
200
200
 
201
- ### Problem Versioning
202
-
203
- Each problem defines a `const targetTestVersion` in the test file, and validates
204
- that the solution has defined a matching value `testVersion`. Any Go track developer
205
- that changes the test file or test data must increment `targetTestVersion`.
206
-
207
- The benefit of all this is that reviewers can see which test version a posted
208
- solution was written for and be spared confusion over why an old posted solution
209
- might not pass current tests.
210
-
211
- Notice that neither the `testVersion` nor the `targetTestVersion` is exported.
212
- This is so that golint will not complain about a missing comment. In general,
213
- adding tests for unexported names is considered an anti-pattern, but in this
214
- case the trade-off seems acceptable.
215
-
216
201
  ### Errors
217
202
 
218
203
  We like errors in Go. It's not idiomatic Go to ignore invalid data or have undefined
@@ -0,0 +1,11 @@
1
+ #!/bin/sh
2
+
3
+ for dir in exercises/*/; do
4
+ file="$dir/.meta/gen.go"
5
+ if [ -f $file ]; then
6
+ cd "$dir/.meta"
7
+ echo "Generating $(basename $dir)"
8
+ go run gen.go
9
+ cd -
10
+ fi
11
+ done
@@ -3,69 +3,78 @@
3
3
  "blurb": "Go is a compiled, open source programming language with a small, consistent syntax, a powerful standard library, and fantastic tooling. It's a great fit for web backends and command-line tools.",
4
4
  "exercises": [
5
5
  {
6
- "core": true,
6
+ "core": false,
7
7
  "difficulty": 1,
8
- "slug": "hello-world",
8
+ "slug": "gigasecond",
9
9
  "topics": [
10
- "strings"
10
+ "time"
11
11
  ],
12
12
  "unlocked_by": null,
13
- "uuid": "19957346-dedf-441e-85ea-656cac0d96d8"
13
+ "uuid": "ea390e58-6ac5-4219-89bb-648852712a6a"
14
14
  },
15
15
  {
16
- "core": true,
17
- "difficulty": 1,
18
- "slug": "two-fer",
16
+ "core": false,
17
+ "difficulty": 2,
18
+ "slug": "bob",
19
19
  "topics": [
20
- "control-flow-(conditionals)",
20
+ "conditionals",
21
21
  "strings"
22
22
  ],
23
23
  "unlocked_by": null,
24
- "uuid": "dc4ad67d-0fe4-0880-5a13-3aebb8759bcc3095de1"
24
+ "uuid": "efdf07a1-e329-4d0f-90a1-374b9b8af748"
25
25
  },
26
26
  {
27
27
  "core": false,
28
- "difficulty": 1,
29
- "slug": "leap",
28
+ "difficulty": 3,
29
+ "slug": "acronym",
30
30
  "topics": [
31
- "booleans",
32
- "control-flow-(conditionals)",
33
- "integers",
34
- "logic"
31
+ "regular_expressions",
32
+ "strings",
33
+ "transforming"
35
34
  ],
36
- "unlocked_by": "hamming",
37
- "uuid": "fee57b09-2b67-4483-a2e5-3dfec0568b15"
35
+ "unlocked_by": null,
36
+ "uuid": "b39d9e79-dee0-4c70-a6c3-114bee8083f2"
38
37
  },
39
38
  {
40
39
  "core": true,
41
- "difficulty": 3,
42
- "slug": "clock",
40
+ "difficulty": 1,
41
+ "slug": "hello-world",
43
42
  "topics": [
44
- "equality",
45
- "mathematics",
46
- "text-formatting",
47
- "time"
43
+ "strings"
48
44
  ],
49
45
  "unlocked_by": null,
50
- "uuid": "7d2de21e-bf67-495e-8d90-05e1a35d5b99"
46
+ "uuid": "19957346-dedf-441e-85ea-656cac0d96d8"
51
47
  },
52
48
  {
53
49
  "core": false,
50
+ "difficulty": 2,
51
+ "slug": "space-age",
52
+ "topics": [
53
+ "floating_point_numbers",
54
+ "if_else_statements",
55
+ "mathematics"
56
+ ],
57
+ "unlocked_by": "hello-world",
58
+ "uuid": "5a6baa1c-8ca8-4ebe-a1d2-1e0687ca846a"
59
+ },
60
+ {
61
+ "core": true,
54
62
  "difficulty": 1,
55
- "slug": "gigasecond",
63
+ "slug": "two-fer",
56
64
  "topics": [
57
- "time"
65
+ "conditionals",
66
+ "strings"
58
67
  ],
59
- "unlocked_by": "hamming",
60
- "uuid": "ea390e58-6ac5-4219-89bb-648852712a6a"
68
+ "unlocked_by": null,
69
+ "uuid": "dc4ad67d-0fe4-0880-5a13-3aebb8759bcc3095de1"
61
70
  },
62
71
  {
63
72
  "core": true,
64
73
  "difficulty": 1,
65
74
  "slug": "hamming",
66
75
  "topics": [
67
- "control-flow-(loops)",
68
76
  "equality",
77
+ "loops",
69
78
  "strings"
70
79
  ],
71
80
  "unlocked_by": null,
@@ -76,7 +85,7 @@
76
85
  "difficulty": 1,
77
86
  "slug": "raindrops",
78
87
  "topics": [
79
- "control-flow-(conditionals)",
88
+ "conditionals",
80
89
  "filtering",
81
90
  "strings"
82
91
  ],
@@ -84,60 +93,126 @@
84
93
  "uuid": "2f51e32a-9b1f-4100-9eec-517115c858e9"
85
94
  },
86
95
  {
87
- "core": false,
96
+ "core": true,
88
97
  "difficulty": 1,
89
- "slug": "accumulate",
98
+ "slug": "scrabble-score",
90
99
  "topics": [
91
- "lists"
100
+ "loops",
101
+ "maps",
102
+ "strings"
92
103
  ],
93
- "unlocked_by": "raindrops",
94
- "uuid": "fb03948c-11e8-440d-9a5d-979396451270"
104
+ "unlocked_by": null,
105
+ "uuid": "20cbd8f9-f8e3-4767-a0f5-94810ba3f902"
95
106
  },
96
107
  {
97
108
  "core": true,
98
- "difficulty": 3,
99
- "slug": "acronym",
109
+ "difficulty": 2,
110
+ "slug": "isogram",
100
111
  "topics": [
101
- "regular-expressions",
102
- "strings",
103
- "transforming"
112
+ "sequences",
113
+ "strings"
104
114
  ],
105
115
  "unlocked_by": null,
106
- "uuid": "b39d9e79-dee0-4c70-a6c3-114bee8083f2"
116
+ "uuid": "c2064df8-cce5-4f03-9d85-0818b4e34112"
107
117
  },
108
118
  {
109
- "core": false,
119
+ "core": true,
110
120
  "difficulty": 2,
111
- "slug": "pangram",
121
+ "slug": "difference-of-squares",
112
122
  "topics": [
113
- "control-flow-(loops)",
114
- "strings"
123
+ "algorithms",
124
+ "mathematics"
115
125
  ],
116
- "unlocked_by": "raindrops",
117
- "uuid": "d14c6283-e57c-472c-8181-87f82d9088dd"
126
+ "unlocked_by": null,
127
+ "uuid": "19628c8a-a89f-457e-9526-3d400024a927"
118
128
  },
119
129
  {
120
- "core": false,
130
+ "core": true,
121
131
  "difficulty": 2,
122
- "slug": "bob",
132
+ "slug": "luhn",
123
133
  "topics": [
124
- "control-flow-(conditionals)",
134
+ "algorithms",
135
+ "integers",
125
136
  "strings"
126
137
  ],
127
- "unlocked_by": "raindrops",
128
- "uuid": "efdf07a1-e329-4d0f-90a1-374b9b8af748"
138
+ "unlocked_by": null,
139
+ "uuid": "8b29da0e-8ead-4e72-a12a-d448c8434767"
140
+ },
141
+ {
142
+ "core": true,
143
+ "difficulty": 2,
144
+ "slug": "grains",
145
+ "topics": [
146
+ "bitwise_operations",
147
+ "if_else_statements",
148
+ "integers",
149
+ "mathematics",
150
+ "type_conversion"
151
+ ],
152
+ "unlocked_by": null,
153
+ "uuid": "b4f6b08b-a132-447b-b447-66bf37ab20c6"
129
154
  },
130
155
  {
131
156
  "core": true,
132
157
  "difficulty": 3,
133
- "slug": "triangle",
158
+ "slug": "clock",
134
159
  "topics": [
135
- "booleans",
136
- "control-flow-(conditionals)",
137
- "logic"
160
+ "equality",
161
+ "mathematics",
162
+ "text_formatting",
163
+ "time"
138
164
  ],
139
165
  "unlocked_by": null,
140
- "uuid": "6769557a-33fa-4257-adbf-e66dc8c06f85"
166
+ "uuid": "7d2de21e-bf67-495e-8d90-05e1a35d5b99"
167
+ },
168
+ {
169
+ "core": true,
170
+ "difficulty": 3,
171
+ "slug": "parallel-letter-frequency",
172
+ "topics": [
173
+ "concurrency"
174
+ ],
175
+ "unlocked_by": null,
176
+ "uuid": "bf366b19-63bf-4a75-9a35-08b881af6951"
177
+ },
178
+ {
179
+ "core": true,
180
+ "difficulty": 3,
181
+ "slug": "tree-building",
182
+ "topics": [
183
+ "records",
184
+ "refactoring",
185
+ "sorting",
186
+ "trees"
187
+ ],
188
+ "unlocked_by": null,
189
+ "uuid": "d0a2afab-e30d-4617-b646-413a44ecf2ed"
190
+ },
191
+ {
192
+ "core": true,
193
+ "difficulty": 3,
194
+ "slug": "robot-name",
195
+ "topics": [
196
+ "randomness"
197
+ ],
198
+ "unlocked_by": null,
199
+ "uuid": "86b8f1e6-e088-403e-984a-abd360f5dcef"
200
+ },
201
+ {
202
+ "core": true,
203
+ "difficulty": 3,
204
+ "slug": "tournament",
205
+ "topics": [
206
+ "integers",
207
+ "parsing",
208
+ "records",
209
+ "sorting",
210
+ "strings",
211
+ "text_formatting",
212
+ "transforming"
213
+ ],
214
+ "unlocked_by": null,
215
+ "uuid": "572d03ec-d763-400e-ba4f-5a6a92d5af98"
141
216
  },
142
217
  {
143
218
  "core": true,
@@ -145,42 +220,125 @@
145
220
  "slug": "twelve-days",
146
221
  "topics": [
147
222
  "algorithms",
148
- "pattern-recognition",
223
+ "pattern_recognition",
149
224
  "sequences",
150
225
  "strings",
151
- "text-formatting"
226
+ "text_formatting"
152
227
  ],
153
228
  "unlocked_by": null,
154
229
  "uuid": "75b6e2e8-1e20-4f53-b7c5-e32f9f7eea58"
155
230
  },
156
231
  {
157
232
  "core": true,
158
- "difficulty": 2,
159
- "slug": "difference-of-squares",
233
+ "difficulty": 4,
234
+ "slug": "matrix",
160
235
  "topics": [
161
- "algorithms",
162
- "mathematics"
236
+ "arrays",
237
+ "exception_handling",
238
+ "matrices",
239
+ "strings",
240
+ "type_conversion"
163
241
  ],
164
242
  "unlocked_by": null,
165
- "uuid": "19628c8a-a89f-457e-9526-3d400024a927"
243
+ "uuid": "62aa3d20-65d8-440f-9d08-48bbc823f4fe"
166
244
  },
167
245
  {
168
246
  "core": false,
247
+ "difficulty": 3,
248
+ "slug": "sublist",
249
+ "topics": [
250
+ "arrays",
251
+ "control-flow (loops)"
252
+ ],
253
+ "unlocked_by": "matrix",
254
+ "uuid": "4174c0c6-cb8a-474c-9327-737b7a86326e"
255
+ },
256
+ {
257
+ "core": true,
169
258
  "difficulty": 5,
170
259
  "slug": "error-handling",
171
260
  "topics": [
172
- "exception-handling"
261
+ "exception_handling"
173
262
  ],
174
- "unlocked_by": "queen-attack",
263
+ "unlocked_by": null,
175
264
  "uuid": "cd05b63b-df20-4c8d-8743-53033acf7696"
176
265
  },
266
+ {
267
+ "core": false,
268
+ "difficulty": 3,
269
+ "slug": "flatten-array",
270
+ "topics": [
271
+ "arrays",
272
+ "recursion"
273
+ ],
274
+ "unlocked_by": "error-handling",
275
+ "uuid": "40cc79a6-a6ea-45a0-944e-b4f3baabebc2"
276
+ },
277
+ {
278
+ "core": true,
279
+ "difficulty": 4,
280
+ "slug": "bank-account",
281
+ "topics": [
282
+ "concurrency",
283
+ "integers"
284
+ ],
285
+ "unlocked_by": null,
286
+ "uuid": "7cb6c78e-44e9-499b-a745-3ecb73bea3ab"
287
+ },
288
+ {
289
+ "core": false,
290
+ "difficulty": 5,
291
+ "slug": "paasio",
292
+ "topics": [
293
+ "concurrency",
294
+ "interfaces",
295
+ "networking"
296
+ ],
297
+ "unlocked_by": "bank-account",
298
+ "uuid": "5dbec590-7a50-4398-987b-7252734216a2"
299
+ },
300
+ {
301
+ "core": false,
302
+ "difficulty": 1,
303
+ "slug": "leap",
304
+ "topics": [
305
+ "booleans",
306
+ "conditionals",
307
+ "integers",
308
+ "logic"
309
+ ],
310
+ "unlocked_by": "two-fer",
311
+ "uuid": "fee57b09-2b67-4483-a2e5-3dfec0568b15"
312
+ },
313
+ {
314
+ "core": false,
315
+ "difficulty": 1,
316
+ "slug": "accumulate",
317
+ "topics": [
318
+ "lists"
319
+ ],
320
+ "unlocked_by": "raindrops",
321
+ "uuid": "fb03948c-11e8-440d-9a5d-979396451270"
322
+ },
323
+ {
324
+ "core": false,
325
+ "difficulty": 3,
326
+ "slug": "triangle",
327
+ "topics": [
328
+ "booleans",
329
+ "conditionals",
330
+ "logic"
331
+ ],
332
+ "unlocked_by": "leap",
333
+ "uuid": "6769557a-33fa-4257-adbf-e66dc8c06f85"
334
+ },
177
335
  {
178
336
  "core": false,
179
337
  "difficulty": 5,
180
338
  "slug": "secret-handshake",
181
339
  "topics": [
182
340
  "arrays",
183
- "bitwise-operations",
341
+ "bitwise_operations",
184
342
  "integers"
185
343
  ],
186
344
  "unlocked_by": "grains",
@@ -193,7 +351,7 @@
193
351
  "topics": [
194
352
  "recursion",
195
353
  "strings",
196
- "text-formatting"
354
+ "text_formatting"
197
355
  ],
198
356
  "unlocked_by": "twelve-days",
199
357
  "uuid": "11008fb0-4ef9-4aff-befb-c56f4084f96e"
@@ -203,14 +361,16 @@
203
361
  "difficulty": 4,
204
362
  "slug": "pascals-triangle",
205
363
  "topics": [
364
+ "algorithms",
206
365
  "arrays",
207
- "mathematics"
366
+ "mathematics",
367
+ "recursion"
208
368
  ],
209
- "unlocked_by": "series",
369
+ "unlocked_by": "tournament",
210
370
  "uuid": "92e2a192-5ee9-422a-8699-c231a7136b10"
211
371
  },
212
372
  {
213
- "core": true,
373
+ "core": false,
214
374
  "difficulty": 3,
215
375
  "slug": "series",
216
376
  "topics": [
@@ -218,76 +378,41 @@
218
378
  "refactoring",
219
379
  "strings"
220
380
  ],
221
- "unlocked_by": null,
381
+ "unlocked_by": "parallel-letter-frequency",
222
382
  "uuid": "2c5fb577-a9ce-4c4c-8fc8-fffb38d020d6"
223
383
  },
224
384
  {
225
- "core": true,
385
+ "core": false,
226
386
  "difficulty": 5,
227
387
  "slug": "queen-attack",
228
388
  "topics": [
229
389
  "booleans",
230
390
  "errors",
231
391
  "games",
232
- "logic"
392
+ "logic",
393
+ "mathematics"
233
394
  ],
234
- "unlocked_by": null,
395
+ "unlocked_by": "matrix",
235
396
  "uuid": "95f49a88-6f01-4905-a8b1-a3fcec1f535a"
236
397
  },
237
398
  {
238
- "core": true,
239
- "difficulty": 2,
240
- "slug": "grains",
241
- "topics": [
242
- "bitwise-operations",
243
- "control-flow-(if-else-statements)",
244
- "integers",
245
- "mathematics",
246
- "type-conversion"
247
- ],
248
- "unlocked_by": null,
249
- "uuid": "b4f6b08b-a132-447b-b447-66bf37ab20c6"
250
- },
251
- {
252
- "core": true,
399
+ "core": false,
253
400
  "difficulty": 1,
254
401
  "slug": "etl",
255
402
  "topics": [
256
- "control-flow-(loops)",
403
+ "loops",
257
404
  "maps",
258
405
  "transforming"
259
406
  ],
260
- "unlocked_by": null,
407
+ "unlocked_by": "scrabble-score",
261
408
  "uuid": "73da448c-33b7-4565-ab48-1de5020d65ab"
262
409
  },
263
- {
264
- "core": true,
265
- "difficulty": 1,
266
- "slug": "scrabble-score",
267
- "topics": [
268
- "control-flow-(loops)",
269
- "maps",
270
- "strings"
271
- ],
272
- "unlocked_by": null,
273
- "uuid": "20cbd8f9-f8e3-4767-a0f5-94810ba3f902"
274
- },
275
- {
276
- "core": true,
277
- "difficulty": 3,
278
- "slug": "parallel-letter-frequency",
279
- "topics": [
280
- "concurrency"
281
- ],
282
- "unlocked_by": null,
283
- "uuid": "bf366b19-63bf-4a75-9a35-08b881af6951"
284
- },
285
410
  {
286
411
  "core": false,
287
412
  "difficulty": 5,
288
413
  "slug": "sum-of-multiples",
289
414
  "topics": [
290
- "control-flow-(loops)",
415
+ "loops",
291
416
  "mathematics"
292
417
  ],
293
418
  "unlocked_by": "difference-of-squares",
@@ -306,25 +431,14 @@
306
431
  },
307
432
  {
308
433
  "core": false,
309
- "difficulty": 3,
310
- "slug": "isogram",
434
+ "difficulty": 2,
435
+ "slug": "pangram",
311
436
  "topics": [
312
- "sequences",
437
+ "loops",
313
438
  "strings"
314
439
  ],
315
- "unlocked_by": "pangram",
316
- "uuid": "c2064df8-cce5-4f03-9d85-0818b4e34112"
317
- },
318
- {
319
- "core": false,
320
- "difficulty": 4,
321
- "slug": "bank-account",
322
- "topics": [
323
- "concurrency",
324
- "integers"
325
- ],
326
- "unlocked_by": "parallel-letter-frequency",
327
- "uuid": "7cb6c78e-44e9-499b-a745-3ecb73bea3ab"
440
+ "unlocked_by": "isogram",
441
+ "uuid": "d14c6283-e57c-472c-8181-87f82d9088dd"
328
442
  },
329
443
  {
330
444
  "core": false,
@@ -334,34 +448,22 @@
334
448
  "cryptography",
335
449
  "filtering",
336
450
  "strings",
337
- "text-formatting",
451
+ "text_formatting",
338
452
  "transforming"
339
453
  ],
340
454
  "unlocked_by": "luhn",
341
455
  "uuid": "a1c065d9-6971-4286-8413-c944e2dddefa"
342
456
  },
343
- {
344
- "core": false,
345
- "difficulty": 2,
346
- "slug": "luhn",
347
- "topics": [
348
- "algorithms",
349
- "integers",
350
- "strings"
351
- ],
352
- "unlocked_by": "acronym",
353
- "uuid": "8b29da0e-8ead-4e72-a12a-d448c8434767"
354
- },
355
457
  {
356
458
  "core": false,
357
459
  "difficulty": 4,
358
460
  "slug": "food-chain",
359
461
  "topics": [
360
- "control-flow-(conditionals)",
361
- "control-flow-(loops)",
462
+ "conditionals",
463
+ "loops",
362
464
  "recursion",
363
465
  "strings",
364
- "text-formatting"
466
+ "text_formatting"
365
467
  ],
366
468
  "unlocked_by": "twelve-days",
367
469
  "uuid": "12a16ab5-35fc-4fb2-a018-504953f3ad80"
@@ -384,12 +486,12 @@
384
486
  "slug": "sieve",
385
487
  "topics": [
386
488
  "algorithms",
387
- "control-flow-(loops)",
388
489
  "integers",
490
+ "loops",
389
491
  "mathematics",
390
492
  "sorting"
391
493
  ],
392
- "unlocked_by": "strain",
494
+ "unlocked_by": "grains",
393
495
  "uuid": "c3469a26-b133-43b4-ab7d-32ea04fa5ce4"
394
496
  },
395
497
  {
@@ -400,7 +502,7 @@
400
502
  "algorithms",
401
503
  "mathematics"
402
504
  ],
403
- "unlocked_by": "perfect-numbers",
505
+ "unlocked_by": "robot-name",
404
506
  "uuid": "10f091b1-deda-4fec-8e3c-9dabb080d473"
405
507
  },
406
508
  {
@@ -412,7 +514,7 @@
412
514
  "maps",
413
515
  "sequences"
414
516
  ],
415
- "unlocked_by": "rna-transcription",
517
+ "unlocked_by": "scrabble-score",
416
518
  "uuid": "0b9e07de-c8e4-4d28-b589-897a7ef8062a"
417
519
  },
418
520
  {
@@ -425,7 +527,7 @@
425
527
  "integers",
426
528
  "mathematics"
427
529
  ],
428
- "unlocked_by": "clock",
530
+ "unlocked_by": "grains",
429
531
  "uuid": "362f93ab-51e8-4d6a-bd2f-b46432843eb9"
430
532
  },
431
533
  {
@@ -436,7 +538,7 @@
436
538
  "parsing",
437
539
  "strings"
438
540
  ],
439
- "unlocked_by": "poker",
541
+ "unlocked_by": "tree-building",
440
542
  "uuid": "6c2499f7-d42c-4d0f-9680-f5f7650023ff"
441
543
  },
442
544
  {
@@ -446,20 +548,21 @@
446
548
  "topics": [
447
549
  "filtering",
448
550
  "parsing",
551
+ "sorting",
449
552
  "strings"
450
553
  ],
451
- "unlocked_by": "scrabble-score",
554
+ "unlocked_by": "isogram",
452
555
  "uuid": "f1db7190-a53d-411d-b538-8dc3f75ddc32"
453
556
  },
454
557
  {
455
- "core": true,
558
+ "core": false,
456
559
  "difficulty": 3,
457
560
  "slug": "word-count",
458
561
  "topics": [
459
562
  "sorting",
460
563
  "strings"
461
564
  ],
462
- "unlocked_by": null,
565
+ "unlocked_by": "isogram",
463
566
  "uuid": "b765fde9-84b4-44cc-bdf1-f66ac1ab8e2c"
464
567
  },
465
568
  {
@@ -467,7 +570,7 @@
467
570
  "difficulty": 4,
468
571
  "slug": "allergies",
469
572
  "topics": [
470
- "bitwise-operations",
573
+ "bitwise_operations",
471
574
  "enumeration"
472
575
  ],
473
576
  "unlocked_by": "grains",
@@ -481,7 +584,7 @@
481
584
  "maps",
482
585
  "transforming"
483
586
  ],
484
- "unlocked_by": "scrabble-score",
587
+ "unlocked_by": "hamming",
485
588
  "uuid": "9bef2163-2a24-4d50-9610-e3cac2e7772a"
486
589
  },
487
590
  {
@@ -492,7 +595,7 @@
492
595
  "numbers",
493
596
  "transforming"
494
597
  ],
495
- "unlocked_by": "acronym",
598
+ "unlocked_by": "raindrops",
496
599
  "uuid": "eccfd2b3-93cf-41a8-b39b-c29596469e8e"
497
600
  },
498
601
  {
@@ -502,10 +605,10 @@
502
605
  "topics": [
503
606
  "numbers",
504
607
  "strings",
505
- "text-formatting",
608
+ "text_formatting",
506
609
  "transforming"
507
610
  ],
508
- "unlocked_by": "meetup",
611
+ "unlocked_by": "robot-name",
509
612
  "uuid": "5d742499-b130-458a-ba3e-a4c3d75419c3"
510
613
  },
511
614
  {
@@ -516,31 +619,21 @@
516
619
  "queues",
517
620
  "structs"
518
621
  ],
519
- "unlocked_by": "grade-school",
622
+ "unlocked_by": "error-handling",
520
623
  "uuid": "c13edd0a-cd39-4f25-970c-c1f9e32bac2c"
521
624
  },
522
- {
523
- "core": false,
524
- "difficulty": 3,
525
- "slug": "robot-name",
526
- "topics": [
527
- "randomness"
528
- ],
529
- "unlocked_by": "scrabble-score",
530
- "uuid": "86b8f1e6-e088-403e-984a-abd360f5dcef"
531
- },
532
625
  {
533
626
  "core": false,
534
627
  "difficulty": 4,
535
628
  "slug": "diamond",
536
629
  "topics": [
537
630
  "algorithms",
538
- "control-flow-(conditionals)",
539
- "control-flow-(loops)",
631
+ "conditionals",
632
+ "loops",
540
633
  "strings",
541
- "text-formatting"
634
+ "text_formatting"
542
635
  ],
543
- "unlocked_by": "series",
636
+ "unlocked_by": "tournament",
544
637
  "uuid": "47b9ad32-e9d9-4cbc-b106-540f3afbfa80"
545
638
  },
546
639
  {
@@ -548,9 +641,11 @@
548
641
  "difficulty": 9,
549
642
  "slug": "react",
550
643
  "topics": [
551
- "reactive-programming"
644
+ "callbacks",
645
+ "interfaces",
646
+ "reactive_programming"
552
647
  ],
553
- "unlocked_by": "queen-attack",
648
+ "unlocked_by": "bank-account",
554
649
  "uuid": "4b168cb9-605b-465d-8f89-3a3b760c1402"
555
650
  },
556
651
  {
@@ -558,11 +653,11 @@
558
653
  "difficulty": 4,
559
654
  "slug": "custom-set",
560
655
  "topics": [
561
- "control-flow-(loops)",
562
656
  "filtering",
657
+ "loops",
563
658
  "sets"
564
659
  ],
565
- "unlocked_by": "strain",
660
+ "unlocked_by": "error-handling",
566
661
  "uuid": "ad12bbf9-e0c8-433a-8a6b-847ff2d36acf"
567
662
  },
568
663
  {
@@ -583,24 +678,25 @@
583
678
  "difficulty": 3,
584
679
  "slug": "phone-number",
585
680
  "topics": [
586
- "control-flow-(conditionals)",
681
+ "conditionals",
682
+ "regular_expressions",
587
683
  "strings",
588
- "text-formatting",
684
+ "text_formatting",
589
685
  "transforming"
590
686
  ],
591
- "unlocked_by": "etl",
687
+ "unlocked_by": "clock",
592
688
  "uuid": "458053ea-43a9-409f-a1a6-a7f31329aca4"
593
689
  },
594
690
  {
595
- "core": true,
691
+ "core": false,
596
692
  "difficulty": 2,
597
693
  "slug": "strain",
598
694
  "topics": [
599
695
  "arrays",
600
- "control-flow-(loops)",
601
- "filtering"
696
+ "filtering",
697
+ "loops"
602
698
  ],
603
- "unlocked_by": null,
699
+ "unlocked_by": "accumulate",
604
700
  "uuid": "7fbb0d9d-71d1-4654-8ca0-bb07ddbe6cb5"
605
701
  },
606
702
  {
@@ -608,7 +704,7 @@
608
704
  "difficulty": 4,
609
705
  "slug": "pig-latin",
610
706
  "topics": [
611
- "control-flow-(conditionals)",
707
+ "conditionals",
612
708
  "strings",
613
709
  "transforming"
614
710
  ],
@@ -632,11 +728,11 @@
632
728
  "difficulty": 5,
633
729
  "slug": "transpose",
634
730
  "topics": [
635
- "control-flow-(loops)",
731
+ "loops",
636
732
  "strings",
637
733
  "transforming"
638
734
  ],
639
- "unlocked_by": "roman-numerals",
735
+ "unlocked_by": "matrix",
640
736
  "uuid": "7f19ebbd-b072-45e5-ad67-2fff8ad1c9e2"
641
737
  },
642
738
  {
@@ -669,9 +765,9 @@
669
765
  "difficulty": 3,
670
766
  "slug": "beer-song",
671
767
  "topics": [
672
- "control-flow-(loops)",
768
+ "loops",
673
769
  "strings",
674
- "text-formatting"
770
+ "text_formatting"
675
771
  ],
676
772
  "unlocked_by": "twelve-days",
677
773
  "uuid": "094ea17e-1759-443a-9117-7c72c6f68b8d"
@@ -682,9 +778,9 @@
682
778
  "slug": "ocr-numbers",
683
779
  "topics": [
684
780
  "parsing",
685
- "pattern-recognition"
781
+ "pattern_recognition"
686
782
  ],
687
- "unlocked_by": "poker",
783
+ "unlocked_by": "tournament",
688
784
  "uuid": "13e58d89-4dbb-4384-9268-2f8083588d7a"
689
785
  },
690
786
  {
@@ -692,13 +788,13 @@
692
788
  "difficulty": 3,
693
789
  "slug": "wordy",
694
790
  "topics": [
695
- "control-flow-(conditionals)",
791
+ "conditionals",
696
792
  "integers",
697
793
  "parsing",
698
794
  "strings",
699
- "type-conversion"
795
+ "type_conversion"
700
796
  ],
701
- "unlocked_by": "triangle",
797
+ "unlocked_by": "robot-name",
702
798
  "uuid": "1eb7d7b2-6367-4038-bb86-7dc6c682b6a3"
703
799
  },
704
800
  {
@@ -710,7 +806,7 @@
710
806
  "parsing",
711
807
  "strings"
712
808
  ],
713
- "unlocked_by": "scrabble-score",
809
+ "unlocked_by": "hamming",
714
810
  "uuid": "5911d90f-ba2f-482f-8c92-c01c112d6fdd"
715
811
  },
716
812
  {
@@ -722,23 +818,9 @@
722
818
  "sorting",
723
819
  "structs"
724
820
  ],
725
- "unlocked_by": "word-count",
821
+ "unlocked_by": "bank-account",
726
822
  "uuid": "aa598f3e-9d2b-4f9f-8c14-46e0ac27d5be"
727
823
  },
728
- {
729
- "core": true,
730
- "difficulty": 4,
731
- "slug": "matrix",
732
- "topics": [
733
- "arrays",
734
- "exception-handling",
735
- "matrices",
736
- "strings",
737
- "type-conversion"
738
- ],
739
- "unlocked_by": null,
740
- "uuid": "62aa3d20-65d8-440f-9d08-48bbc823f4fe"
741
- },
742
824
  {
743
825
  "core": false,
744
826
  "difficulty": 5,
@@ -760,13 +842,13 @@
760
842
  "dates",
761
843
  "time",
762
844
  "transforming",
763
- "type-conversion"
845
+ "type_conversion"
764
846
  ],
765
- "unlocked_by": "roman-numerals",
847
+ "unlocked_by": "clock",
766
848
  "uuid": "fcf735fe-a659-40ae-858e-6d1e834a4faf"
767
849
  },
768
850
  {
769
- "core": true,
851
+ "core": false,
770
852
  "difficulty": 5,
771
853
  "slug": "binary-search",
772
854
  "topics": [
@@ -775,7 +857,7 @@
775
857
  "searching",
776
858
  "sorting"
777
859
  ],
778
- "unlocked_by": null,
860
+ "unlocked_by": "tree-building",
779
861
  "uuid": "31c77516-6702-417e-9c6e-19c7e965d513"
780
862
  },
781
863
  {
@@ -793,19 +875,6 @@
793
875
  "unlocked_by": "binary-search",
794
876
  "uuid": "ac680609-4e52-468d-bf17-afbf7b2fa74b"
795
877
  },
796
- {
797
- "core": false,
798
- "difficulty": 3,
799
- "slug": "tree-building",
800
- "topics": [
801
- "records",
802
- "refactoring",
803
- "sorting",
804
- "trees"
805
- ],
806
- "unlocked_by": "series",
807
- "uuid": "d0a2afab-e30d-4617-b646-413a44ecf2ed"
808
- },
809
878
  {
810
879
  "core": false,
811
880
  "difficulty": 3,
@@ -817,7 +886,7 @@
817
886
  "strings",
818
887
  "structs"
819
888
  ],
820
- "unlocked_by": "clock",
889
+ "unlocked_by": "tournament",
821
890
  "uuid": "4282b1f6-d1a2-41b4-9a7f-a9a145fb283b"
822
891
  },
823
892
  {
@@ -834,18 +903,6 @@
834
903
  "unlocked_by": "luhn",
835
904
  "uuid": "7b9201fa-92d2-43fd-8b35-4c552336570b"
836
905
  },
837
- {
838
- "core": false,
839
- "difficulty": 5,
840
- "slug": "paasio",
841
- "topics": [
842
- "concurrency",
843
- "interfaces",
844
- "networking"
845
- ],
846
- "unlocked_by": "parallel-letter-frequency",
847
- "uuid": "5dbec590-7a50-4398-987b-7252734216a2"
848
- },
849
906
  {
850
907
  "core": false,
851
908
  "difficulty": 7,
@@ -866,12 +923,12 @@
866
923
  "slug": "minesweeper",
867
924
  "topics": [
868
925
  "arrays",
869
- "control-flow-(loops)",
870
926
  "games",
927
+ "loops",
871
928
  "matrices",
872
929
  "transforming"
873
930
  ],
874
- "unlocked_by": "sieve",
931
+ "unlocked_by": "matrix",
875
932
  "uuid": "3bf049f8-7283-4370-aa0c-e10e99d9ef80"
876
933
  },
877
934
  {
@@ -880,30 +937,14 @@
880
937
  "slug": "robot-simulator",
881
938
  "topics": [
882
939
  "concurrency",
883
- "control-flow-(loops)",
940
+ "loops",
884
941
  "sequences",
885
942
  "strings",
886
943
  "structs"
887
944
  ],
888
- "unlocked_by": "queen-attack",
945
+ "unlocked_by": "bank-account",
889
946
  "uuid": "fc0e4034-0744-43f8-9969-7789cff0607f"
890
947
  },
891
- {
892
- "core": false,
893
- "difficulty": 3,
894
- "slug": "tournament",
895
- "topics": [
896
- "integers",
897
- "parsing",
898
- "records",
899
- "sorting",
900
- "strings",
901
- "text-formatting",
902
- "transforming"
903
- ],
904
- "unlocked_by": "kindergarten-garden",
905
- "uuid": "572d03ec-d763-400e-ba4f-5a6a92d5af98"
906
- },
907
948
  {
908
949
  "core": false,
909
950
  "difficulty": 4,
@@ -925,7 +966,7 @@
925
966
  "mathematics",
926
967
  "transforming"
927
968
  ],
928
- "unlocked_by": "wordy",
969
+ "unlocked_by": "grains",
929
970
  "uuid": "932a7ed0-c331-49b1-917b-a197198f642a"
930
971
  },
931
972
  {
@@ -934,12 +975,12 @@
934
975
  "slug": "connect",
935
976
  "topics": [
936
977
  "arrays",
937
- "control-flow-(loops)",
938
978
  "games",
939
979
  "graphs",
980
+ "loops",
940
981
  "searching"
941
982
  ],
942
- "unlocked_by": "bowling",
983
+ "unlocked_by": "minesweeper",
943
984
  "uuid": "395116bc-5be9-4140-a2ef-c7e8689149f2"
944
985
  },
945
986
  {
@@ -953,9 +994,9 @@
953
994
  "refactoring",
954
995
  "sorting",
955
996
  "strings",
956
- "text-formatting"
997
+ "text_formatting"
957
998
  ],
958
- "unlocked_by": "series",
999
+ "unlocked_by": "tree-building",
959
1000
  "uuid": "7aa53a27-4ff3-4891-809f-2af728eb55a0"
960
1001
  },
961
1002
  {
@@ -966,7 +1007,7 @@
966
1007
  "equality",
967
1008
  "games",
968
1009
  "parsing",
969
- "pattern-matching",
1010
+ "pattern_matching",
970
1011
  "sequences",
971
1012
  "strings"
972
1013
  ],
@@ -978,7 +1019,7 @@
978
1019
  "difficulty": 5,
979
1020
  "slug": "variable-length-quantity",
980
1021
  "topics": [
981
- "bitwise-operations",
1022
+ "bitwise_operations",
982
1023
  "integers",
983
1024
  "transforming"
984
1025
  ],
@@ -990,11 +1031,11 @@
990
1031
  "difficulty": 8,
991
1032
  "slug": "forth",
992
1033
  "topics": [
993
- "domain-specific-languages",
1034
+ "domain_specific_languages",
994
1035
  "parsing",
995
1036
  "stacks"
996
1037
  ],
997
- "unlocked_by": "bracket-push",
1038
+ "unlocked_by": "bank-account",
998
1039
  "uuid": "09d0d78f-f262-4f34-b1de-c2acd7ed80cd"
999
1040
  },
1000
1041
  {
@@ -1004,11 +1045,11 @@
1004
1045
  "topics": [
1005
1046
  "algorithms",
1006
1047
  "arrays",
1007
- "control-flow-(loops)",
1048
+ "loops",
1008
1049
  "mathematics",
1009
1050
  "searching"
1010
1051
  ],
1011
- "unlocked_by": "kindergarten-garden",
1052
+ "unlocked_by": "bank-account",
1012
1053
  "uuid": "94a21509-ebd5-4a66-bb0e-0341e57e3c73"
1013
1054
  },
1014
1055
  {
@@ -1018,11 +1059,83 @@
1018
1059
  "topics": [
1019
1060
  "algorithms",
1020
1061
  "arrays",
1021
- "control-flow-(conditionals)"
1062
+ "conditionals"
1022
1063
  ],
1023
- "unlocked_by": "queen-attack",
1064
+ "unlocked_by": "poker",
1024
1065
  "uuid": "8d5aaf47-7503-4797-85ed-d35a8755cfd4"
1025
1066
  },
1067
+ {
1068
+ "core": false,
1069
+ "difficulty": 4,
1070
+ "slug": "run-length-encoding",
1071
+ "topics": [
1072
+ "parsing",
1073
+ "strings",
1074
+ "transforming"
1075
+ ],
1076
+ "unlocked_by": "isogram",
1077
+ "uuid": "29ea064e-9d2a-11e7-abc4-cec278b6b50a"
1078
+ },
1079
+ {
1080
+ "core": false,
1081
+ "difficulty": 1,
1082
+ "slug": "collatz-conjecture",
1083
+ "topics": [
1084
+ "control-flow (loops)",
1085
+ "integers",
1086
+ "mathematics",
1087
+ "conditionals"
1088
+ ],
1089
+ "unlocked_by": null,
1090
+ "uuid": "0c17444e-65b0-4bc8-a7e1-ee6ab8c2e078"
1091
+ },
1092
+ {
1093
+ "core": false,
1094
+ "difficulty": 4,
1095
+ "slug": "spiral-matrix",
1096
+ "topics": [
1097
+ "loops",
1098
+ "arrays",
1099
+ "matrices"
1100
+ ],
1101
+ "unlocked_by": "matrix",
1102
+ "uuid": "4fc21001-2ada-41f6-92b6-cf0152df18bf"
1103
+ },
1104
+ {
1105
+ "core": false,
1106
+ "difficulty": 8,
1107
+ "slug": "book-store",
1108
+ "topics": [
1109
+ "integers",
1110
+ "lists",
1111
+ "algorithms",
1112
+ "mathematics",
1113
+ "floating_point_numbers"
1114
+ ],
1115
+ "unlocked_by": "flatten-array",
1116
+ "uuid": "9265ef0c-a882-4e2e-9689-cd4fddac6097"
1117
+ },
1118
+ {
1119
+ "core": false,
1120
+ "difficulty": 2,
1121
+ "slug": "rotational-cipher",
1122
+ "topics": [
1123
+ "integers",
1124
+ "strings",
1125
+ "cryptography"
1126
+ ],
1127
+ "unlocked_by": "luhn",
1128
+ "uuid": "37821140-c0d0-4da8-8f50-47356705a615"
1129
+ },
1130
+ {
1131
+ "difficulty": 2,
1132
+ "slug": "isbn-verifier",
1133
+ "topics": [
1134
+ "arrays"
1135
+ ],
1136
+ "unlocked_by": "difference-of-squares",
1137
+ "uuid": "6b93edd9-0de4-4c80-6419-68b2f8232b91c3425fa"
1138
+ },
1026
1139
  {
1027
1140
  "deprecated": true,
1028
1141
  "slug": "binary",
@@ -1050,7 +1163,6 @@
1050
1163
  }
1051
1164
  ],
1052
1165
  "foregone": [
1053
- "space-age",
1054
1166
  "linked-list",
1055
1167
  "simple-linked-list"
1056
1168
  ],