trackler 2.2.1.6 → 2.2.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (236) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/c/README.md +27 -0
  4. data/tracks/coffeescript/config.json +1 -0
  5. data/tracks/coldfusion/config.json +1 -1
  6. data/tracks/crystal/README.md +27 -7
  7. data/tracks/crystal/config/maintainers.json +25 -0
  8. data/tracks/crystal/generator/spec/remote_data_file_spec.cr +1 -1
  9. data/tracks/crystal/generator/src/exercise_generator.cr +1 -1
  10. data/tracks/crystal/generator/src/remote_data_file.cr +2 -2
  11. data/tracks/csharp/config.json +1 -2
  12. data/tracks/csharp/config/maintainers.json +55 -0
  13. data/tracks/csharp/docs/EXERCISE_README_INSERT.md +1 -1
  14. data/tracks/csharp/exercises/accumulate/README.md +1 -1
  15. data/tracks/csharp/exercises/acronym/README.md +1 -1
  16. data/tracks/csharp/exercises/all-your-base/README.md +1 -1
  17. data/tracks/csharp/exercises/allergies/README.md +1 -1
  18. data/tracks/csharp/exercises/alphametics/README.md +1 -1
  19. data/tracks/csharp/exercises/anagram/README.md +1 -1
  20. data/tracks/csharp/exercises/atbash-cipher/README.md +1 -1
  21. data/tracks/csharp/exercises/bank-account/README.md +1 -1
  22. data/tracks/csharp/exercises/beer-song/README.md +1 -1
  23. data/tracks/csharp/exercises/binary-search-tree/README.md +1 -1
  24. data/tracks/csharp/exercises/binary-search/README.md +1 -1
  25. data/tracks/csharp/exercises/bob/README.md +1 -1
  26. data/tracks/csharp/exercises/book-store/README.md +1 -1
  27. data/tracks/csharp/exercises/bowling/README.md +1 -1
  28. data/tracks/csharp/exercises/bracket-push/README.md +1 -1
  29. data/tracks/csharp/exercises/change/README.md +1 -1
  30. data/tracks/csharp/exercises/circular-buffer/README.md +1 -1
  31. data/tracks/csharp/exercises/clock/README.md +1 -1
  32. data/tracks/csharp/exercises/connect/README.md +1 -1
  33. data/tracks/csharp/exercises/crypto-square/README.md +1 -1
  34. data/tracks/csharp/exercises/custom-set/README.md +1 -1
  35. data/tracks/csharp/exercises/diamond/README.md +1 -1
  36. data/tracks/csharp/exercises/difference-of-squares/README.md +1 -1
  37. data/tracks/csharp/exercises/diffie-hellman/README.md +1 -1
  38. data/tracks/csharp/exercises/dominoes/README.md +1 -1
  39. data/tracks/csharp/exercises/dot-dsl/README.md +1 -1
  40. data/tracks/csharp/exercises/error-handling/README.md +1 -1
  41. data/tracks/csharp/exercises/etl/README.md +1 -1
  42. data/tracks/csharp/exercises/flatten-array/README.md +1 -1
  43. data/tracks/csharp/exercises/food-chain/README.md +1 -1
  44. data/tracks/csharp/exercises/forth/README.md +1 -1
  45. data/tracks/csharp/exercises/gigasecond/README.md +1 -1
  46. data/tracks/csharp/exercises/go-counting/README.md +1 -1
  47. data/tracks/csharp/exercises/grade-school/README.md +1 -1
  48. data/tracks/csharp/exercises/grains/README.md +1 -1
  49. data/tracks/csharp/exercises/grep/README.md +1 -1
  50. data/tracks/csharp/exercises/hamming/README.md +1 -1
  51. data/tracks/csharp/exercises/hangman/README.md +1 -1
  52. data/tracks/csharp/exercises/hello-world/README.md +1 -1
  53. data/tracks/csharp/exercises/house/README.md +1 -1
  54. data/tracks/csharp/exercises/isogram/README.md +1 -1
  55. data/tracks/csharp/exercises/kindergarten-garden/README.md +1 -1
  56. data/tracks/csharp/exercises/largest-series-product/README.md +1 -1
  57. data/tracks/csharp/exercises/leap/README.md +1 -1
  58. data/tracks/csharp/exercises/ledger/README.md +1 -1
  59. data/tracks/csharp/exercises/linked-list/README.md +1 -1
  60. data/tracks/csharp/exercises/list-ops/README.md +1 -1
  61. data/tracks/csharp/exercises/luhn/README.md +1 -1
  62. data/tracks/csharp/exercises/markdown/README.md +1 -1
  63. data/tracks/csharp/exercises/matrix/README.md +1 -1
  64. data/tracks/csharp/exercises/meetup/README.md +1 -1
  65. data/tracks/csharp/exercises/minesweeper/README.md +1 -1
  66. data/tracks/csharp/exercises/nth-prime/README.md +1 -1
  67. data/tracks/csharp/exercises/nucleotide-count/README.md +1 -1
  68. data/tracks/csharp/exercises/ocr-numbers/README.md +1 -1
  69. data/tracks/csharp/exercises/palindrome-products/README.md +1 -1
  70. data/tracks/csharp/exercises/pangram/README.md +1 -1
  71. data/tracks/csharp/exercises/parallel-letter-frequency/README.md +1 -1
  72. data/tracks/csharp/exercises/pascals-triangle/README.md +1 -1
  73. data/tracks/csharp/exercises/perfect-numbers/README.md +1 -1
  74. data/tracks/csharp/exercises/phone-number/README.md +1 -1
  75. data/tracks/csharp/exercises/pig-latin/README.md +1 -1
  76. data/tracks/csharp/exercises/poker/README.md +1 -1
  77. data/tracks/csharp/exercises/pov/README.md +1 -1
  78. data/tracks/csharp/exercises/prime-factors/README.md +1 -1
  79. data/tracks/csharp/exercises/protein-translation/README.md +1 -1
  80. data/tracks/csharp/exercises/proverb/README.md +1 -1
  81. data/tracks/csharp/exercises/pythagorean-triplet/README.md +1 -1
  82. data/tracks/csharp/exercises/queen-attack/README.md +1 -1
  83. data/tracks/csharp/exercises/rail-fence-cipher/README.md +1 -1
  84. data/tracks/csharp/exercises/raindrops/README.md +1 -1
  85. data/tracks/csharp/exercises/react/README.md +1 -1
  86. data/tracks/csharp/exercises/rectangles/README.md +1 -1
  87. data/tracks/csharp/exercises/rna-transcription/README.md +1 -1
  88. data/tracks/csharp/exercises/robot-name/README.md +1 -1
  89. data/tracks/csharp/exercises/robot-simulator/README.md +1 -1
  90. data/tracks/csharp/exercises/roman-numerals/README.md +1 -1
  91. data/tracks/csharp/exercises/rotational-cipher/README.md +1 -1
  92. data/tracks/csharp/exercises/run-length-encoding/README.md +1 -1
  93. data/tracks/csharp/exercises/saddle-points/README.md +1 -1
  94. data/tracks/csharp/exercises/say/README.md +1 -1
  95. data/tracks/csharp/exercises/scale-generator/README.md +1 -1
  96. data/tracks/csharp/exercises/scrabble-score/README.md +1 -1
  97. data/tracks/csharp/exercises/secret-handshake/README.md +1 -1
  98. data/tracks/csharp/exercises/series/README.md +1 -1
  99. data/tracks/csharp/exercises/sgf-parsing/README.md +1 -1
  100. data/tracks/csharp/exercises/sieve/README.md +1 -1
  101. data/tracks/csharp/exercises/simple-cipher/README.md +1 -1
  102. data/tracks/csharp/exercises/simple-linked-list/README.md +1 -1
  103. data/tracks/csharp/exercises/space-age/README.md +1 -1
  104. data/tracks/csharp/exercises/strain/README.md +1 -1
  105. data/tracks/csharp/exercises/sublist/README.md +1 -1
  106. data/tracks/csharp/exercises/sum-of-multiples/README.md +1 -1
  107. data/tracks/csharp/exercises/tournament/README.md +1 -1
  108. data/tracks/csharp/exercises/transpose/README.md +1 -1
  109. data/tracks/csharp/exercises/tree-building/README.md +1 -1
  110. data/tracks/csharp/exercises/triangle/README.md +1 -1
  111. data/tracks/csharp/exercises/twelve-days/README.md +1 -1
  112. data/tracks/csharp/exercises/two-bucket/README.md +1 -1
  113. data/tracks/csharp/exercises/variable-length-quantity/README.md +1 -1
  114. data/tracks/csharp/exercises/word-count/README.md +1 -1
  115. data/tracks/csharp/exercises/word-search/README.md +1 -1
  116. data/tracks/csharp/exercises/wordy/README.md +1 -1
  117. data/tracks/csharp/exercises/zebra-puzzle/README.md +1 -1
  118. data/tracks/csharp/exercises/zipper/README.md +1 -1
  119. data/tracks/d/config.json +1 -0
  120. data/tracks/dart/config/maintainers.json +15 -0
  121. data/tracks/ecmascript/config.json +76 -193
  122. data/tracks/ecmascript/exercises/twelve-days/README.md +66 -0
  123. data/tracks/ecmascript/exercises/twelve-days/example.js +53 -0
  124. data/tracks/ecmascript/exercises/twelve-days/package.json +68 -0
  125. data/tracks/ecmascript/exercises/twelve-days/twelve-days.spec.js +106 -0
  126. data/tracks/factor/config.json +1 -1
  127. data/tracks/fsharp/config/maintainers.json +35 -0
  128. data/tracks/go/config.json +82 -38
  129. data/tracks/go/config/maintainers.json +13 -22
  130. data/tracks/go/exercises/bowling/cases_test.go +11 -11
  131. data/tracks/go/exercises/forth/cases_test.go +7 -7
  132. data/tracks/go/exercises/forth/example.go +1 -1
  133. data/tracks/go/exercises/forth/forth_test.go +1 -1
  134. data/tracks/go/exercises/hamming/cases_test.go +7 -7
  135. data/tracks/go/exercises/hamming/hamming.go +1 -1
  136. data/tracks/go/exercises/phone-number/cases_test.go +2 -7
  137. data/tracks/go/exercises/phone-number/example.go +1 -1
  138. data/tracks/go/exercises/phone-number/phone_number_test.go +1 -1
  139. data/tracks/go/exercises/rna-transcription/cases_test.go +7 -7
  140. data/tracks/go/exercises/secret-handshake/cases_test.go +1 -1
  141. data/tracks/groovy/config.json +1 -0
  142. data/tracks/haxe/config.json +1 -1
  143. data/tracks/java/.travis.yml +1 -1
  144. data/tracks/java/config/maintainers.json +20 -0
  145. data/tracks/java/exercises/custom-set/src/test/java/CustomSetTest.java +1 -1
  146. data/tracks/java/exercises/word-count/src/test/java/WordCountTest.java +1 -1
  147. data/tracks/javascript/config.json +229 -247
  148. data/tracks/kotlin/config/maintainers.json +35 -0
  149. data/tracks/lfe/config/maintainers.json +15 -0
  150. data/tracks/lisp/config/maintainers.json +55 -0
  151. data/tracks/ocaml/config.json +0 -5
  152. data/tracks/ocaml/config/maintainers.json +25 -0
  153. data/tracks/perl5/config/maintainers.json +25 -0
  154. data/tracks/perl6/config/maintainers.json +25 -0
  155. data/tracks/pony/config/maintainers.json +15 -0
  156. data/tracks/pony/exercises/atbash-cipher/example.pony +2 -2
  157. data/tracks/pony/exercises/beer-song/example.pony +1 -1
  158. data/tracks/pony/exercises/bob/example.pony +1 -1
  159. data/tracks/pony/exercises/difference-of-squares/example.pony +1 -1
  160. data/tracks/pony/exercises/hamming/test.pony +12 -12
  161. data/tracks/pony/exercises/pascals-triangle/example.pony +1 -1
  162. data/tracks/pony/exercises/pascals-triangle/test.pony +6 -6
  163. data/tracks/pony/exercises/rna-transcription/test.pony +3 -3
  164. data/tracks/pony/exercises/roman-numerals/test.pony +3 -3
  165. data/tracks/purescript/config/maintainers.json +35 -0
  166. data/tracks/r/config.json +140 -81
  167. data/tracks/r/exercises/collatz-conjecture/README.md +43 -0
  168. data/tracks/r/exercises/collatz-conjecture/collatz-conjecture.R +3 -0
  169. data/tracks/r/exercises/collatz-conjecture/example.R +13 -0
  170. data/tracks/r/exercises/collatz-conjecture/test_collatz-conjecture.R +28 -0
  171. data/tracks/r/exercises/nucleotide-count/README.md +43 -0
  172. data/tracks/r/exercises/nucleotide-count/example.R +17 -0
  173. data/tracks/r/exercises/nucleotide-count/nucleotide-count.R +3 -0
  174. data/tracks/r/exercises/nucleotide-count/test_nucleotide-count.R +51 -0
  175. data/tracks/r/exercises/pangram/README.md +25 -0
  176. data/tracks/r/exercises/pangram/example.R +14 -0
  177. data/tracks/r/exercises/pangram/pangram.R +3 -0
  178. data/tracks/r/exercises/pangram/test_pangram.R +42 -0
  179. data/tracks/r/exercises/triangle/.meta/hints.md +4 -0
  180. data/tracks/r/exercises/triangle/README.md +41 -0
  181. data/tracks/r/exercises/triangle/example.R +23 -0
  182. data/tracks/r/exercises/triangle/test_triangle.R +72 -0
  183. data/tracks/r/exercises/triangle/triangle.R +3 -0
  184. data/tracks/rust/config.json +32 -1
  185. data/tracks/rust/config/maintainers.json +1 -6
  186. data/tracks/rust/exercises/acronym/tests/acronym.rs +1 -1
  187. data/tracks/rust/exercises/beer-song/example.rs +1 -1
  188. data/tracks/rust/exercises/circular-buffer/example.rs +8 -10
  189. data/tracks/rust/exercises/circular-buffer/tests/circular-buffer.rs +2 -2
  190. data/tracks/rust/exercises/clock/.meta/hints.md +10 -0
  191. data/tracks/rust/exercises/clock/Cargo.lock +4 -0
  192. data/tracks/rust/exercises/clock/Cargo.toml +6 -0
  193. data/tracks/rust/exercises/clock/README.md +57 -0
  194. data/tracks/rust/exercises/clock/example.rs +32 -0
  195. data/tracks/{ocaml/exercises/point-mutations/example.ml → rust/exercises/clock/src/lib.rs} +0 -0
  196. data/tracks/rust/exercises/clock/tests/clock.rs +331 -0
  197. data/tracks/rust/exercises/custom-set/tests/custom-set.rs +3 -3
  198. data/tracks/rust/exercises/dominoes/example.rs +1 -1
  199. data/tracks/rust/exercises/grade-school/example.rs +1 -1
  200. data/tracks/rust/exercises/hamming/example.rs +1 -1
  201. data/tracks/rust/exercises/nth-prime/Cargo.lock +4 -0
  202. data/tracks/rust/exercises/nth-prime/Cargo.toml +6 -0
  203. data/tracks/rust/exercises/nth-prime/README.md +47 -0
  204. data/tracks/rust/exercises/nth-prime/example.rs +28 -0
  205. data/tracks/rust/exercises/nth-prime/src/lib.rs +0 -0
  206. data/tracks/rust/exercises/nth-prime/tests/nth-prime.rs +30 -0
  207. data/tracks/rust/exercises/parallel-letter-frequency/example.rs +1 -1
  208. data/tracks/rust/exercises/phone-number/example.rs +1 -1
  209. data/tracks/rust/exercises/pythagorean-triplet/Cargo.lock +4 -0
  210. data/tracks/rust/exercises/pythagorean-triplet/Cargo.toml +6 -0
  211. data/tracks/rust/exercises/pythagorean-triplet/README.md +56 -0
  212. data/tracks/rust/exercises/pythagorean-triplet/example.rs +11 -0
  213. data/tracks/rust/exercises/pythagorean-triplet/src/lib.rs +0 -0
  214. data/tracks/rust/exercises/pythagorean-triplet/tests/pythagorean-triplet.rs +6 -0
  215. data/tracks/rust/exercises/rna-transcription/tests/rna-transcription.rs +1 -1
  216. data/tracks/rust/exercises/robot-name/tests/robot-name.rs +2 -2
  217. data/tracks/rust/exercises/say/example.rs +4 -4
  218. data/tracks/rust/exercises/say/tests/say.rs +4 -4
  219. data/tracks/rust/exercises/tournament/example.rs +2 -2
  220. data/tracks/scala/config/maintainers.json +10 -6
  221. data/tracks/scala/exercises/bracket-push/example.scala +2 -2
  222. data/tracks/scala/exercises/bracket-push/src/test/scala/BracketPushTest.scala +74 -0
  223. data/tracks/scala/exercises/crypto-square/example.scala +9 -9
  224. data/tracks/scala/exercises/crypto-square/src/test/scala/CryptoSquareTest.scala +33 -41
  225. data/tracks/scala/testgen/src/main/scala/BracketPushTestGenerator.scala +9 -38
  226. data/tracks/scala/testgen/src/main/scala/CryptoSquareTestGenerator.scala +17 -0
  227. data/tracks/sml/config.json +1 -1
  228. data/tracks/swift/config/maintainers.json +35 -0
  229. data/tracks/swift/docs/ABOUT.md +15 -5
  230. data/tracks/vimscript/config/maintainers.json +35 -0
  231. metadata +58 -8
  232. data/tracks/ocaml/exercises/point-mutations/Makefile +0 -8
  233. data/tracks/ocaml/exercises/point-mutations/README.md +0 -81
  234. data/tracks/ocaml/exercises/point-mutations/dna.mli +0 -6
  235. data/tracks/scala/exercises/bracket-push/src/test/scala/BracketsTest.scala +0 -68
  236. data/tracks/scala/exercises/crypto-square/src/main/scala/CryptoSquare.scala +0 -11
@@ -12,13 +12,7 @@
12
12
  },
13
13
  {
14
14
  "github_username": "kytrinyx",
15
- "show_on_website": false,
16
- "alumnus": false,
17
- "name": null,
18
- "bio": null,
19
- "link_text": null,
20
- "link_url": null,
21
- "avatar_url": null
15
+ "alumnus": true
22
16
  },
23
17
  {
24
18
  "github_username": "petertseng",
@@ -42,13 +36,10 @@
42
36
  },
43
37
  {
44
38
  "github_username": "tleen",
45
- "show_on_website": false,
46
- "alumnus": false,
47
- "name": null,
48
- "bio": null,
49
- "link_text": null,
50
- "link_url": null,
51
- "avatar_url": null
39
+ "show_on_website": true,
40
+ "name": "Tom Leen",
41
+ "link_text": "thomasleen.com",
42
+ "link_url": "http://www.thomasleen.com"
52
43
  },
53
44
  {
54
45
  "github_username": "soniakeys",
@@ -62,20 +53,20 @@
62
53
  },
63
54
  {
64
55
  "github_username": "robphoenix",
65
- "show_on_website": false,
56
+ "show_on_website": true,
66
57
  "alumnus": false,
67
- "name": null,
68
- "bio": null,
69
- "link_text": null,
70
- "link_url": null,
58
+ "name": "Rob Phoenix",
59
+ "bio": "I used to be an artist, and am now a software engineer, using Go to build tools for network engineers. Maintaining Exercism's Go track has opened up the world of open source to me.",
60
+ "link_text": "robphoenix.com",
61
+ "link_url": "https://blog.robphoenix.com/",
71
62
  "avatar_url": null
72
63
  },
73
64
  {
74
65
  "github_username": "leenipper",
75
- "show_on_website": false,
66
+ "show_on_website": true,
76
67
  "alumnus": false,
77
- "name": null,
78
- "bio": null,
68
+ "name": "Lee Nipper",
69
+ "bio": "Firmware Engineer by day. I like Go a lot, and I'm optimistic about its adoption. Helping on Exercism track allows me to learn more. My focus is adding exercise solutions and test case generators.",
79
70
  "link_text": null,
80
71
  "link_url": null,
81
72
  "avatar_url": null
@@ -1,8 +1,8 @@
1
1
  package bowling
2
2
 
3
3
  // Source: exercism/x-common
4
- // Commit: 3cf5eb9 bowling: Make canonical-data.json compliant
5
- // x-common version: 1.0.0
4
+ // Commit: 26e345e [Bowling] Fix case descriptions (#832)
5
+ // x-common version: 1.0.1
6
6
 
7
7
  var scoreTestCases = []struct {
8
8
  description string
@@ -119,14 +119,14 @@ var scoreTestCases = []struct {
119
119
  },
120
120
 
121
121
  {
122
- "an unstarted game can not be scored",
122
+ "an unstarted game cannot be scored",
123
123
  []int{},
124
124
  false,
125
125
  0,
126
126
  "Score cannot be taken until the end of the game",
127
127
  },
128
128
  {
129
- "an incomplete game can not be scored",
129
+ "an incomplete game cannot be scored",
130
130
  []int{0, 0},
131
131
  false,
132
132
  0,
@@ -165,35 +165,35 @@ var rollTestCases = []struct {
165
165
  }{
166
166
 
167
167
  {
168
- "rolls can not score negative points",
168
+ "rolls cannot score negative points",
169
169
  []int{},
170
170
  false,
171
171
  -1,
172
172
  "Negative roll is invalid",
173
173
  },
174
174
  {
175
- "a roll can not score more than 10 points",
175
+ "a roll cannot score more than 10 points",
176
176
  []int{},
177
177
  false,
178
178
  11,
179
179
  "Pin count exceeds pins on the lane",
180
180
  },
181
181
  {
182
- "two rolls in a frame can not score more than 10 points",
182
+ "two rolls in a frame cannot score more than 10 points",
183
183
  []int{5},
184
184
  false,
185
185
  6,
186
186
  "Pin count exceeds pins on the lane",
187
187
  },
188
188
  {
189
- "bonus roll after a strike in the last frame can not score more than 10 points",
189
+ "bonus roll after a strike in the last frame cannot score more than 10 points",
190
190
  []int{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10},
191
191
  false,
192
192
  11,
193
193
  "Pin count exceeds pins on the lane",
194
194
  },
195
195
  {
196
- "two bonus rolls after a strike in the last frame can not score more than 10 points",
196
+ "two bonus rolls after a strike in the last frame cannot score more than 10 points",
197
197
  []int{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 5},
198
198
  false,
199
199
  6,
@@ -201,14 +201,14 @@ var rollTestCases = []struct {
201
201
  },
202
202
 
203
203
  {
204
- "the second bonus rolls after a strike in the last frame can not be a strike if the first one is not a strike",
204
+ "the second bonus rolls after a strike in the last frame cannot be a strike if the first one is not a strike",
205
205
  []int{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 6},
206
206
  false,
207
207
  10,
208
208
  "Pin count exceeds pins on the lane",
209
209
  },
210
210
  {
211
- "second bonus roll after a strike in the last frame can not score than 10 points",
211
+ "second bonus roll after a strike in the last frame cannot score more than 10 points",
212
212
  []int{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10},
213
213
  false,
214
214
  11,
@@ -1,8 +1,8 @@
1
1
  package forth
2
2
 
3
3
  // Source: exercism/x-common
4
- // Commit: 0d6f5b7 forth: Fix canonical-data.json formatting
5
- // x-common version: 1.0.0
4
+ // Commit: 1b4165d Add test for Forth that an operator can be overridden.
5
+ // x-common version: 1.2.0
6
6
 
7
7
  type testGroup struct {
8
8
  group string
@@ -29,11 +29,6 @@ var testGroups = []testGroup{
29
29
  []string{"1 2 3 4 5"},
30
30
  []int{1, 2, 3, 4, 5},
31
31
  },
32
- {
33
- "all non-word characters are separators",
34
- []string{"1\x002\x133\n4\r5 6\t7"},
35
- []int{1, 2, 3, 4, 5, 6, 7},
36
- },
37
32
  },
38
33
  },
39
34
  {
@@ -254,6 +249,11 @@ var testGroups = []testGroup{
254
249
  []string{": swap dup ;", "1 swap"},
255
250
  []int{1, 1},
256
251
  },
252
+ {
253
+ "can override built-in operators",
254
+ []string{": + * ;", "3 4 +"},
255
+ []int{12},
256
+ },
257
257
  {
258
258
  "cannot redefine numbers",
259
259
  []string{": 1 2 ;"},
@@ -234,4 +234,4 @@ var errDivideByZero = errors.New("attempt to divide by zero")
234
234
  var errEmptyUserDef = errors.New("empty user definition")
235
235
  var errInvalidUserDef = errors.New("invalid user def word")
236
236
 
237
- const testVersion = 1
237
+ const testVersion = 2
@@ -9,7 +9,7 @@ import (
9
9
  "testing"
10
10
  )
11
11
 
12
- const targetTestVersion = 1
12
+ const targetTestVersion = 2
13
13
 
14
14
  func TestTestVersion(t *testing.T) {
15
15
  if testVersion != targetTestVersion {
@@ -1,14 +1,19 @@
1
1
  package hamming
2
2
 
3
3
  // Source: exercism/x-common
4
- // Commit: bb56dc7 Fix canonical-data.json formatting
5
- // x-common version: 1.0.0
4
+ // Commit: ebe9bbf fix versioning (#845)
5
+ // x-common version: 1.1.0
6
6
 
7
7
  var testCases = []struct {
8
8
  s1 string
9
9
  s2 string
10
10
  want int
11
11
  }{
12
+ { // empty strands
13
+ "",
14
+ "",
15
+ 0,
16
+ },
12
17
  { // identical strands
13
18
  "A",
14
19
  "A",
@@ -69,11 +74,6 @@ var testCases = []struct {
69
74
  "AGGACGGATTCT",
70
75
  9,
71
76
  },
72
- { // empty strands
73
- "",
74
- "",
75
- 0,
76
- },
77
77
  { // disallow first strand longer
78
78
  "AATG",
79
79
  "AAA",
@@ -1,6 +1,6 @@
1
1
  package hamming
2
2
 
3
- const testVersion = 5
3
+ const testVersion = 6
4
4
 
5
5
  func Distance(a, b string) (int, error) {
6
6
  }
@@ -1,8 +1,8 @@
1
1
  package phonenumber
2
2
 
3
3
  // Source: exercism/x-common
4
- // Commit: 51d2475 number: Rewrite description and add tests
5
- // x-common version: 1.1.0
4
+ // Commit: 39cba0d phone-number: Remove test using malformed input. (#772)
5
+ // x-common version: 1.2.0
6
6
 
7
7
  // Cleanup user-entered phone numbers
8
8
  var numberTests = []struct {
@@ -73,11 +73,6 @@ var numberTests = []struct {
73
73
  input: "123-@:!-7890",
74
74
  expectErr: true,
75
75
  },
76
- {
77
- description: "invalid with right number of digits but letters mixed in",
78
- input: "1a2b3c4d5e6f7g8h9i0j",
79
- expectErr: true,
80
- },
81
76
  {
82
77
  description: "invalid if area code does not start with 2-9",
83
78
  input: "(123) 456-7890",
@@ -5,7 +5,7 @@ import (
5
5
  "unicode"
6
6
  )
7
7
 
8
- const testVersion = 2
8
+ const testVersion = 3
9
9
 
10
10
  // Number takes in a potential phone number string and returns the number
11
11
  // without any formatting if it's valid.
@@ -4,7 +4,7 @@ import (
4
4
  "testing"
5
5
  )
6
6
 
7
- const targetTestVersion = 2
7
+ const targetTestVersion = 3
8
8
 
9
9
  func TestTestVersion(t *testing.T) {
10
10
  if testVersion != targetTestVersion {
@@ -1,25 +1,25 @@
1
1
  package strand
2
2
 
3
3
  // Source: exercism/x-common
4
- // Commit: 0b20fff rna-transcription: Fix canonical-data.json formatting
5
- // x-common version: 1.0.0
4
+ // Commit: cb1fd3a rna-transcription: rephrase negative test descriptions
5
+ // x-common version: 1.0.1
6
6
 
7
7
  var rnaTests = []struct {
8
8
  input string
9
9
  expected string
10
10
  }{
11
- // rna complement of cytosine is guanine
11
+ // RNA complement of cytosine is guanine
12
12
  {"C", "G"},
13
13
 
14
- // rna complement of guanine is cytosine
14
+ // RNA complement of guanine is cytosine
15
15
  {"G", "C"},
16
16
 
17
- // rna complement of thymine is adenine
17
+ // RNA complement of thymine is adenine
18
18
  {"T", "A"},
19
19
 
20
- // rna complement of adenine is uracil
20
+ // RNA complement of adenine is uracil
21
21
  {"A", "U"},
22
22
 
23
- // rna complement
23
+ // RNA complement
24
24
  {"ACGTGGTCTTAA", "UGCACCAGAAUU"},
25
25
  }
@@ -1,7 +1,7 @@
1
1
  package secret
2
2
 
3
3
  // Source: exercism/x-common
4
- // Commit: 69c8700 secret-handshake: remove tests for numbers > 31 (#794)
4
+ // Commit: 8acd78c Replace x-common with problem-specifications
5
5
  // x-common version: 1.1.0
6
6
 
7
7
  type secretHandshakeTest struct {
@@ -4,6 +4,7 @@
4
4
  "repository": "https://github.com/exercism/groovy",
5
5
  "checklist_issue": 9,
6
6
  "active": false,
7
+ "test_pattern": "(Test|Spec)[.]groovy",
7
8
  "foregone": [
8
9
 
9
10
  ],
@@ -2,7 +2,7 @@
2
2
  "language": "Haxe",
3
3
  "checklist_issue": 2,
4
4
  "active": false,
5
- "test_pattern": "TODO",
5
+ "test_pattern": "test.*Test[.]hx",
6
6
  "foregone": [
7
7
 
8
8
  ],
@@ -42,7 +42,7 @@ cache:
42
42
  notifications:
43
43
  webhooks:
44
44
  urls:
45
- - https://webhooks.gitter.im/e/5e9ccd41111917b19478
45
+ - https://webhooks.gitter.im/e/9a8514b96052a7155b59
46
46
  on_success: change # options: [always|never|change] default: always
47
47
  on_failure: always # options: [always|never|change] default: always
48
48
  on_start: never # options: [always|never|change] default: always
@@ -1,5 +1,25 @@
1
1
  {
2
2
  "maintainers": [
3
+ {
4
+ "github_username": "jtigger",
5
+ "show_on_website": false,
6
+ "alumnus": true,
7
+ "name": null,
8
+ "bio": null,
9
+ "link_text": null,
10
+ "link_url": null,
11
+ "avatar_url": null
12
+ },
13
+ {
14
+ "github_username": "matthewmorgan",
15
+ "show_on_website": false,
16
+ "alumnus": true,
17
+ "name": null,
18
+ "bio": null,
19
+ "link_text": null,
20
+ "link_url": null,
21
+ "avatar_url": null
22
+ },
3
23
  {
4
24
  "github_username": "sit",
5
25
  "show_on_website": false,
@@ -71,7 +71,7 @@ public class CustomSetTest {
71
71
 
72
72
  @Ignore("Remove to run test")
73
73
  @Test
74
- public void emptySetIsASubsetOfNonEemptySet() {
74
+ public void emptySetIsASubsetOfNonEmptySet() {
75
75
  final boolean actual
76
76
  = new CustomSet<>(Arrays.asList(1))
77
77
  .isSubset(
@@ -47,7 +47,7 @@ public class WordCountTest {
47
47
 
48
48
  @Ignore("Remove to run test")
49
49
  @Test
50
- public void countMultipleOccurences() {
50
+ public void countMultipleOccurrences() {
51
51
  expectedWordCount.put("one", 1);
52
52
  expectedWordCount.put("fish", 4);
53
53
  expectedWordCount.put("two", 1);
@@ -6,8 +6,7 @@
6
6
  {
7
7
  "uuid": "4756cfc9-7509-4783-8be7-60e3376b8256",
8
8
  "slug": "hello-world",
9
- "core": false,
10
- "unlocked_by": null,
9
+ "core": true,
11
10
  "difficulty": 1,
12
11
  "topics": [
13
12
  "Control-flow (conditionals)",
@@ -19,8 +18,7 @@
19
18
  {
20
19
  "uuid": "0c231a1c-55f7-47b6-8a54-ccae4ab0c65b",
21
20
  "slug": "leap",
22
- "core": false,
23
- "unlocked_by": null,
21
+ "core": true,
24
22
  "difficulty": 1,
25
23
  "topics": [
26
24
  "Booleans",
@@ -29,34 +27,35 @@
29
27
  ]
30
28
  },
31
29
  {
32
- "uuid": "3e1358c8-2bea-41f9-bc9e-8277f354a4e0",
33
- "slug": "hamming",
34
- "core": false,
35
- "unlocked_by": null,
36
- "difficulty": 2,
30
+ "uuid": "d7f57ab9-2edb-44cb-a04e-c575c0f4be4c",
31
+ "slug": "rna-transcription",
32
+ "core": true,
33
+ "difficulty": 1,
37
34
  "topics": [
38
- "Control-flow (loops)",
39
- "Control-flow (conditionals)",
40
- "Equality",
41
- "Strings"
35
+ "Strings",
36
+ "Transforming"
42
37
  ]
43
38
  },
44
39
  {
45
- "uuid": "d7f57ab9-2edb-44cb-a04e-c575c0f4be4c",
46
- "slug": "rna-transcription",
47
- "core": false,
48
- "unlocked_by": null,
40
+ "uuid": "fff57c49-cde9-4a0c-b70b-2903cef212af",
41
+ "slug": "simple-cipher",
42
+ "core": true,
49
43
  "difficulty": 1,
50
44
  "topics": [
45
+ "Control flow (conditionals)",
46
+ "Control flow (loops)",
47
+ "Algorithms",
48
+ "Mathematics",
51
49
  "Strings",
50
+ "Randomness",
51
+ "Text formatting",
52
52
  "Transforming"
53
53
  ]
54
54
  },
55
55
  {
56
56
  "uuid": "c57bf909-130f-46e6-97ca-aeed58df1a15",
57
57
  "slug": "pangram",
58
- "core": false,
59
- "unlocked_by": null,
58
+ "core": true,
60
59
  "difficulty": 2,
61
60
  "topics": [
62
61
  "Control flow (conditionals)",
@@ -71,8 +70,7 @@
71
70
  {
72
71
  "uuid": "246be5d9-b361-4893-9707-f218ede2bed6",
73
72
  "slug": "bob",
74
- "core": false,
75
- "unlocked_by": null,
73
+ "core": true,
76
74
  "difficulty": 2,
77
75
  "topics": [
78
76
  "Control flow (conditionals)",
@@ -86,18 +84,191 @@
86
84
  {
87
85
  "uuid": "49e4874b-d7e2-4305-a9bc-627fab4ada44",
88
86
  "slug": "gigasecond",
87
+ "core": true,
88
+ "difficulty": 2,
89
+ "topics": [
90
+ "Time"
91
+ ]
92
+ },
93
+ {
94
+ "uuid": "b668e11a-a8ce-4e94-ba68-3a1f0fa3f6c8",
95
+ "slug": "space-age",
96
+ "core": true,
97
+ "difficulty": 3,
98
+ "topics": [
99
+ "Classes",
100
+ "Floating-point numbers",
101
+ "Mathematics"
102
+ ]
103
+ },
104
+ {
105
+ "uuid": "c3035180-ff4c-4afe-8019-f8364158b74e",
106
+ "slug": "binary",
107
+ "core": true,
108
+ "difficulty": 4,
109
+ "topics": [
110
+ "Control flow (conditionals)",
111
+ "Control flow (loops)",
112
+ "Mathematics",
113
+ "Integers",
114
+ "Strings",
115
+ "Regular expressions",
116
+ "Exception handling"
117
+ ]
118
+ },
119
+ {
120
+ "uuid": "73ecd6c2-e59b-4354-b305-64e28a60433f",
121
+ "slug": "prime-factors",
122
+ "core": true,
123
+ "difficulty": 4,
124
+ "topics": [
125
+ "Control flow (conditionals)",
126
+ "Control flow (loops)",
127
+ "Mathematics",
128
+ "Algorithms",
129
+ "Integers"
130
+ ]
131
+ },
132
+ {
133
+ "uuid": "fbfe6032-c209-40bd-b485-8b2881638166",
134
+ "slug": "matrix",
135
+ "core": true,
136
+ "difficulty": 4,
137
+ "topics": [
138
+ "Control flow (conditionals)",
139
+ "Control flow (loops)",
140
+ "Data structures",
141
+ "Arrays",
142
+ "Matrices",
143
+ "Text formatting"
144
+ ]
145
+ },
146
+ {
147
+ "uuid": "ecc41237-f629-458f-873e-2cc51ba1a385",
148
+ "slug": "linked-list",
149
+ "core": true,
150
+ "difficulty": 5,
151
+ "topics": [
152
+ "Control flow (conditionals)",
153
+ "Control flow (loops)",
154
+ "Algorithms",
155
+ "Data structures",
156
+ "Arrays",
157
+ "Lists",
158
+ "Optional values"
159
+ ]
160
+ },
161
+ {
162
+ "uuid": "a96ab45d-10a0-42cf-a754-c2466037ceaf",
163
+ "slug": "pascals-triangle",
164
+ "core": true,
165
+ "difficulty": 5,
166
+ "topics": [
167
+ "Control flow (conditionals)",
168
+ "Control flow (loops)",
169
+ "Mathematics",
170
+ "Strings",
171
+ "Text formatting"
172
+ ]
173
+ },
174
+ {
175
+ "uuid": "0a3a452c-f734-47eb-8e65-34c8ae710ef0",
176
+ "slug": "secret-handshake",
177
+ "core": true,
178
+ "difficulty": 6,
179
+ "topics": [
180
+ "Control flow (conditionals)",
181
+ "Control flow (loops)",
182
+ "Algorithms",
183
+ "Games",
184
+ "Bitwise operations",
185
+ "Arrays"
186
+ ]
187
+ },
188
+ {
189
+ "uuid": "029bc3ed-772d-439b-bd0a-1ba1196a79ec",
190
+ "slug": "grade-school",
191
+ "core": true,
192
+ "difficulty": 6,
193
+ "topics": [
194
+ "Arrays",
195
+ "Maps",
196
+ "Sorting"
197
+ ]
198
+ },
199
+ {
200
+ "uuid": "3005340b-a8d6-46ac-9075-125f9adccc2a",
201
+ "slug": "robot-name",
202
+ "core": true,
203
+ "difficulty": 6,
204
+ "topics": [
205
+ "Control flow (conditionals)",
206
+ "Exception handling",
207
+ "Sets",
208
+ "Randomness",
209
+ "Regular expressions"
210
+ ]
211
+ },
212
+ {
213
+ "uuid": "bb54bf08-24ba-45e1-bdf7-08db161e5843",
214
+ "slug": "wordy",
215
+ "core": true,
216
+ "difficulty": 7,
217
+ "topics": [
218
+ "Control flow (conditionals)",
219
+ "Control flow (loops)",
220
+ "Regular expressions",
221
+ "Exception handling",
222
+ "Strings",
223
+ "Pattern recognition",
224
+ "Parsing"
225
+ ]
226
+ },
227
+ {
228
+ "uuid": "e70defe4-5944-4392-956c-63cb92e7fd9c",
229
+ "slug": "list-ops",
230
+ "core": true,
231
+ "difficulty": 8,
232
+ "topics": [
233
+ "Data structures",
234
+ "Lists",
235
+ "Recursion"
236
+ ]
237
+ },
238
+ {
239
+ "uuid": "3e1358c8-2bea-41f9-bc9e-8277f354a4e0",
240
+ "slug": "hamming",
241
+ "core": false,
242
+ "unlocked_by": "rna-transcription",
243
+ "difficulty": 2,
244
+ "topics": [
245
+ "Control-flow (loops)",
246
+ "Control-flow (conditionals)",
247
+ "Equality",
248
+ "Strings"
249
+ ]
250
+ },
251
+ {
252
+ "uuid": "d66c2b56-b465-4922-af35-ae78944c0aac",
253
+ "slug": "run-length-encoding",
89
254
  "core": false,
90
255
  "unlocked_by": null,
91
256
  "difficulty": 2,
92
257
  "topics": [
93
- "Time"
258
+ "Control flow (conditionals)",
259
+ "Exception handling",
260
+ "Parsing",
261
+ "Text formatting",
262
+ "Regular expressions",
263
+ "Pattern recognition",
264
+ "Strings"
94
265
  ]
95
266
  },
96
267
  {
97
268
  "uuid": "35821375-5c94-4d4b-aa56-e3b079a45ca0",
98
269
  "slug": "isogram",
99
270
  "core": false,
100
- "unlocked_by": null,
271
+ "unlocked_by": "pangram",
101
272
  "difficulty": 2,
102
273
  "topics": [
103
274
  "Strings",
@@ -108,7 +279,7 @@
108
279
  "uuid": "6f315fc3-095a-4387-aefb-cc5fee97110a",
109
280
  "slug": "beer-song",
110
281
  "core": false,
111
- "unlocked_by": null,
282
+ "unlocked_by": "bob",
112
283
  "difficulty": 5,
113
284
  "topics": [
114
285
  "Control flow (conditionals)",
@@ -120,7 +291,7 @@
120
291
  "uuid": "347f9f54-a0d9-469d-babf-b3edb34d9d70",
121
292
  "slug": "phone-number",
122
293
  "core": false,
123
- "unlocked_by": null,
294
+ "unlocked_by": "pangram",
124
295
  "difficulty": 3,
125
296
  "topics": [
126
297
  "Parsing",
@@ -131,7 +302,7 @@
131
302
  "uuid": "432ec2ce-c919-4142-aea2-389b67503252",
132
303
  "slug": "anagram",
133
304
  "core": false,
134
- "unlocked_by": null,
305
+ "unlocked_by": "pangram",
135
306
  "difficulty": 1,
136
307
  "topics": [
137
308
  "Strings",
@@ -142,44 +313,18 @@
142
313
  "uuid": "a717745f-da00-4a5f-8bf3-6876e20cdf17",
143
314
  "slug": "food-chain",
144
315
  "core": false,
145
- "unlocked_by": null,
316
+ "unlocked_by": "bob",
146
317
  "difficulty": 4,
147
318
  "topics": [
148
319
  "Text formatting",
149
320
  "Algorithms"
150
321
  ]
151
322
  },
152
- {
153
- "uuid": "029bc3ed-772d-439b-bd0a-1ba1196a79ec",
154
- "slug": "grade-school",
155
- "core": false,
156
- "unlocked_by": null,
157
- "difficulty": 6,
158
- "topics": [
159
- "Arrays",
160
- "Maps",
161
- "Sorting"
162
- ]
163
- },
164
- {
165
- "uuid": "3005340b-a8d6-46ac-9075-125f9adccc2a",
166
- "slug": "robot-name",
167
- "core": false,
168
- "unlocked_by": null,
169
- "difficulty": 6,
170
- "topics": [
171
- "Control flow (conditionals)",
172
- "Exception handling",
173
- "Sets",
174
- "Randomness",
175
- "Regular expressions"
176
- ]
177
- },
178
323
  {
179
324
  "uuid": "a2a19f61-62ba-447a-8f57-537c8baa2e7a",
180
325
  "slug": "etl",
181
326
  "core": false,
182
- "unlocked_by": null,
327
+ "unlocked_by": "rna-transcription",
183
328
  "difficulty": 2,
184
329
  "topics": [
185
330
  "Control flow (loops)",
@@ -199,23 +344,11 @@
199
344
  "Arrays"
200
345
  ]
201
346
  },
202
- {
203
- "uuid": "b668e11a-a8ce-4e94-ba68-3a1f0fa3f6c8",
204
- "slug": "space-age",
205
- "core": false,
206
- "unlocked_by": null,
207
- "difficulty": 3,
208
- "topics": [
209
- "Classes",
210
- "Floating-point numbers",
211
- "Mathematics"
212
- ]
213
- },
214
347
  {
215
348
  "uuid": "c5be6908-f45c-4278-ba99-3701024f4eda",
216
349
  "slug": "grains",
217
350
  "core": false,
218
- "unlocked_by": null,
351
+ "unlocked_by": "space-age",
219
352
  "difficulty": 5,
220
353
  "topics": [
221
354
  "Control flow (loops)",
@@ -227,7 +360,7 @@
227
360
  "uuid": "fde792fa-84e9-4b86-8ecb-8466ad92a99d",
228
361
  "slug": "triangle",
229
362
  "core": false,
230
- "unlocked_by": null,
363
+ "unlocked_by": "leap",
231
364
  "difficulty": 3,
232
365
  "topics": [
233
366
  "Control flow (loops)",
@@ -241,7 +374,7 @@
241
374
  "uuid": "1ff85150-6c51-4758-af02-4484cf35658e",
242
375
  "slug": "clock",
243
376
  "core": false,
244
- "unlocked_by": null,
377
+ "unlocked_by": "gigasecond",
245
378
  "difficulty": 5,
246
379
  "topics": [
247
380
  "Dates",
@@ -253,7 +386,7 @@
253
386
  "uuid": "51aa5429-b2db-43ad-83cf-84e2ead22cb6",
254
387
  "slug": "perfect-numbers",
255
388
  "core": false,
256
- "unlocked_by": null,
389
+ "unlocked_by": "space-age",
257
390
  "difficulty": 3,
258
391
  "topics": [
259
392
  "Control flow (conditionals)",
@@ -267,7 +400,7 @@
267
400
  "uuid": "9a4ea3da-ad43-4850-bdf3-2c578c5de838",
268
401
  "slug": "word-count",
269
402
  "core": false,
270
- "unlocked_by": null,
403
+ "unlocked_by": "pangram",
271
404
  "difficulty": 1,
272
405
  "topics": [
273
406
  "Control flow (loops)",
@@ -281,7 +414,7 @@
281
414
  "uuid": "0c1c4788-0372-42e7-81c1-b090bb7ebc8b",
282
415
  "slug": "acronym",
283
416
  "core": false,
284
- "unlocked_by": null,
417
+ "unlocked_by": "pangram",
285
418
  "difficulty": 2,
286
419
  "topics": [
287
420
  "Strings",
@@ -294,7 +427,7 @@
294
427
  "uuid": "a6bd8126-3879-4593-8380-39ebfa87801b",
295
428
  "slug": "scrabble-score",
296
429
  "core": false,
297
- "unlocked_by": null,
430
+ "unlocked_by": "rna-transcription",
298
431
  "difficulty": 5,
299
432
  "topics": [
300
433
  "Control flow (conditionals)",
@@ -332,41 +465,11 @@
332
465
  "Exception handling"
333
466
  ]
334
467
  },
335
- {
336
- "uuid": "c3035180-ff4c-4afe-8019-f8364158b74e",
337
- "slug": "binary",
338
- "core": false,
339
- "unlocked_by": null,
340
- "difficulty": 4,
341
- "topics": [
342
- "Control flow (conditionals)",
343
- "Control flow (loops)",
344
- "Mathematics",
345
- "Integers",
346
- "Strings",
347
- "Regular expressions",
348
- "Exception handling"
349
- ]
350
- },
351
- {
352
- "uuid": "73ecd6c2-e59b-4354-b305-64e28a60433f",
353
- "slug": "prime-factors",
354
- "core": false,
355
- "unlocked_by": null,
356
- "difficulty": 4,
357
- "topics": [
358
- "Control flow (conditionals)",
359
- "Control flow (loops)",
360
- "Mathematics",
361
- "Algorithms",
362
- "Integers"
363
- ]
364
- },
365
468
  {
366
469
  "uuid": "86b1acf1-9e2d-4b04-b8b0-e9ae6beb5f3d",
367
470
  "slug": "raindrops",
368
471
  "core": false,
369
- "unlocked_by": null,
472
+ "unlocked_by": "rna-transcription",
370
473
  "difficulty": 2,
371
474
  "topics": [
372
475
  "Control flow (conditionals)",
@@ -379,7 +482,7 @@
379
482
  "uuid": "23210e9e-81f6-4279-a776-00459c7ccd02",
380
483
  "slug": "allergies",
381
484
  "core": false,
382
- "unlocked_by": null,
485
+ "unlocked_by": "rna-transcription",
383
486
  "difficulty": 6,
384
487
  "topics": [
385
488
  "Control flow (conditionals)",
@@ -392,7 +495,7 @@
392
495
  "uuid": "e61f3d54-55d2-4d32-9d2a-e7d6af3a3247",
393
496
  "slug": "strain",
394
497
  "core": false,
395
- "unlocked_by": null,
498
+ "unlocked_by": "list-ops",
396
499
  "difficulty": 4,
397
500
  "topics": [
398
501
  "Control flow (conditionals)",
@@ -423,7 +526,7 @@
423
526
  "uuid": "dc9b2598-9757-4b20-82f9-8049ad081ac9",
424
527
  "slug": "accumulate",
425
528
  "core": false,
426
- "unlocked_by": null,
529
+ "unlocked_by": "list-ops",
427
530
  "difficulty": 5,
428
531
  "topics": [
429
532
  "Control flow (loops)",
@@ -478,23 +581,6 @@
478
581
  "Recursion"
479
582
  ]
480
583
  },
481
- {
482
- "uuid": "fff57c49-cde9-4a0c-b70b-2903cef212af",
483
- "slug": "simple-cipher",
484
- "core": false,
485
- "unlocked_by": null,
486
- "difficulty": 1,
487
- "topics": [
488
- "Control flow (conditionals)",
489
- "Control flow (loops)",
490
- "Algorithms",
491
- "Mathematics",
492
- "Strings",
493
- "Randomness",
494
- "Text formatting",
495
- "Transforming"
496
- ]
497
- },
498
584
  {
499
585
  "uuid": "9892d47d-97a0-4a2f-8284-6f84c86559e8",
500
586
  "slug": "octal",
@@ -514,7 +600,7 @@
514
600
  "uuid": "bb46e832-8c37-45ee-9ee7-5037015b965c",
515
601
  "slug": "luhn",
516
602
  "core": false,
517
- "unlocked_by": null,
603
+ "unlocked_by": "space-age",
518
604
  "difficulty": 4,
519
605
  "topics": [
520
606
  "Control flow (conditionals)",
@@ -528,7 +614,7 @@
528
614
  "uuid": "9a515ad0-34c7-4191-8784-5c4cd6385b38",
529
615
  "slug": "pig-latin",
530
616
  "core": false,
531
- "unlocked_by": null,
617
+ "unlocked_by": "bob",
532
618
  "difficulty": 4,
533
619
  "topics": [
534
620
  "Control flow (conditionals)",
@@ -543,7 +629,7 @@
543
629
  "uuid": "26a973dd-d72e-40fb-abeb-0ba306356ed6",
544
630
  "slug": "pythagorean-triplet",
545
631
  "core": false,
546
- "unlocked_by": null,
632
+ "unlocked_by": "space-age",
547
633
  "difficulty": 5,
548
634
  "topics": [
549
635
  "Control flow (conditionals)",
@@ -557,7 +643,7 @@
557
643
  "uuid": "06afdb06-8d2a-4cb0-baf1-48ae997cf1f5",
558
644
  "slug": "series",
559
645
  "core": false,
560
- "unlocked_by": null,
646
+ "unlocked_by": "pangram",
561
647
  "difficulty": 3,
562
648
  "topics": [
563
649
  "Control flow (loops)",
@@ -570,7 +656,7 @@
570
656
  "uuid": "07110dd5-b879-40b9-9485-685cb0963d8f",
571
657
  "slug": "difference-of-squares",
572
658
  "core": false,
573
- "unlocked_by": null,
659
+ "unlocked_by": "space-age",
574
660
  "difficulty": 3,
575
661
  "topics": [
576
662
  "Control flow (loops)",
@@ -579,26 +665,11 @@
579
665
  "Integers"
580
666
  ]
581
667
  },
582
- {
583
- "uuid": "0a3a452c-f734-47eb-8e65-34c8ae710ef0",
584
- "slug": "secret-handshake",
585
- "core": false,
586
- "unlocked_by": null,
587
- "difficulty": 6,
588
- "topics": [
589
- "Control flow (conditionals)",
590
- "Control flow (loops)",
591
- "Algorithms",
592
- "Games",
593
- "Bitwise operations",
594
- "Arrays"
595
- ]
596
- },
597
668
  {
598
669
  "uuid": "8786d591-077b-49bc-be8d-d014dc9dc308",
599
670
  "slug": "proverb",
600
671
  "core": false,
601
- "unlocked_by": null,
672
+ "unlocked_by": "bob",
602
673
  "difficulty": 4,
603
674
  "topics": [
604
675
  "Control flow (conditionals)",
@@ -609,43 +680,11 @@
609
680
  "Optional values"
610
681
  ]
611
682
  },
612
- {
613
- "uuid": "ecc41237-f629-458f-873e-2cc51ba1a385",
614
- "slug": "linked-list",
615
- "core": false,
616
- "unlocked_by": null,
617
- "difficulty": 5,
618
- "topics": [
619
- "Control flow (conditionals)",
620
- "Control flow (loops)",
621
- "Algorithms",
622
- "Data structures",
623
- "Arrays",
624
- "Lists",
625
- "Optional values"
626
- ]
627
- },
628
- {
629
- "uuid": "bb54bf08-24ba-45e1-bdf7-08db161e5843",
630
- "slug": "wordy",
631
- "core": false,
632
- "unlocked_by": null,
633
- "difficulty": 7,
634
- "topics": [
635
- "Control flow (conditionals)",
636
- "Control flow (loops)",
637
- "Regular expressions",
638
- "Exception handling",
639
- "Strings",
640
- "Pattern recognition",
641
- "Parsing"
642
- ]
643
- },
644
683
  {
645
684
  "uuid": "32a0a5fa-c7de-470c-beff-118b448b3916",
646
685
  "slug": "flatten-array",
647
686
  "core": false,
648
- "unlocked_by": null,
687
+ "unlocked_by": "list-ops",
649
688
  "difficulty": 1,
650
689
  "topics": [
651
690
  "Arrays",
@@ -671,7 +710,7 @@
671
710
  "uuid": "44bd02a7-0e3a-4441-ab76-524e36d4661c",
672
711
  "slug": "largest-series-product",
673
712
  "core": false,
674
- "unlocked_by": null,
713
+ "unlocked_by": "pangram",
675
714
  "difficulty": 7,
676
715
  "topics": [
677
716
  "Control flow (conditionals)",
@@ -687,7 +726,7 @@
687
726
  "uuid": "2702ac90-0be2-43a2-91b6-7256a25fec87",
688
727
  "slug": "kindergarten-garden",
689
728
  "core": false,
690
- "unlocked_by": null,
729
+ "unlocked_by": "wordy",
691
730
  "difficulty": 7,
692
731
  "topics": [
693
732
  "Control flow (conditionals)",
@@ -724,27 +763,12 @@
724
763
  "Algorithms"
725
764
  ]
726
765
  },
727
- {
728
- "uuid": "fbfe6032-c209-40bd-b485-8b2881638166",
729
- "slug": "matrix",
730
- "core": false,
731
- "unlocked_by": null,
732
- "difficulty": 4,
733
- "topics": [
734
- "Control flow (conditionals)",
735
- "Control flow (loops)",
736
- "Data structures",
737
- "Arrays",
738
- "Matrices",
739
- "Text formatting"
740
- ]
741
- },
742
766
  {
743
767
  "uuid": "00002977-ea1e-45e2-b66e-09d793b5c1ad",
744
768
  "slug": "robot-simulator",
745
769
  "core": false,
746
- "unlocked_by": null,
747
- "difficulty": 1,
770
+ "unlocked_by": "wordy",
771
+ "difficulty": 5,
748
772
  "topics": [
749
773
  "Control flow (conditionals)",
750
774
  "Control flow (loops)",
@@ -784,25 +808,11 @@
784
808
  "Integers"
785
809
  ]
786
810
  },
787
- {
788
- "uuid": "a96ab45d-10a0-42cf-a754-c2466037ceaf",
789
- "slug": "pascals-triangle",
790
- "core": false,
791
- "unlocked_by": null,
792
- "difficulty": 5,
793
- "topics": [
794
- "Control flow (conditionals)",
795
- "Control flow (loops)",
796
- "Mathematics",
797
- "Strings",
798
- "Text formatting"
799
- ]
800
- },
801
811
  {
802
812
  "uuid": "01d286f6-5f29-4d4b-a4de-e217a4833bfa",
803
813
  "slug": "say",
804
814
  "core": false,
805
- "unlocked_by": null,
815
+ "unlocked_by": "bob",
806
816
  "difficulty": 6,
807
817
  "topics": [
808
818
  "Control flow (conditionals)",
@@ -882,7 +892,7 @@
882
892
  "uuid": "759618b1-7ccc-46cd-889d-aea58ec88756",
883
893
  "slug": "ocr-numbers",
884
894
  "core": false,
885
- "unlocked_by": null,
895
+ "unlocked_by": "matrix",
886
896
  "difficulty": 5,
887
897
  "topics": [
888
898
  "Control flow (conditionals)",
@@ -898,7 +908,7 @@
898
908
  "uuid": "86b1b6ba-c1fe-492d-a7ec-c22c525b4da8",
899
909
  "slug": "meetup",
900
910
  "core": false,
901
- "unlocked_by": null,
911
+ "unlocked_by": "gigasecond",
902
912
  "difficulty": 7,
903
913
  "topics": [
904
914
  "Control flow (conditionals)",
@@ -913,7 +923,7 @@
913
923
  "uuid": "25099f87-5c3b-4a8a-b648-4639d1e9fa84",
914
924
  "slug": "bracket-push",
915
925
  "core": false,
916
- "unlocked_by": null,
926
+ "unlocked_by": "pangram",
917
927
  "difficulty": 3,
918
928
  "topics": [
919
929
  "Control flow (conditionals)",
@@ -927,7 +937,7 @@
927
937
  "uuid": "4c857b17-33b0-47fa-b981-6b2fe4e394a1",
928
938
  "slug": "two-bucket",
929
939
  "core": false,
930
- "unlocked_by": null,
940
+ "unlocked_by": "grade-school",
931
941
  "difficulty": 6,
932
942
  "topics": [
933
943
  "Control flow (conditionals)",
@@ -943,7 +953,7 @@
943
953
  "uuid": "c168fe1f-f84e-46e6-91fc-7553d048a4e9",
944
954
  "slug": "bowling",
945
955
  "core": false,
946
- "unlocked_by": null,
956
+ "unlocked_by": "grade-school",
947
957
  "difficulty": 8,
948
958
  "topics": [
949
959
  "Control flow (conditionals)",
@@ -986,27 +996,11 @@
986
996
  "Integers"
987
997
  ]
988
998
  },
989
- {
990
- "uuid": "d66c2b56-b465-4922-af35-ae78944c0aac",
991
- "slug": "run-length-encoding",
992
- "core": false,
993
- "unlocked_by": null,
994
- "difficulty": 2,
995
- "topics": [
996
- "Control flow (conditionals)",
997
- "Exception handling",
998
- "Parsing",
999
- "Text formatting",
1000
- "Regular expressions",
1001
- "Pattern recognition",
1002
- "Strings"
1003
- ]
1004
- },
1005
999
  {
1006
1000
  "uuid": "22fa5ab4-935b-44cc-b055-9803214ae5f3",
1007
1001
  "slug": "minesweeper",
1008
1002
  "core": false,
1009
- "unlocked_by": "queen-attack",
1003
+ "unlocked_by": null,
1010
1004
  "difficulty": 7,
1011
1005
  "topics": [
1012
1006
  "Games",
@@ -1018,7 +1012,7 @@
1018
1012
  "uuid": "42a7fd83-4508-403c-8b5e-f0a3126fac8a",
1019
1013
  "slug": "alphametics",
1020
1014
  "core": false,
1021
- "unlocked_by": null,
1015
+ "unlocked_by": "grade-school",
1022
1016
  "difficulty": 7,
1023
1017
  "topics": [
1024
1018
  "Games",
@@ -1037,18 +1031,6 @@
1037
1031
  "Lists"
1038
1032
  ]
1039
1033
  },
1040
- {
1041
- "uuid": "e70defe4-5944-4392-956c-63cb92e7fd9c",
1042
- "slug": "list-ops",
1043
- "core": false,
1044
- "unlocked_by": null,
1045
- "difficulty": 8,
1046
- "topics": [
1047
- "Data structures",
1048
- "Lists",
1049
- "Recursion"
1050
- ]
1051
- },
1052
1034
  {
1053
1035
  "uuid": "1b53340d-ea40-44ee-bf2e-42e516704e7c",
1054
1036
  "slug": "nucleotide-count",