trackler 2.2.0.3 → 2.2.0.4

Sign up to get free protection for your applications and to get access to all the features.
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
  {