trackler 2.2.0.3 → 2.2.0.4

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 (463) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/list-ops/canonical-data.json +27 -11
  4. data/problem-specifications/exercises/rotational-cipher/canonical-data.json +8 -8
  5. data/tracks/clojure/config.json +240 -63
  6. data/tracks/cpp/CMakeLists.txt +1 -0
  7. data/tracks/cpp/config.json +8 -0
  8. data/tracks/cpp/exercises/bracket-push/CMakeLists.txt +52 -0
  9. data/tracks/cpp/exercises/bracket-push/bracket_push_test.cpp +75 -0
  10. data/tracks/cpp/exercises/bracket-push/example.cpp +28 -0
  11. data/tracks/cpp/exercises/bracket-push/example.h +13 -0
  12. data/tracks/ecmascript/config.json +235 -71
  13. data/tracks/ecmascript/config/exercise_readme.go.tmpl +16 -0
  14. data/tracks/ecmascript/exercises/accumulate/README.md +65 -0
  15. data/tracks/ecmascript/exercises/acronym/README.md +45 -0
  16. data/tracks/ecmascript/exercises/all-your-base/README.md +65 -0
  17. data/tracks/ecmascript/exercises/allergies/README.md +67 -0
  18. data/tracks/ecmascript/exercises/alphametics/README.md +65 -0
  19. data/tracks/ecmascript/exercises/anagram/README.md +43 -0
  20. data/tracks/ecmascript/exercises/atbash-cipher/README.md +64 -0
  21. data/tracks/ecmascript/exercises/beer-song/README.md +357 -0
  22. data/tracks/ecmascript/exercises/binary-search-tree/README.md +90 -0
  23. data/tracks/ecmascript/exercises/binary-search/README.md +71 -0
  24. data/tracks/ecmascript/exercises/binary/README.md +65 -0
  25. data/tracks/ecmascript/exercises/bob/README.md +48 -0
  26. data/tracks/ecmascript/exercises/bracket-push/README.md +40 -0
  27. data/tracks/ecmascript/exercises/circular-buffer/README.md +80 -0
  28. data/tracks/ecmascript/exercises/clock/README.md +43 -0
  29. data/tracks/ecmascript/exercises/connect/README.md +64 -0
  30. data/tracks/ecmascript/exercises/crypto-square/README.md +104 -0
  31. data/tracks/ecmascript/exercises/custom-set/README.md +41 -0
  32. data/tracks/ecmascript/exercises/diamond/README.md +89 -0
  33. data/tracks/ecmascript/exercises/difference-of-squares/README.md +49 -0
  34. data/tracks/ecmascript/exercises/diffie-hellman/README.md +74 -0
  35. data/tracks/ecmascript/exercises/etl/README.md +81 -0
  36. data/tracks/ecmascript/exercises/flatten-array/README.md +48 -0
  37. data/tracks/ecmascript/exercises/food-chain/README.md +100 -0
  38. data/tracks/ecmascript/exercises/gigasecond/README.md +41 -0
  39. data/tracks/ecmascript/exercises/grade-school/README.md +72 -0
  40. data/tracks/ecmascript/exercises/grains/README.md +64 -0
  41. data/tracks/ecmascript/exercises/hamming/README.md +72 -0
  42. data/tracks/ecmascript/exercises/hello-world/README.md +51 -0
  43. data/tracks/ecmascript/exercises/hexadecimal/README.md +44 -0
  44. data/tracks/ecmascript/exercises/isogram/README.md +49 -0
  45. data/tracks/ecmascript/exercises/kindergarten-garden/README.md +96 -0
  46. data/tracks/ecmascript/exercises/largest-series-product/README.md +50 -0
  47. data/tracks/ecmascript/exercises/leap/README.md +63 -0
  48. data/tracks/ecmascript/exercises/linked-list/README.md +64 -0
  49. data/tracks/ecmascript/exercises/list-ops/README.md +40 -0
  50. data/tracks/ecmascript/exercises/luhn/README.md +101 -0
  51. data/tracks/ecmascript/exercises/matrix/README.md +75 -0
  52. data/tracks/ecmascript/exercises/meetup/README.md +60 -0
  53. data/tracks/ecmascript/exercises/minesweeper/README.md +60 -0
  54. data/tracks/ecmascript/exercises/nth-prime/README.md +45 -0
  55. data/tracks/ecmascript/exercises/ocr-numbers/README.md +115 -0
  56. data/tracks/ecmascript/exercises/octal/README.md +79 -0
  57. data/tracks/ecmascript/exercises/palindrome-products/README.md +70 -0
  58. data/tracks/ecmascript/exercises/pangram/README.md +45 -0
  59. data/tracks/ecmascript/exercises/pascals-triangle/README.md +51 -0
  60. data/tracks/ecmascript/exercises/perfect-numbers/README.md +54 -0
  61. data/tracks/ecmascript/exercises/phone-number/README.md +64 -0
  62. data/tracks/ecmascript/exercises/pig-latin/README.md +54 -0
  63. data/tracks/ecmascript/exercises/prime-factors/README.md +66 -0
  64. data/tracks/ecmascript/exercises/pythagorean-triplet/README.md +54 -0
  65. data/tracks/ecmascript/exercises/queen-attack/README.md +63 -0
  66. data/tracks/ecmascript/exercises/raindrops/README.md +54 -0
  67. data/tracks/ecmascript/exercises/rna-transcription/README.md +55 -0
  68. data/tracks/ecmascript/exercises/robot-name/README.md +52 -0
  69. data/tracks/ecmascript/exercises/robot-simulator/README.md +64 -0
  70. data/tracks/ecmascript/exercises/roman-numerals/README.md +79 -0
  71. data/tracks/ecmascript/exercises/saddle-points/README.md +63 -0
  72. data/tracks/ecmascript/exercises/say/README.md +99 -0
  73. data/tracks/ecmascript/exercises/scrabble-score/README.md +74 -0
  74. data/tracks/ecmascript/exercises/secret-handshake/README.md +65 -0
  75. data/tracks/ecmascript/exercises/series/README.md +57 -0
  76. data/tracks/ecmascript/exercises/sieve/README.md +64 -0
  77. data/tracks/ecmascript/exercises/simple-cipher/README.md +120 -0
  78. data/tracks/ecmascript/exercises/space-age/README.md +54 -0
  79. data/tracks/ecmascript/exercises/strain/README.md +70 -0
  80. data/tracks/ecmascript/exercises/sublist/README.md +50 -0
  81. data/tracks/ecmascript/exercises/sublist/example.js +30 -0
  82. data/tracks/ecmascript/exercises/sublist/package.json +69 -0
  83. data/tracks/ecmascript/exercises/sublist/sublist.spec.js +126 -0
  84. data/tracks/ecmascript/exercises/sum-of-multiples/README.md +48 -0
  85. data/tracks/ecmascript/exercises/triangle/README.md +56 -0
  86. data/tracks/ecmascript/exercises/trinary/README.md +58 -0
  87. data/tracks/ecmascript/exercises/two-bucket/README.md +66 -0
  88. data/tracks/ecmascript/exercises/word-count/README.md +49 -0
  89. data/tracks/ecmascript/exercises/wordy/README.md +93 -0
  90. data/tracks/go/.gitignore +1 -0
  91. data/tracks/go/README.md +2 -0
  92. data/tracks/go/config/exercise_readme.go.tmpl +16 -0
  93. data/tracks/go/exercises/accumulate/README.md +53 -0
  94. data/tracks/go/exercises/acronym/README.md +33 -0
  95. data/tracks/go/exercises/all-your-base/README.md +53 -0
  96. data/tracks/go/exercises/allergies/README.md +55 -0
  97. data/tracks/go/exercises/anagram/README.md +31 -0
  98. data/tracks/go/exercises/atbash-cipher/README.md +52 -0
  99. data/tracks/go/exercises/bank-account/README.md +48 -0
  100. data/tracks/go/exercises/beer-song/README.md +345 -0
  101. data/tracks/go/exercises/binary-search-tree/README.md +78 -0
  102. data/tracks/go/exercises/binary-search/README.md +59 -0
  103. data/tracks/go/exercises/binary/README.md +53 -0
  104. data/tracks/go/exercises/bob/README.md +36 -0
  105. data/tracks/go/exercises/bowling/README.md +71 -0
  106. data/tracks/go/exercises/bracket-push/README.md +28 -0
  107. data/tracks/go/exercises/change/README.md +41 -0
  108. data/tracks/go/exercises/circular-buffer/README.md +68 -0
  109. data/tracks/go/exercises/clock/README.md +31 -0
  110. data/tracks/go/exercises/connect/README.md +52 -0
  111. data/tracks/go/exercises/counter/README.md +42 -0
  112. data/tracks/go/exercises/crypto-square/README.md +92 -0
  113. data/tracks/go/exercises/custom-set/README.md +29 -0
  114. data/tracks/go/exercises/diamond/README.md +77 -0
  115. data/tracks/go/exercises/difference-of-squares/README.md +37 -0
  116. data/tracks/go/exercises/diffie-hellman/README.md +62 -0
  117. data/tracks/go/exercises/error-handling/README.md +31 -0
  118. data/tracks/go/exercises/etl/README.md +69 -0
  119. data/tracks/go/exercises/food-chain/README.md +88 -0
  120. data/tracks/go/exercises/forth/README.md +47 -0
  121. data/tracks/go/exercises/gigasecond/README.md +29 -0
  122. data/tracks/go/exercises/grade-school/README.md +60 -0
  123. data/tracks/go/exercises/grains/README.md +52 -0
  124. data/tracks/go/exercises/hamming/README.md +60 -0
  125. data/tracks/go/exercises/hello-world/README.md +39 -0
  126. data/tracks/go/exercises/hexadecimal/README.md +32 -0
  127. data/tracks/go/exercises/house/README.md +131 -0
  128. data/tracks/go/exercises/isogram/README.md +37 -0
  129. data/tracks/go/exercises/kindergarten-garden/README.md +84 -0
  130. data/tracks/go/exercises/largest-series-product/README.md +38 -0
  131. data/tracks/go/exercises/leap/README.md +51 -0
  132. data/tracks/go/exercises/ledger/README.md +36 -0
  133. data/tracks/go/exercises/luhn/README.md +89 -0
  134. data/tracks/go/exercises/matrix/README.md +63 -0
  135. data/tracks/go/exercises/meetup/README.md +48 -0
  136. data/tracks/go/exercises/minesweeper/README.md +48 -0
  137. data/tracks/go/exercises/nth-prime/README.md +33 -0
  138. data/tracks/go/exercises/nucleotide-count/README.md +51 -0
  139. data/tracks/go/exercises/ocr-numbers/README.md +103 -0
  140. data/tracks/go/exercises/octal/README.md +67 -0
  141. data/tracks/go/exercises/paasio/README.md +38 -0
  142. data/tracks/go/exercises/palindrome-products/README.md +58 -0
  143. data/tracks/go/exercises/pangram/README.md +33 -0
  144. data/tracks/go/exercises/parallel-letter-frequency/README.md +29 -0
  145. data/tracks/go/exercises/pascals-triangle/README.md +39 -0
  146. data/tracks/go/exercises/perfect-numbers/README.md +42 -0
  147. data/tracks/go/exercises/phone-number/README.md +52 -0
  148. data/tracks/go/exercises/pig-latin/README.md +42 -0
  149. data/tracks/go/exercises/poker/README.md +30 -0
  150. data/tracks/go/exercises/pov/README.md +64 -0
  151. data/tracks/go/exercises/prime-factors/README.md +54 -0
  152. data/tracks/go/exercises/protein-translation/README.md +67 -0
  153. data/tracks/go/exercises/pythagorean-triplet/README.md +42 -0
  154. data/tracks/go/exercises/queen-attack/README.md +51 -0
  155. data/tracks/go/exercises/raindrops/README.md +42 -0
  156. data/tracks/go/exercises/react/README.md +37 -0
  157. data/tracks/go/exercises/rna-transcription/README.md +43 -0
  158. data/tracks/go/exercises/robot-name/README.md +40 -0
  159. data/tracks/go/exercises/robot-simulator/README.md +52 -0
  160. data/tracks/go/exercises/roman-numerals/README.md +67 -0
  161. data/tracks/go/exercises/saddle-points/README.md +51 -0
  162. data/tracks/go/exercises/say/README.md +87 -0
  163. data/tracks/go/exercises/scrabble-score/README.md +62 -0
  164. data/tracks/go/exercises/secret-handshake/README.md +53 -0
  165. data/tracks/go/exercises/series/README.md +45 -0
  166. data/tracks/go/exercises/sieve/README.md +52 -0
  167. data/tracks/go/exercises/simple-cipher/README.md +108 -0
  168. data/tracks/go/exercises/strain/README.md +58 -0
  169. data/tracks/go/exercises/sum-of-multiples/README.md +36 -0
  170. data/tracks/go/exercises/tournament/README.md +86 -0
  171. data/tracks/go/exercises/transpose/README.md +83 -0
  172. data/tracks/go/exercises/tree-building/README.md +48 -0
  173. data/tracks/go/exercises/triangle/README.md +44 -0
  174. data/tracks/go/exercises/trinary/README.md +46 -0
  175. data/tracks/go/exercises/twelve-days/README.md +57 -0
  176. data/tracks/go/exercises/variable-length-quantity/README.md +57 -0
  177. data/tracks/go/exercises/word-count/README.md +37 -0
  178. data/tracks/go/exercises/word-search/README.md +48 -0
  179. data/tracks/go/exercises/wordy/README.md +81 -0
  180. data/tracks/haskell/README.md +2 -2
  181. data/tracks/haskell/exercises/beer-song/test/Tests.hs +1 -1
  182. data/tracks/haskell/exercises/food-chain/test/Tests.hs +1 -1
  183. data/tracks/haskell/exercises/house/test/Tests.hs +1 -1
  184. data/tracks/haskell/exercises/say/test/Tests.hs +1 -1
  185. data/tracks/java/config.json +10 -10
  186. data/tracks/java/exercises/rotational-cipher/src/example/java/RotationalCipher.java +5 -8
  187. data/tracks/java/exercises/rotational-cipher/src/test/java/RotationalCipherTest.java +3 -6
  188. data/tracks/javascript/config.json +397 -140
  189. data/tracks/kotlin/config.json +248 -63
  190. data/tracks/kotlin/config/exercise_readme.go.tmpl +16 -0
  191. data/tracks/kotlin/exercises/accumulate/README.md +38 -0
  192. data/tracks/kotlin/exercises/acronym/README.md +18 -0
  193. data/tracks/kotlin/exercises/all-your-base/README.md +38 -0
  194. data/tracks/kotlin/exercises/allergies/README.md +40 -0
  195. data/tracks/kotlin/exercises/anagram/README.md +16 -0
  196. data/tracks/kotlin/exercises/atbash-cipher/README.md +37 -0
  197. data/tracks/kotlin/exercises/bank-account/README.md +33 -0
  198. data/tracks/kotlin/exercises/beer-song/README.md +330 -0
  199. data/tracks/kotlin/exercises/binary-search/README.md +44 -0
  200. data/tracks/kotlin/exercises/binary/README.md +38 -0
  201. data/tracks/kotlin/exercises/bob/README.md +21 -0
  202. data/tracks/kotlin/exercises/bracket-push/README.md +13 -0
  203. data/tracks/kotlin/exercises/change/README.md +26 -0
  204. data/tracks/kotlin/exercises/clock/README.md +16 -0
  205. data/tracks/kotlin/exercises/collatz-conjecture/README.md +36 -0
  206. data/tracks/kotlin/exercises/complex-numbers/README.md +14 -0
  207. data/tracks/kotlin/exercises/diamond/README.md +62 -0
  208. data/tracks/kotlin/exercises/difference-of-squares/README.md +22 -0
  209. data/tracks/kotlin/exercises/etl/README.md +54 -0
  210. data/tracks/kotlin/exercises/flatten-array/README.md +21 -0
  211. data/tracks/kotlin/exercises/gigasecond/README.md +14 -0
  212. data/tracks/kotlin/exercises/grade-school/README.md +45 -0
  213. data/tracks/kotlin/exercises/grains/README.md +37 -0
  214. data/tracks/kotlin/exercises/hamming/README.md +45 -0
  215. data/tracks/kotlin/exercises/hello-world/README.md +24 -0
  216. data/tracks/kotlin/exercises/hexadecimal/README.md +17 -0
  217. data/tracks/kotlin/exercises/isogram/README.md +22 -0
  218. data/tracks/kotlin/exercises/largest-series-product/README.md +23 -0
  219. data/tracks/kotlin/exercises/leap/README.md +36 -0
  220. data/tracks/kotlin/exercises/linked-list/README.md +37 -0
  221. data/tracks/kotlin/exercises/list-ops/README.md +20 -0
  222. data/tracks/kotlin/exercises/luhn/README.md +74 -0
  223. data/tracks/kotlin/exercises/minesweeper/README.md +33 -0
  224. data/tracks/kotlin/exercises/nth-prime/README.md +18 -0
  225. data/tracks/kotlin/exercises/nucleotide-count/README.md +36 -0
  226. data/tracks/kotlin/exercises/pangram/README.md +18 -0
  227. data/tracks/kotlin/exercises/pascals-triangle/README.md +24 -0
  228. data/tracks/kotlin/exercises/perfect-numbers/README.md +27 -0
  229. data/tracks/kotlin/exercises/phone-number/README.md +37 -0
  230. data/tracks/kotlin/exercises/pig-latin/README.md +27 -0
  231. data/tracks/kotlin/exercises/prime-factors/README.md +39 -0
  232. data/tracks/kotlin/exercises/raindrops/README.md +27 -0
  233. data/tracks/kotlin/exercises/react/README.md +22 -0
  234. data/tracks/kotlin/exercises/rna-transcription/README.md +28 -0
  235. data/tracks/kotlin/exercises/robot-name/README.md +25 -0
  236. data/tracks/kotlin/exercises/robot-simulator/README.md +37 -0
  237. data/tracks/kotlin/exercises/roman-numerals/README.md +52 -0
  238. data/tracks/kotlin/exercises/saddle-points/README.md +36 -0
  239. data/tracks/kotlin/exercises/scrabble-score/README.md +47 -0
  240. data/tracks/kotlin/exercises/secret-handshake/README.md +38 -0
  241. data/tracks/kotlin/exercises/series/README.md +30 -0
  242. data/tracks/kotlin/exercises/sieve/README.md +37 -0
  243. data/tracks/kotlin/exercises/simple-cipher/README.md +93 -0
  244. data/tracks/kotlin/exercises/space-age/README.md +27 -0
  245. data/tracks/kotlin/exercises/spiral-matrix/README.md +33 -0
  246. data/tracks/kotlin/exercises/strain/README.md +43 -0
  247. data/tracks/kotlin/exercises/sublist/README.md +24 -0
  248. data/tracks/kotlin/exercises/sum-of-multiples/README.md +21 -0
  249. data/tracks/kotlin/exercises/triangle/README.md +29 -0
  250. data/tracks/kotlin/exercises/word-count/README.md +22 -0
  251. data/tracks/ocaml/config/exercise_readme.go.tmpl +16 -0
  252. data/tracks/ocaml/exercises/acronym/README.md +55 -0
  253. data/tracks/ocaml/exercises/all-your-base/README.md +75 -0
  254. data/tracks/ocaml/exercises/anagram/README.md +53 -0
  255. data/tracks/ocaml/exercises/atbash-cipher/README.md +93 -0
  256. data/tracks/ocaml/exercises/beer-song/README.md +367 -0
  257. data/tracks/ocaml/exercises/binary-search/README.md +81 -0
  258. data/tracks/ocaml/exercises/bob/README.md +87 -0
  259. data/tracks/ocaml/exercises/bowling/README.md +93 -0
  260. data/tracks/ocaml/exercises/bracket-push/README.md +50 -0
  261. data/tracks/ocaml/exercises/change/README.md +63 -0
  262. data/tracks/ocaml/exercises/connect/README.md +74 -0
  263. data/tracks/ocaml/exercises/custom-set/README.md +51 -0
  264. data/tracks/ocaml/exercises/difference-of-squares/README.md +59 -0
  265. data/tracks/ocaml/exercises/dominoes/README.md +58 -0
  266. data/tracks/ocaml/exercises/etl/README.md +91 -0
  267. data/tracks/ocaml/exercises/forth/README.md +69 -0
  268. data/tracks/ocaml/exercises/grade-school/README.md +82 -0
  269. data/tracks/ocaml/exercises/hamming/README.md +82 -0
  270. data/tracks/ocaml/exercises/hangman/README.md +61 -0
  271. data/tracks/ocaml/exercises/hello-world/README.md +61 -0
  272. data/tracks/ocaml/exercises/hexadecimal/README.md +54 -0
  273. data/tracks/ocaml/exercises/leap/README.md +73 -0
  274. data/tracks/ocaml/exercises/list-ops/README.md +50 -0
  275. data/tracks/ocaml/exercises/luhn/README.md +111 -0
  276. data/tracks/ocaml/exercises/meetup/README.md +70 -0
  277. data/tracks/ocaml/exercises/minesweeper/README.md +70 -0
  278. data/tracks/ocaml/exercises/nucleotide-count/README.md +73 -0
  279. data/tracks/ocaml/exercises/pangram/README.md +55 -0
  280. data/tracks/ocaml/exercises/phone-number/README.md +74 -0
  281. data/tracks/ocaml/exercises/point-mutations/README.md +81 -0
  282. data/tracks/ocaml/exercises/prime-factors/README.md +76 -0
  283. data/tracks/ocaml/exercises/raindrops/README.md +64 -0
  284. data/tracks/ocaml/exercises/react/README.md +59 -0
  285. data/tracks/ocaml/exercises/rna-transcription/README.md +65 -0
  286. data/tracks/ocaml/exercises/robot-name/README.md +62 -0
  287. data/tracks/ocaml/exercises/roman-numerals/README.md +89 -0
  288. data/tracks/ocaml/exercises/run-length-encoding/README.md +70 -0
  289. data/tracks/ocaml/exercises/say/README.md +109 -0
  290. data/tracks/ocaml/exercises/space-age/README.md +64 -0
  291. data/tracks/ocaml/exercises/triangle/README.md +66 -0
  292. data/tracks/ocaml/exercises/word-count/README.md +59 -0
  293. data/tracks/ocaml/exercises/zipper/README.md +71 -0
  294. data/tracks/perl5/README.md +1 -1
  295. data/tracks/perl5/config/exercise_readme.go.tmpl +16 -0
  296. data/tracks/perl5/exercises/accumulate/README.md +35 -0
  297. data/tracks/perl5/exercises/all-your-base/README.md +35 -0
  298. data/tracks/perl5/exercises/allergies/README.md +37 -0
  299. data/tracks/perl5/exercises/anagram/README.md +13 -0
  300. data/tracks/perl5/exercises/atbash-cipher/README.md +34 -0
  301. data/tracks/perl5/exercises/beer-song/README.md +327 -0
  302. data/tracks/perl5/exercises/binary-search-tree/README.md +60 -0
  303. data/tracks/perl5/exercises/binary-search/README.md +41 -0
  304. data/tracks/perl5/exercises/binary/README.md +35 -0
  305. data/tracks/perl5/exercises/bob/README.md +18 -0
  306. data/tracks/perl5/exercises/clock/README.md +13 -0
  307. data/tracks/perl5/exercises/crypto-square/README.md +74 -0
  308. data/tracks/perl5/exercises/custom-set/README.md +11 -0
  309. data/tracks/perl5/exercises/difference-of-squares/README.md +19 -0
  310. data/tracks/perl5/exercises/etl/README.md +51 -0
  311. data/tracks/perl5/exercises/food-chain/README.md +70 -0
  312. data/tracks/perl5/exercises/gigasecond/README.md +11 -0
  313. data/tracks/perl5/exercises/grade-school/README.md +42 -0
  314. data/tracks/perl5/exercises/grains/README.md +34 -0
  315. data/tracks/perl5/exercises/hamming/README.md +42 -0
  316. data/tracks/perl5/exercises/hello-world/README.md +21 -0
  317. data/tracks/perl5/exercises/hexadecimal/README.md +14 -0
  318. data/tracks/perl5/exercises/house/README.md +113 -0
  319. data/tracks/perl5/exercises/kindergarten-garden/README.md +66 -0
  320. data/tracks/perl5/exercises/largest-series-product/README.md +20 -0
  321. data/tracks/perl5/exercises/leap/README.md +33 -0
  322. data/tracks/perl5/exercises/linked-list/README.md +34 -0
  323. data/tracks/perl5/exercises/list-ops/README.md +10 -0
  324. data/tracks/perl5/exercises/luhn/Example.pm +20 -42
  325. data/tracks/perl5/exercises/luhn/Luhn.pm +9 -0
  326. data/tracks/perl5/exercises/luhn/README.md +71 -0
  327. data/tracks/perl5/exercises/luhn/example.yaml +38 -0
  328. data/tracks/perl5/exercises/luhn/luhn.t +127 -26
  329. data/tracks/perl5/exercises/matrix/README.md +45 -0
  330. data/tracks/perl5/exercises/meetup/README.md +30 -0
  331. data/tracks/perl5/exercises/minesweeper/README.md +30 -0
  332. data/tracks/perl5/exercises/nucleotide-count/README.md +33 -0
  333. data/tracks/perl5/exercises/ocr-numbers/README.md +85 -0
  334. data/tracks/perl5/exercises/palindrome-products/README.md +40 -0
  335. data/tracks/perl5/exercises/pascals-triangle/README.md +21 -0
  336. data/tracks/perl5/exercises/phone-number/Example.pm +6 -26
  337. data/tracks/perl5/exercises/phone-number/PhoneNumber.pm +5 -0
  338. data/tracks/perl5/exercises/phone-number/README.md +34 -0
  339. data/tracks/perl5/exercises/phone-number/example.yaml +15 -0
  340. data/tracks/perl5/exercises/phone-number/phone-number.t +138 -0
  341. data/tracks/perl5/exercises/pig-latin/README.md +24 -0
  342. data/tracks/perl5/exercises/point-mutations/README.md +41 -0
  343. data/tracks/perl5/exercises/prime-factors/README.md +36 -0
  344. data/tracks/perl5/exercises/proverb/README.md +18 -0
  345. data/tracks/perl5/exercises/pythagorean-triplet/README.md +24 -0
  346. data/tracks/perl5/exercises/queen-attack/README.md +33 -0
  347. data/tracks/perl5/exercises/raindrops/README.md +24 -0
  348. data/tracks/perl5/exercises/rna-transcription/README.md +25 -0
  349. data/tracks/perl5/exercises/robot-name/README.md +22 -0
  350. data/tracks/perl5/exercises/robot-simulator/README.md +34 -0
  351. data/tracks/perl5/exercises/roman-numerals/README.md +49 -0
  352. data/tracks/perl5/exercises/saddle-points/README.md +33 -0
  353. data/tracks/perl5/exercises/say/README.md +69 -0
  354. data/tracks/perl5/exercises/scrabble-score/README.md +44 -0
  355. data/tracks/perl5/exercises/secret-handshake/README.md +35 -0
  356. data/tracks/perl5/exercises/series/README.md +27 -0
  357. data/tracks/perl5/exercises/sieve/README.md +34 -0
  358. data/tracks/perl5/exercises/simple-cipher/README.md +90 -0
  359. data/tracks/perl5/exercises/simple-linked-list/README.md +28 -0
  360. data/tracks/perl5/exercises/space-age/README.md +24 -0
  361. data/tracks/perl5/exercises/strain/README.md +40 -0
  362. data/tracks/perl5/exercises/sublist/README.md +21 -0
  363. data/tracks/perl5/exercises/sum-of-multiples/README.md +18 -0
  364. data/tracks/perl5/exercises/triangle/README.md +26 -0
  365. data/tracks/perl5/exercises/trinary/README.md +28 -0
  366. data/tracks/perl5/exercises/twelve-days/README.md +35 -0
  367. data/tracks/perl5/exercises/word-count/README.md +19 -0
  368. data/tracks/perl5/exercises/wordy/README.md +63 -0
  369. data/tracks/perl6/README.md +1 -1
  370. data/tracks/perl6/config/exercise_readme.go.tmpl +16 -0
  371. data/tracks/perl6/exercises/accumulate/README.md +50 -0
  372. data/tracks/perl6/exercises/all-your-base/README.md +50 -0
  373. data/tracks/perl6/exercises/allergies/README.md +52 -0
  374. data/tracks/perl6/exercises/anagram/README.md +28 -0
  375. data/tracks/perl6/exercises/atbash-cipher/README.md +49 -0
  376. data/tracks/perl6/exercises/binary/README.md +50 -0
  377. data/tracks/perl6/exercises/bob/README.md +33 -0
  378. data/tracks/perl6/exercises/clock/README.md +28 -0
  379. data/tracks/perl6/exercises/flatten-array/README.md +33 -0
  380. data/tracks/perl6/exercises/grade-school/README.md +57 -0
  381. data/tracks/perl6/exercises/grains/README.md +49 -0
  382. data/tracks/perl6/exercises/hello-world/README.md +36 -0
  383. data/tracks/perl6/exercises/leap/README.md +48 -0
  384. data/tracks/perl6/exercises/linked-list/README.md +49 -0
  385. data/tracks/perl6/exercises/linked-list/example.yaml +1 -1
  386. data/tracks/perl6/exercises/linked-list/linked-list.t +1 -1
  387. data/tracks/perl6/exercises/luhn/README.md +86 -0
  388. data/tracks/perl6/exercises/phone-number/README.md +49 -0
  389. data/tracks/perl6/exercises/raindrops/README.md +39 -0
  390. data/tracks/perl6/exercises/rna-transcription/README.md +40 -0
  391. data/tracks/perl6/exercises/robot-name/README.md +37 -0
  392. data/tracks/perl6/exercises/scrabble-score/README.md +59 -0
  393. data/tracks/perl6/exercises/space-age/README.md +39 -0
  394. data/tracks/perl6/exercises/trinary/README.md +43 -0
  395. data/tracks/perl6/exercises/word-count/README.md +34 -0
  396. data/tracks/perl6/exercises/wordy/README.md +78 -0
  397. data/tracks/php/config.json +156 -3
  398. data/tracks/php/config/exercise_readme.go.tmpl +16 -0
  399. data/tracks/php/exercises/accumulate/README.md +50 -0
  400. data/tracks/php/exercises/acronym/README.md +30 -0
  401. data/tracks/php/exercises/allergies/README.md +52 -0
  402. data/tracks/php/exercises/anagram/README.md +28 -0
  403. data/tracks/php/exercises/atbash-cipher/README.md +49 -0
  404. data/tracks/php/exercises/beer-song/README.md +342 -0
  405. data/tracks/php/exercises/binary-search/README.md +56 -0
  406. data/tracks/php/exercises/binary/README.md +50 -0
  407. data/tracks/php/exercises/bob/README.md +36 -0
  408. data/tracks/php/exercises/book-store/README.md +89 -0
  409. data/tracks/php/exercises/bowling/README.md +68 -0
  410. data/tracks/php/exercises/bracket-push/README.md +25 -0
  411. data/tracks/php/exercises/change/README.md +38 -0
  412. data/tracks/php/exercises/clock/README.md +28 -0
  413. data/tracks/php/exercises/connect/README.md +49 -0
  414. data/tracks/php/exercises/difference-of-squares/README.md +34 -0
  415. data/tracks/php/exercises/etl/README.md +66 -0
  416. data/tracks/php/exercises/gigasecond/README.md +26 -0
  417. data/tracks/php/exercises/grade-school/README.md +57 -0
  418. data/tracks/php/exercises/grains/README.md +49 -0
  419. data/tracks/php/exercises/hamming/README.md +57 -0
  420. data/tracks/php/exercises/hello-world/README.md +36 -0
  421. data/tracks/php/exercises/isogram/README.md +34 -0
  422. data/tracks/php/exercises/largest-series-product/README.md +35 -0
  423. data/tracks/php/exercises/leap/README.md +48 -0
  424. data/tracks/php/exercises/luhn/README.md +86 -0
  425. data/tracks/php/exercises/markdown/README.md +33 -0
  426. data/tracks/php/exercises/minesweeper/README.md +45 -0
  427. data/tracks/php/exercises/nth-prime/README.md +30 -0
  428. data/tracks/php/exercises/nucleotide-count/README.md +48 -0
  429. data/tracks/php/exercises/ocr-numbers/README.md +100 -0
  430. data/tracks/php/exercises/pangram/README.md +30 -0
  431. data/tracks/php/exercises/pascals-triangle/README.md +36 -0
  432. data/tracks/php/exercises/perfect-numbers/README.md +39 -0
  433. data/tracks/php/exercises/phone-number/README.md +49 -0
  434. data/tracks/php/exercises/pig-latin/README.md +39 -0
  435. data/tracks/php/exercises/prime-factors/README.md +51 -0
  436. data/tracks/php/exercises/queen-attack/README.md +48 -0
  437. data/tracks/php/exercises/raindrops/README.md +39 -0
  438. data/tracks/php/exercises/rna-transcription/README.md +40 -0
  439. data/tracks/php/exercises/robot-name/README.md +37 -0
  440. data/tracks/php/exercises/robot-simulator/README.md +49 -0
  441. data/tracks/php/exercises/roman-numerals/README.md +64 -0
  442. data/tracks/php/exercises/scrabble-score/README.md +59 -0
  443. data/tracks/php/exercises/sieve/README.md +49 -0
  444. data/tracks/php/exercises/space-age/README.md +39 -0
  445. data/tracks/php/exercises/sum-of-multiples/README.md +33 -0
  446. data/tracks/php/exercises/triangle/README.md +41 -0
  447. data/tracks/php/exercises/trinary/README.md +43 -0
  448. data/tracks/php/exercises/variable-length-quantity/README.md +54 -0
  449. data/tracks/php/exercises/word-count/README.md +34 -0
  450. data/tracks/php/exercises/wordy/README.md +78 -0
  451. data/tracks/rust/exercises/grains/tests/grains.rs +0 -1
  452. data/tracks/sml/config/exercise_readme.go.tmpl +16 -0
  453. data/tracks/sml/exercises/accumulate/README.md +49 -0
  454. data/tracks/sml/exercises/allergies/README.md +51 -0
  455. data/tracks/sml/exercises/anagram/README.md +27 -0
  456. data/tracks/sml/exercises/binary/README.md +49 -0
  457. data/tracks/sml/exercises/flatten-array/README.md +32 -0
  458. data/tracks/sml/exercises/hamming/README.md +56 -0
  459. data/tracks/sml/exercises/nth-prime/README.md +29 -0
  460. data/tracks/sml/exercises/raindrops/README.md +38 -0
  461. metadata +433 -4
  462. data/tracks/perl5/exercises/phone-number/cases.json +0 -44
  463. data/tracks/perl5/exercises/phone-number/phone.t +0 -43
@@ -103,7 +103,7 @@ Each exercise has the following structure:
103
103
  resolver for all the exercises.
104
104
  - `package.yaml` is a file in the [hpack](https://github.com/sol/hpack#readme)
105
105
  format that has all dependencies and build instructions for an exercise.
106
- - `HINTS.md` is an optional file containing instructions and/or hints. It is used together with the respective `description.md` for the exercise from [x-common](https://github.com/exercism/x-common) to build the `README.md` file.
106
+ - `HINTS.md` is an optional file containing instructions and/or hints. It is used together with the respective `description.md` for the exercise from [problem-specifications](https://github.com/exercism/problem-specifications) to build the `README.md` file.
107
107
  - `src/ModuleName.hs` is a [stub solution](#stub-solution).
108
108
  - `examples/success-<name>/package.yaml` contains library dependencies for the [example solution](#example-solution). `<name>` is a unique name for the example - usually "standard" (as in `success-standard`), but it can be some other name in case of multiple example solutions.
109
109
  - `examples/success-<name>/src/ModuleName.hs` is the source code of the sample solution.
@@ -140,7 +140,7 @@ There are three possible types of examples:
140
140
  * error: The example is expected to fail to build.
141
141
 
142
142
  ### Test suite
143
- The test suite should be derived from the respective `x-common/exercises/<exercise-name>/canonical-data.json` and comply to some formatting and coding standards (to get an idea you may look at some of the existing tests).
143
+ The test suite should be derived from the respective `problem-specifications/exercises/<exercise-name>/canonical-data.json` and comply to some formatting and coding standards (to get an idea you may look at some of the existing tests).
144
144
 
145
145
  ### Running Tests
146
146
  In order to be accepted by Travis-CI, every exercise must be registered in
@@ -34,7 +34,7 @@ specs = describe "song" $ do
34
34
  zipMaybe [] (y:ys) = (Nothing, Just y ) : zipMaybe [] ys
35
35
  zipMaybe (x:xs) (y:ys) = (Just x , Just y ) : zipMaybe xs ys
36
36
 
37
- -- Lyrics extracted from `exercism/x-common` on 2016-10-03.
37
+ -- Lyrics extracted from `exercism/problem-specifications` on 2016-10-03.
38
38
 
39
39
  lyrics :: String
40
40
  lyrics = "99 bottles of beer on the wall, 99 bottles of beer.\n\
@@ -33,7 +33,7 @@ specs = describe "song" $ do
33
33
  zipMaybe [] (y:ys) = (Nothing, Just y ) : zipMaybe [] ys
34
34
  zipMaybe (x:xs) (y:ys) = (Just x , Just y ) : zipMaybe xs ys
35
35
 
36
- -- Lyrics extracted from `exercism/x-common` on 2016-09-21.
36
+ -- Lyrics extracted from `exercism/problem-specifications` on 2016-09-21.
37
37
 
38
38
  lyrics :: String
39
39
  lyrics =
@@ -33,7 +33,7 @@ specs = describe "rhyme" $ do
33
33
  zipMaybe [] (y:ys) = (Nothing, Just y ) : zipMaybe [] ys
34
34
  zipMaybe (x:xs) (y:ys) = (Just x , Just y ) : zipMaybe xs ys
35
35
 
36
- -- Lyrics extracted from `exercism/x-common` on 2016-09-23.
36
+ -- Lyrics extracted from `exercism/problem-specifications` on 2016-09-23.
37
37
 
38
38
  lyrics :: String
39
39
  lyrics = "This is the house that Jack built.\n\
@@ -37,7 +37,7 @@ specs = describe "inEnglish" $ for_ cases test
37
37
  \three hundred twenty-one thousand \
38
38
  \one hundred twenty-three" )
39
39
  , ( -1, Nothing )
40
- -- Even though the x-common tests have this case,
40
+ -- Even though the problem-specifications tests have this case,
41
41
  -- we decide not to test it, to give freedom to go to trillions if desired.
42
42
  -- , (1000000000000, Nothing )
43
43
  ]
@@ -204,6 +204,16 @@
204
204
 
205
205
  ]
206
206
  },
207
+ {
208
+ "uuid": "9eb41883-55ef-4681-b5ac-5c2259302772",
209
+ "slug": "rotational-cipher",
210
+ "core": false,
211
+ "unlocked_by": null,
212
+ "difficulty": 4,
213
+ "topics": [
214
+
215
+ ]
216
+ },
207
217
  {
208
218
  "uuid": "0b92ffee-c092-4ab1-ad78-76c8cf80e1b5",
209
219
  "slug": "kindergarten-garden",
@@ -768,16 +778,6 @@
768
778
 
769
779
  ]
770
780
  },
771
- {
772
- "uuid": "9eb41883-55ef-4681-b5ac-5c2259302772",
773
- "slug": "rotational-cipher",
774
- "core": false,
775
- "unlocked_by": null,
776
- "difficulty": 1,
777
- "topics": [
778
-
779
- ]
780
- },
781
781
  {
782
782
  "uuid": "e58c29d2-80a7-40ef-bed0-4a184ae35f34",
783
783
  "slug": "accumulate",
@@ -1,13 +1,12 @@
1
+ class RotationalCipher {
1
2
 
2
- public class RotationalCipher {
3
-
4
- int shiftKey;
3
+ private int shiftKey;
5
4
 
6
5
  RotationalCipher(int shiftKey) {
7
6
  this.shiftKey = shiftKey;
8
7
  }
9
8
 
10
- public String rotate(String data) {
9
+ String rotate(String data) {
11
10
  StringBuilder dataStringBuilder = new StringBuilder();
12
11
  for (char c : data.toCharArray()) {
13
12
  if (Character.isUpperCase(c)) {
@@ -25,12 +24,10 @@ public class RotationalCipher {
25
24
  * For Uppercase CaseStart = 'A' and CaseEnd = 'Z'
26
25
  * For Lowercase CaseStart = 'a' and CaseEnd = 'z'
27
26
  */
28
- private char getReplacementCharacter(char characterToReplace,
29
- char alphabetCaseStart, char alphabetCaseEnd) {
27
+ private char getReplacementCharacter(char characterToReplace, char alphabetCaseStart, char alphabetCaseEnd) {
30
28
  char replacementCharacter = (char) (characterToReplace + shiftKey);
31
29
  if (replacementCharacter > alphabetCaseEnd) {
32
- replacementCharacter = (char) ((alphabetCaseStart - 1) +
33
- (replacementCharacter % alphabetCaseEnd));
30
+ replacementCharacter = (char) ((alphabetCaseStart - 1) + (replacementCharacter % alphabetCaseEnd));
34
31
  }
35
32
  return replacementCharacter;
36
33
  }
@@ -1,6 +1,4 @@
1
-
2
1
  import org.junit.Assert;
3
- import org.junit.Before;
4
2
  import org.junit.Ignore;
5
3
  import org.junit.Test;
6
4
 
@@ -13,7 +11,7 @@ public class RotationalCipherTest {
13
11
  rotationalCipher = new RotationalCipher(1);
14
12
  Assert.assertEquals("b", rotationalCipher.rotate("a"));
15
13
  }
16
-
14
+
17
15
  @Ignore("Remove to run test")
18
16
  @Test
19
17
  public void rotateSingleCharacterBy26() {
@@ -75,7 +73,6 @@ public class RotationalCipherTest {
75
73
  public void rotateAllLetters() {
76
74
  rotationalCipher = new RotationalCipher(13);
77
75
  Assert.assertEquals("The quick brown fox jumps over the lazy dog.",
78
- rotationalCipher.rotate("Gur dhvpx oebja sbk whzcf bire gur ynml qbt."));
79
- }
80
-
76
+ rotationalCipher.rotate("Gur dhvpx oebja sbk whzcf bire gur ynml qbt."));
77
+ }
81
78
  }
@@ -35,7 +35,7 @@
35
35
  "slug": "hamming",
36
36
  "core": false,
37
37
  "unlocked_by": null,
38
- "difficulty": 1,
38
+ "difficulty": 2,
39
39
  "topics": [
40
40
  "Control-flow (loops)",
41
41
  "Control-flow (conditionals)",
@@ -59,7 +59,7 @@
59
59
  "slug": "pangram",
60
60
  "core": false,
61
61
  "unlocked_by": null,
62
- "difficulty": 1,
62
+ "difficulty": 2,
63
63
  "topics": [
64
64
  "Control flow (conditionals)",
65
65
  "Control flow (loops)",
@@ -75,7 +75,7 @@
75
75
  "slug": "bob",
76
76
  "core": false,
77
77
  "unlocked_by": null,
78
- "difficulty": 1,
78
+ "difficulty": 2,
79
79
  "topics": [
80
80
  "Control flow (conditionals)",
81
81
  "Polymorfism",
@@ -90,7 +90,7 @@
90
90
  "slug": "gigasecond",
91
91
  "core": false,
92
92
  "unlocked_by": null,
93
- "difficulty": 1,
93
+ "difficulty": 2,
94
94
  "topics": [
95
95
  "Time"
96
96
  ]
@@ -100,7 +100,7 @@
100
100
  "slug": "isogram",
101
101
  "core": false,
102
102
  "unlocked_by": null,
103
- "difficulty": 1,
103
+ "difficulty": 2,
104
104
  "topics": [
105
105
  "Strings",
106
106
  "Filtering"
@@ -111,10 +111,10 @@
111
111
  "slug": "beer-song",
112
112
  "core": false,
113
113
  "unlocked_by": null,
114
- "difficulty": 1,
114
+ "difficulty": 5,
115
115
  "topics": [
116
- "Looping",
117
- "Conditionals",
116
+ "Control flow (conditionals)",
117
+ "Control flow (loops)",
118
118
  "Strings"
119
119
  ]
120
120
  },
@@ -123,7 +123,7 @@
123
123
  "slug": "phone-number",
124
124
  "core": false,
125
125
  "unlocked_by": null,
126
- "difficulty": 1,
126
+ "difficulty": 3,
127
127
  "topics": [
128
128
  "Parsing",
129
129
  "Transforming"
@@ -145,7 +145,7 @@
145
145
  "slug": "food-chain",
146
146
  "core": false,
147
147
  "unlocked_by": null,
148
- "difficulty": 1,
148
+ "difficulty": 4,
149
149
  "topics": [
150
150
  "Text formatting",
151
151
  "Algorithms"
@@ -156,9 +156,11 @@
156
156
  "slug": "grade-school",
157
157
  "core": false,
158
158
  "unlocked_by": null,
159
- "difficulty": 1,
159
+ "difficulty": 6,
160
160
  "topics": [
161
-
161
+ "Arrays",
162
+ "Maps",
163
+ "Sorting"
162
164
  ]
163
165
  },
164
166
  {
@@ -166,9 +168,13 @@
166
168
  "slug": "robot-name",
167
169
  "core": false,
168
170
  "unlocked_by": null,
169
- "difficulty": 1,
171
+ "difficulty": 6,
170
172
  "topics": [
171
-
173
+ "Control flow (conditionals)",
174
+ "Exception handling",
175
+ "Sets",
176
+ "Randomness",
177
+ "Regular expressions"
172
178
  ]
173
179
  },
174
180
  {
@@ -176,9 +182,12 @@
176
182
  "slug": "etl",
177
183
  "core": false,
178
184
  "unlocked_by": null,
179
- "difficulty": 1,
185
+ "difficulty": 2,
180
186
  "topics": [
181
-
187
+ "Control flow (loops)",
188
+ "Transforming",
189
+ "Maps",
190
+ "Integers"
182
191
  ]
183
192
  },
184
193
  {
@@ -186,9 +195,11 @@
186
195
  "slug": "space-age",
187
196
  "core": false,
188
197
  "unlocked_by": null,
189
- "difficulty": 1,
198
+ "difficulty": 3,
190
199
  "topics": [
191
-
200
+ "Classes",
201
+ "Floating-point numbers",
202
+ "Mathematics"
192
203
  ]
193
204
  },
194
205
  {
@@ -196,9 +207,11 @@
196
207
  "slug": "grains",
197
208
  "core": false,
198
209
  "unlocked_by": null,
199
- "difficulty": 1,
210
+ "difficulty": 5,
200
211
  "topics": [
201
-
212
+ "Control flow (loops)",
213
+ "Integers",
214
+ "Mathematics"
202
215
  ]
203
216
  },
204
217
  {
@@ -206,9 +219,13 @@
206
219
  "slug": "triangle",
207
220
  "core": false,
208
221
  "unlocked_by": null,
209
- "difficulty": 1,
222
+ "difficulty": 3,
210
223
  "topics": [
211
-
224
+ "Control flow (loops)",
225
+ "Control flow (conditionals)",
226
+ "Exception handling",
227
+ "Integers",
228
+ "Mathematics"
212
229
  ]
213
230
  },
214
231
  {
@@ -216,9 +233,11 @@
216
233
  "slug": "clock",
217
234
  "core": false,
218
235
  "unlocked_by": null,
219
- "difficulty": 1,
236
+ "difficulty": 5,
220
237
  "topics": [
221
-
238
+ "Dates",
239
+ "Time",
240
+ "Globalization"
222
241
  ]
223
242
  },
224
243
  {
@@ -226,9 +245,13 @@
226
245
  "slug": "perfect-numbers",
227
246
  "core": false,
228
247
  "unlocked_by": null,
229
- "difficulty": 1,
248
+ "difficulty": 3,
230
249
  "topics": [
231
-
250
+ "Control flow (conditionals)",
251
+ "Control flow (loops)",
252
+ "Arrays",
253
+ "Integers",
254
+ "Mathematics"
232
255
  ]
233
256
  },
234
257
  {
@@ -250,9 +273,12 @@
250
273
  "slug": "acronym",
251
274
  "core": false,
252
275
  "unlocked_by": null,
253
- "difficulty": 1,
276
+ "difficulty": 2,
254
277
  "topics": [
255
-
278
+ "Strings",
279
+ "Control flow (loops)",
280
+ "Regular expressions",
281
+ "Transforming"
256
282
  ]
257
283
  },
258
284
  {
@@ -260,9 +286,12 @@
260
286
  "slug": "scrabble-score",
261
287
  "core": false,
262
288
  "unlocked_by": null,
263
- "difficulty": 1,
289
+ "difficulty": 5,
264
290
  "topics": [
265
-
291
+ "Control flow (conditionals)",
292
+ "Control flow (loops)",
293
+ "Maps",
294
+ "Strings"
266
295
  ]
267
296
  },
268
297
  {
@@ -270,9 +299,13 @@
270
299
  "slug": "roman-numerals",
271
300
  "core": false,
272
301
  "unlocked_by": null,
273
- "difficulty": 1,
302
+ "difficulty": 3,
274
303
  "topics": [
275
-
304
+ "Control flow (conditionals)",
305
+ "Control flow (loops)",
306
+ "Mathematics",
307
+ "Pattern recognition",
308
+ "Transforming"
276
309
  ]
277
310
  },
278
311
  {
@@ -280,9 +313,14 @@
280
313
  "slug": "circular-buffer",
281
314
  "core": false,
282
315
  "unlocked_by": null,
283
- "difficulty": 1,
316
+ "difficulty": 8,
284
317
  "topics": [
285
-
318
+ "Control flow (conditionals)",
319
+ "Control flow (loops)",
320
+ "Data structures",
321
+ "Lists",
322
+ "Arrays",
323
+ "Exception handling"
286
324
  ]
287
325
  },
288
326
  {
@@ -290,9 +328,15 @@
290
328
  "slug": "binary",
291
329
  "core": false,
292
330
  "unlocked_by": null,
293
- "difficulty": 1,
331
+ "difficulty": 4,
294
332
  "topics": [
295
-
333
+ "Control flow (conditionals)",
334
+ "Control flow (loops)",
335
+ "Mathematics",
336
+ "Integers",
337
+ "Strings",
338
+ "Regular expressions",
339
+ "Exception handling"
296
340
  ]
297
341
  },
298
342
  {
@@ -300,9 +344,13 @@
300
344
  "slug": "prime-factors",
301
345
  "core": false,
302
346
  "unlocked_by": null,
303
- "difficulty": 1,
347
+ "difficulty": 4,
304
348
  "topics": [
305
-
349
+ "Control flow (conditionals)",
350
+ "Control flow (loops)",
351
+ "Mathematics",
352
+ "Algorithms",
353
+ "Integers"
306
354
  ]
307
355
  },
308
356
  {
@@ -310,9 +358,12 @@
310
358
  "slug": "raindrops",
311
359
  "core": false,
312
360
  "unlocked_by": null,
313
- "difficulty": 1,
361
+ "difficulty": 2,
314
362
  "topics": [
315
-
363
+ "Control flow (conditionals)",
364
+ "Strings",
365
+ "Integers",
366
+ "Transforming"
316
367
  ]
317
368
  },
318
369
  {
@@ -320,9 +371,12 @@
320
371
  "slug": "allergies",
321
372
  "core": false,
322
373
  "unlocked_by": null,
323
- "difficulty": 1,
374
+ "difficulty": 6,
324
375
  "topics": [
325
-
376
+ "Control flow (conditionals)",
377
+ "Control flow (loops)",
378
+ "Bitwise operations",
379
+ "Arrays"
326
380
  ]
327
381
  },
328
382
  {
@@ -330,19 +384,30 @@
330
384
  "slug": "strain",
331
385
  "core": false,
332
386
  "unlocked_by": null,
333
- "difficulty": 1,
387
+ "difficulty": 4,
334
388
  "topics": [
335
-
389
+ "Control flow (conditionals)",
390
+ "Control flow (loops)",
391
+ "Algorithms",
392
+ "Lists",
393
+ "Arrays",
394
+ "Callbacks",
395
+ "Filtering"
336
396
  ]
337
397
  },
338
398
  {
339
399
  "uuid": "99974454-0736-4cc0-b88f-ed5701397a97",
340
400
  "slug": "atbash-cipher",
341
401
  "core": false,
342
- "unlocked_by": null,
343
- "difficulty": 1,
402
+ "unlocked_by": "simple-cipher",
403
+ "difficulty": 7,
344
404
  "topics": [
345
-
405
+ "Control flow (conditionals)",
406
+ "Control flow (loops)",
407
+ "Algorithms",
408
+ "Arrays",
409
+ "Regular expressions",
410
+ "Text formatting"
346
411
  ]
347
412
  },
348
413
  {
@@ -350,39 +415,58 @@
350
415
  "slug": "accumulate",
351
416
  "core": false,
352
417
  "unlocked_by": null,
353
- "difficulty": 1,
418
+ "difficulty": 5,
354
419
  "topics": [
355
-
420
+ "Control flow (loops)",
421
+ "Algorithms",
422
+ "Lists",
423
+ "Callbacks"
356
424
  ]
357
425
  },
358
426
  {
359
427
  "uuid": "a98e3593-d5b4-4c2b-8569-ae3ae7e07dad",
360
428
  "slug": "crypto-square",
361
429
  "core": false,
362
- "unlocked_by": null,
363
- "difficulty": 1,
430
+ "unlocked_by": "atbash-cipher",
431
+ "difficulty": 9,
364
432
  "topics": [
365
-
433
+ "Control flow (conditionals)",
434
+ "Control flow (loops)",
435
+ "Algorithms",
436
+ "Arrays",
437
+ "Sorting",
438
+ "Text formatting",
439
+ "Regular expressions",
440
+ "Transforming"
366
441
  ]
367
442
  },
368
443
  {
369
444
  "uuid": "f317721d-e1f5-4e68-9fdc-f9bc7b6b004d",
370
445
  "slug": "trinary",
371
446
  "core": false,
372
- "unlocked_by": null,
373
- "difficulty": 1,
447
+ "unlocked_by": "binary",
448
+ "difficulty": 4,
374
449
  "topics": [
375
-
450
+ "Control flow (conditionals)",
451
+ "Control flow (loops)",
452
+ "Mathematics",
453
+ "Integers",
454
+ "Strings",
455
+ "Regular expressions"
376
456
  ]
377
457
  },
378
458
  {
379
459
  "uuid": "4cad8ee8-40be-4d4d-8c14-45d8c6e29a32",
380
460
  "slug": "sieve",
381
461
  "core": false,
382
- "unlocked_by": null,
383
- "difficulty": 1,
462
+ "unlocked_by": "prime-factors",
463
+ "difficulty": 5,
384
464
  "topics": [
385
-
465
+ "Control flow (conditionals)",
466
+ "Control flow (loops)",
467
+ "Mathematics",
468
+ "Integers",
469
+ "Recursion"
386
470
  ]
387
471
  },
388
472
  {
@@ -392,17 +476,29 @@
392
476
  "unlocked_by": null,
393
477
  "difficulty": 1,
394
478
  "topics": [
395
-
479
+ "Control flow (conditionals)",
480
+ "Control flow (loops)",
481
+ "Algorithms",
482
+ "Mathematics",
483
+ "Strings",
484
+ "Randomness",
485
+ "Text formatting",
486
+ "Transforming"
396
487
  ]
397
488
  },
398
489
  {
399
490
  "uuid": "9892d47d-97a0-4a2f-8284-6f84c86559e8",
400
491
  "slug": "octal",
401
492
  "core": false,
402
- "unlocked_by": null,
403
- "difficulty": 1,
493
+ "unlocked_by": "binary",
494
+ "difficulty": 4,
404
495
  "topics": [
405
-
496
+ "Control flow (conditionals)",
497
+ "Control flow (loops)",
498
+ "Mathematics",
499
+ "Integers",
500
+ "Strings",
501
+ "Regular expressions"
406
502
  ]
407
503
  },
408
504
  {
@@ -410,9 +506,13 @@
410
506
  "slug": "luhn",
411
507
  "core": false,
412
508
  "unlocked_by": null,
413
- "difficulty": 1,
509
+ "difficulty": 4,
414
510
  "topics": [
415
-
511
+ "Control flow (conditionals)",
512
+ "Control flow (loops)",
513
+ "Mathematics",
514
+ "Integers",
515
+ "Strings"
416
516
  ]
417
517
  },
418
518
  {
@@ -420,9 +520,14 @@
420
520
  "slug": "pig-latin",
421
521
  "core": false,
422
522
  "unlocked_by": null,
423
- "difficulty": 1,
523
+ "difficulty": 4,
424
524
  "topics": [
425
-
525
+ "Control flow (conditionals)",
526
+ "Control flow (loops)",
527
+ "Strings",
528
+ "Games",
529
+ "Regular expressions",
530
+ "Transforming"
426
531
  ]
427
532
  },
428
533
  {
@@ -430,9 +535,13 @@
430
535
  "slug": "pythagorean-triplet",
431
536
  "core": false,
432
537
  "unlocked_by": null,
433
- "difficulty": 1,
538
+ "difficulty": 5,
434
539
  "topics": [
435
-
540
+ "Control flow (conditionals)",
541
+ "Control flow (loops)",
542
+ "Algorithms",
543
+ "Mathematics",
544
+ "Integers"
436
545
  ]
437
546
  },
438
547
  {
@@ -440,9 +549,12 @@
440
549
  "slug": "series",
441
550
  "core": false,
442
551
  "unlocked_by": null,
443
- "difficulty": 1,
552
+ "difficulty": 3,
444
553
  "topics": [
445
-
554
+ "Control flow (loops)",
555
+ "Exception handling",
556
+ "Strings",
557
+ "Text formatting"
446
558
  ]
447
559
  },
448
560
  {
@@ -450,9 +562,12 @@
450
562
  "slug": "difference-of-squares",
451
563
  "core": false,
452
564
  "unlocked_by": null,
453
- "difficulty": 1,
565
+ "difficulty": 3,
454
566
  "topics": [
455
-
567
+ "Control flow (loops)",
568
+ "Algorithms",
569
+ "Mathematics",
570
+ "Integers"
456
571
  ]
457
572
  },
458
573
  {
@@ -460,9 +575,14 @@
460
575
  "slug": "secret-handshake",
461
576
  "core": false,
462
577
  "unlocked_by": null,
463
- "difficulty": 1,
578
+ "difficulty": 6,
464
579
  "topics": [
465
-
580
+ "Control flow (conditionals)",
581
+ "Control flow (loops)",
582
+ "Algorithms",
583
+ "Games",
584
+ "Bitwise operations",
585
+ "Arrays"
466
586
  ]
467
587
  },
468
588
  {
@@ -470,9 +590,13 @@
470
590
  "slug": "proverb",
471
591
  "core": false,
472
592
  "unlocked_by": null,
473
- "difficulty": 1,
593
+ "difficulty": 4,
474
594
  "topics": [
595
+ "Control flow (conditionals)",
596
+ "Control flow (loops)",
475
597
  "Arrays",
598
+ "Strings",
599
+ "Text formatting",
476
600
  "Optional values"
477
601
  ]
478
602
  },
@@ -481,9 +605,15 @@
481
605
  "slug": "linked-list",
482
606
  "core": false,
483
607
  "unlocked_by": null,
484
- "difficulty": 1,
608
+ "difficulty": 5,
485
609
  "topics": [
486
-
610
+ "Control flow (conditionals)",
611
+ "Control flow (loops)",
612
+ "Algorithms",
613
+ "Data structures",
614
+ "Arrays",
615
+ "Lists",
616
+ "Optional values"
487
617
  ]
488
618
  },
489
619
  {
@@ -491,9 +621,15 @@
491
621
  "slug": "wordy",
492
622
  "core": false,
493
623
  "unlocked_by": null,
494
- "difficulty": 1,
624
+ "difficulty": 7,
495
625
  "topics": [
496
-
626
+ "Control flow (conditionals)",
627
+ "Control flow (loops)",
628
+ "Regular expressions",
629
+ "Exception handling",
630
+ "Strings",
631
+ "Pattern recognition",
632
+ "Parsing"
497
633
  ]
498
634
  },
499
635
  {
@@ -503,17 +639,23 @@
503
639
  "unlocked_by": null,
504
640
  "difficulty": 1,
505
641
  "topics": [
506
-
642
+ "Arrays",
643
+ "Recursion"
507
644
  ]
508
645
  },
509
646
  {
510
647
  "uuid": "33b8f4c0-3210-478a-9225-5c30ad6df870",
511
648
  "slug": "hexadecimal",
512
649
  "core": false,
513
- "unlocked_by": null,
514
- "difficulty": 1,
650
+ "unlocked_by": "binary",
651
+ "difficulty": 4,
515
652
  "topics": [
516
-
653
+ "Control flow (conditionals)",
654
+ "Control flow (loops)",
655
+ "Mathematics",
656
+ "Integers",
657
+ "Strings",
658
+ "Regular expressions"
517
659
  ]
518
660
  },
519
661
  {
@@ -521,9 +663,15 @@
521
663
  "slug": "largest-series-product",
522
664
  "core": false,
523
665
  "unlocked_by": null,
524
- "difficulty": 1,
666
+ "difficulty": 7,
525
667
  "topics": [
526
-
668
+ "Control flow (conditionals)",
669
+ "Control flow (loops)",
670
+ "Mathematics",
671
+ "Integers",
672
+ "Strings",
673
+ "Exception handling",
674
+ "Regular expressions"
527
675
  ]
528
676
  },
529
677
  {
@@ -531,9 +679,13 @@
531
679
  "slug": "kindergarten-garden",
532
680
  "core": false,
533
681
  "unlocked_by": null,
534
- "difficulty": 1,
682
+ "difficulty": 7,
535
683
  "topics": [
536
-
684
+ "Control flow (conditionals)",
685
+ "Control flow (loops)",
686
+ "Strings",
687
+ "Arrays",
688
+ "Text formatting"
537
689
  ]
538
690
  },
539
691
  {
@@ -541,19 +693,26 @@
541
693
  "slug": "binary-search",
542
694
  "core": false,
543
695
  "unlocked_by": null,
544
- "difficulty": 1,
696
+ "difficulty": 7,
545
697
  "topics": [
546
-
698
+ "Control flow (conditionals)",
699
+ "Control flow (loops)",
700
+ "Recursion",
701
+ "Arrays",
702
+ "Algorithms"
547
703
  ]
548
704
  },
549
705
  {
550
706
  "uuid": "865806e0-950f-49a5-a6e5-26472b90ab85",
551
707
  "slug": "binary-search-tree",
552
708
  "core": false,
553
- "unlocked_by": null,
554
- "difficulty": 1,
709
+ "unlocked_by": "binary-search",
710
+ "difficulty": 6,
555
711
  "topics": [
556
-
712
+ "Control flow (conditionals)",
713
+ "Control flow (loops)",
714
+ "Recursion",
715
+ "Algorithms"
557
716
  ]
558
717
  },
559
718
  {
@@ -561,9 +720,14 @@
561
720
  "slug": "matrix",
562
721
  "core": false,
563
722
  "unlocked_by": null,
564
- "difficulty": 1,
723
+ "difficulty": 4,
565
724
  "topics": [
566
-
725
+ "Control flow (conditionals)",
726
+ "Control flow (loops)",
727
+ "Data structures",
728
+ "Arrays",
729
+ "Matrices",
730
+ "Text formatting"
567
731
  ]
568
732
  },
569
733
  {
@@ -573,27 +737,42 @@
573
737
  "unlocked_by": null,
574
738
  "difficulty": 1,
575
739
  "topics": [
576
-
740
+ "Control flow (conditionals)",
741
+ "Control flow (loops)",
742
+ "Exception handling",
743
+ "Strings",
744
+ "Games",
745
+ "Parsing"
577
746
  ]
578
747
  },
579
748
  {
580
749
  "uuid": "8fa51380-ec2c-4806-8833-cf543579de17",
581
750
  "slug": "nth-prime",
582
751
  "core": false,
583
- "unlocked_by": null,
584
- "difficulty": 1,
752
+ "unlocked_by": "prime-factors",
753
+ "difficulty": 5,
585
754
  "topics": [
586
-
755
+ "Control flow (conditionals)",
756
+ "Control flow (loops)",
757
+ "Exception handling",
758
+ "Algorithms",
759
+ "Mathematics",
760
+ "Integers"
587
761
  ]
588
762
  },
589
763
  {
590
764
  "uuid": "fde83f66-d927-48f8-a599-efb98927f0b1",
591
765
  "slug": "palindrome-products",
592
766
  "core": false,
593
- "unlocked_by": null,
594
- "difficulty": 1,
767
+ "unlocked_by": "prime-factors",
768
+ "difficulty": 7,
595
769
  "topics": [
596
-
770
+ "Control flow (conditionals)",
771
+ "Control flow (loops)",
772
+ "Exception handling",
773
+ "Algorithms",
774
+ "Mathematics",
775
+ "Integers"
597
776
  ]
598
777
  },
599
778
  {
@@ -601,9 +780,13 @@
601
780
  "slug": "pascals-triangle",
602
781
  "core": false,
603
782
  "unlocked_by": null,
604
- "difficulty": 1,
783
+ "difficulty": 5,
605
784
  "topics": [
606
-
785
+ "Control flow (conditionals)",
786
+ "Control flow (loops)",
787
+ "Mathematics",
788
+ "Strings",
789
+ "Text formatting"
607
790
  ]
608
791
  },
609
792
  {
@@ -611,29 +794,45 @@
611
794
  "slug": "say",
612
795
  "core": false,
613
796
  "unlocked_by": null,
614
- "difficulty": 1,
797
+ "difficulty": 6,
615
798
  "topics": [
616
-
799
+ "Control flow (conditionals)",
800
+ "Control flow (loops)",
801
+ "Mathematics",
802
+ "Integers",
803
+ "Exception handling",
804
+ "Strings",
805
+ "Text formatting"
617
806
  ]
618
807
  },
619
808
  {
620
809
  "uuid": "d4ec15c4-2742-493b-97fe-9d5121f0b659",
621
810
  "slug": "custom-set",
622
811
  "core": false,
623
- "unlocked_by": null,
624
- "difficulty": 1,
812
+ "unlocked_by": "linked-list",
813
+ "difficulty": 6,
625
814
  "topics": [
626
-
815
+ "Control flow (conditionals)",
816
+ "Control flow (loops)",
817
+ "Data structures",
818
+ "Arrays",
819
+ "Lists",
820
+ "Sets",
821
+ "Equality",
822
+ "Recursion"
627
823
  ]
628
824
  },
629
825
  {
630
826
  "uuid": "f30463c4-9d8c-4238-a691-e594291b4425",
631
827
  "slug": "sum-of-multiples",
632
828
  "core": false,
633
- "unlocked_by": null,
634
- "difficulty": 1,
829
+ "unlocked_by": "prime-factors",
830
+ "difficulty": 5,
635
831
  "topics": [
636
-
832
+ "Control flow (conditionals)",
833
+ "Control flow (loops)",
834
+ "Lists",
835
+ "Integers"
637
836
  ]
638
837
  },
639
838
  {
@@ -641,19 +840,33 @@
641
840
  "slug": "queen-attack",
642
841
  "core": false,
643
842
  "unlocked_by": null,
644
- "difficulty": 1,
843
+ "difficulty": 8,
645
844
  "topics": [
646
-
845
+ "Control flow (conditionals)",
846
+ "Control flow (loops)",
847
+ "Optional values",
848
+ "Exception handling",
849
+ "Equality",
850
+ "Text formatting",
851
+ "Parsing"
647
852
  ]
648
853
  },
649
854
  {
650
855
  "uuid": "98cbae4f-78b6-4745-b922-39e8db9a12bb",
651
856
  "slug": "saddle-points",
652
857
  "core": false,
653
- "unlocked_by": null,
654
- "difficulty": 1,
858
+ "unlocked_by": "matrix",
859
+ "difficulty": 6,
655
860
  "topics": [
656
-
861
+ "Control flow (conditionals)",
862
+ "Control flow (loops)",
863
+ "Optional values",
864
+ "Exception handling",
865
+ "Equality",
866
+ "Parsing",
867
+ "Integers",
868
+ "Matrices",
869
+ "Mathematics"
657
870
  ]
658
871
  },
659
872
  {
@@ -661,9 +874,15 @@
661
874
  "slug": "ocr-numbers",
662
875
  "core": false,
663
876
  "unlocked_by": null,
664
- "difficulty": 1,
877
+ "difficulty": 5,
665
878
  "topics": [
666
-
879
+ "Control flow (conditionals)",
880
+ "Control flow (loops)",
881
+ "Exception handling",
882
+ "Equality",
883
+ "Parsing",
884
+ "Integers",
885
+ "Text formatting"
667
886
  ]
668
887
  },
669
888
  {
@@ -671,9 +890,14 @@
671
890
  "slug": "meetup",
672
891
  "core": false,
673
892
  "unlocked_by": null,
674
- "difficulty": 1,
893
+ "difficulty": 7,
675
894
  "topics": [
676
-
895
+ "Control flow (conditionals)",
896
+ "Control flow (loops)",
897
+ "Exception handling",
898
+ "Equality",
899
+ "Time",
900
+ "Dates"
677
901
  ]
678
902
  },
679
903
  {
@@ -681,9 +905,13 @@
681
905
  "slug": "bracket-push",
682
906
  "core": false,
683
907
  "unlocked_by": null,
684
- "difficulty": 1,
908
+ "difficulty": 3,
685
909
  "topics": [
686
-
910
+ "Control flow (conditionals)",
911
+ "Control flow (loops)",
912
+ "Strings",
913
+ "Parsing",
914
+ "Exception handling"
687
915
  ]
688
916
  },
689
917
  {
@@ -691,9 +919,15 @@
691
919
  "slug": "two-bucket",
692
920
  "core": false,
693
921
  "unlocked_by": null,
694
- "difficulty": 1,
922
+ "difficulty": 6,
695
923
  "topics": [
696
-
924
+ "Control flow (conditionals)",
925
+ "Control flow (loops)",
926
+ "Arrays",
927
+ "Parsing",
928
+ "Algorithms",
929
+ "Games",
930
+ "Exception handling"
697
931
  ]
698
932
  },
699
933
  {
@@ -701,29 +935,46 @@
701
935
  "slug": "bowling",
702
936
  "core": false,
703
937
  "unlocked_by": null,
704
- "difficulty": 1,
938
+ "difficulty": 8,
705
939
  "topics": [
706
-
940
+ "Control flow (conditionals)",
941
+ "Control flow (loops)",
942
+ "Arrays",
943
+ "Parsing",
944
+ "Games",
945
+ "Exception handling",
946
+ "Text formatting"
707
947
  ]
708
948
  },
709
949
  {
710
950
  "uuid": "04a4ef78-5b61-454f-8c37-798875fb4956",
711
951
  "slug": "diamond",
712
952
  "core": false,
713
- "unlocked_by": null,
714
- "difficulty": 1,
953
+ "unlocked_by": "pascals-triangle",
954
+ "difficulty": 5,
715
955
  "topics": [
716
-
956
+ "Control flow (conditionals)",
957
+ "Control flow (loops)",
958
+ "Arrays",
959
+ "Parsing",
960
+ "Games",
961
+ "Exception handling",
962
+ "Text formatting"
717
963
  ]
718
964
  },
719
965
  {
720
966
  "uuid": "cdfcec62-f2f3-4408-ad2c-8b5e1e56e791",
721
967
  "slug": "all-your-base",
722
968
  "core": false,
723
- "unlocked_by": null,
724
- "difficulty": 1,
969
+ "unlocked_by": "binary",
970
+ "difficulty": 5,
725
971
  "topics": [
726
-
972
+ "Control flow (conditionals)",
973
+ "Control flow (loops)",
974
+ "Exception handling",
975
+ "Parsing",
976
+ "Mathematics",
977
+ "Integers"
727
978
  ]
728
979
  },
729
980
  {
@@ -731,21 +982,27 @@
731
982
  "slug": "run-length-encoding",
732
983
  "core": false,
733
984
  "unlocked_by": null,
734
- "difficulty": 1,
985
+ "difficulty": 2,
735
986
  "topics": [
736
-
987
+ "Control flow (conditionals)",
988
+ "Exception handling",
989
+ "Parsing",
990
+ "Text formatting",
991
+ "Regular expressions",
992
+ "Pattern recognition",
993
+ "Strings"
737
994
  ]
738
995
  },
739
996
  {
740
997
  "uuid": "22fa5ab4-935b-44cc-b055-9803214ae5f3",
741
998
  "slug": "minesweeper",
742
999
  "core": false,
743
- "unlocked_by": null,
1000
+ "unlocked_by": "queen-attack",
744
1001
  "difficulty": 7,
745
1002
  "topics": [
746
- "games",
747
- "arrays",
748
- "algorithms"
1003
+ "Games",
1004
+ "Arrays",
1005
+ "Algorithms"
749
1006
  ]
750
1007
  },
751
1008
  {
@@ -755,8 +1012,8 @@
755
1012
  "unlocked_by": null,
756
1013
  "difficulty": 7,
757
1014
  "topics": [
758
- "games",
759
- "algorithms"
1015
+ "Games",
1016
+ "Algorithms"
760
1017
  ]
761
1018
  },
762
1019
  {