trackler 2.2.1.6 → 2.2.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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",