trackler 2.1.0.32 → 2.1.0.33

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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/common/CONTRIBUTING.md +1 -24
  3. data/fixtures/tracks/animal/config.json +6 -2
  4. data/fixtures/tracks/fake/config.json +0 -5
  5. data/fixtures/tracks/fruit/config.json +16 -4
  6. data/fixtures/tracks/jewels/config.json +6 -2
  7. data/fixtures/tracks/shoes/config.json +6 -2
  8. data/fixtures/tracks/snowflake/config.json +21 -5
  9. data/lib/trackler/track.rb +0 -11
  10. data/lib/trackler/version.rb +1 -1
  11. data/tracks/c/config.json +281 -245
  12. data/tracks/c/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  13. data/tracks/ceylon/config.json +0 -5
  14. data/tracks/ceylon/{exercises/TRACK_HINTS.md → docs/EXERCISE_README_INSERT.md} +0 -0
  15. data/tracks/cpp/config.json +9 -13
  16. data/tracks/cpp/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  17. data/tracks/cpp/exercises/grade-school/grade_school_test.cpp +1 -0
  18. data/tracks/cpp/exercises/nucleotide-count/nucleotide_count_test.cpp +1 -0
  19. data/tracks/crystal/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  20. data/tracks/csharp/config.json +4 -9
  21. data/tracks/csharp/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  22. data/tracks/delphi/config.json +31 -36
  23. data/tracks/delphi/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  24. data/tracks/ecmascript/config.json +65 -7
  25. data/tracks/ecmascript/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  26. data/tracks/elixir/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  27. data/tracks/elm/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  28. data/tracks/erlang/_test/bootstrap.sh +3 -5
  29. data/tracks/erlang/config.json +108 -40
  30. data/tracks/erlang/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  31. data/tracks/factor/config.json +6 -14
  32. data/tracks/factor/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  33. data/tracks/fsharp/config.json +1 -1
  34. data/tracks/fsharp/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  35. data/tracks/go/{exercises/TRACK_HINTS.md → docs/EXERCISE_README_INSERT.md} +0 -0
  36. data/tracks/haskell/config.json +0 -4
  37. data/tracks/haskell/{exercises/TRACK_HINTS.md → docs/EXERCISE_README_INSERT.md} +0 -0
  38. data/tracks/idris/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  39. data/tracks/java/{TRACK_HINTS.md → docs/EXERCISE_README_INSERT.md} +0 -0
  40. data/tracks/java/exercises/isogram/HINT.md +10 -0
  41. data/tracks/javascript/config.json +57 -6
  42. data/tracks/javascript/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  43. data/tracks/julia/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  44. data/tracks/kotlin/{TRACK_HINTS.md → docs/EXERCISE_README_INSERT.md} +0 -0
  45. data/tracks/lfe/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  46. data/tracks/lisp/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  47. data/tracks/lua/config.json +684 -611
  48. data/tracks/lua/{exercises/TRACK_HINTS.md → docs/EXERCISE_README_INSERT.md} +0 -0
  49. data/tracks/objective-c/config.json +235 -241
  50. data/tracks/objective-c/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  51. data/tracks/ocaml/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  52. data/tracks/perl6/config.json +70 -32
  53. data/tracks/php/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  54. data/tracks/r/config.json +72 -24
  55. data/tracks/r/{exercises/TRACK_HINTS.md → docs/EXERCISE_README_INSERT.md} +0 -0
  56. data/tracks/racket/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  57. data/tracks/ruby/exercises/bob/.meta/.version +1 -0
  58. data/tracks/ruby/exercises/bob/.meta/generator/bob_case.rb +9 -0
  59. data/tracks/ruby/exercises/bob/.meta/solutions/bob.rb +4 -0
  60. data/tracks/ruby/exercises/bob/bob_test.rb +95 -50
  61. data/tracks/rust/config.json +0 -5
  62. data/tracks/rust/{exercises/TRACK_HINTS.md → docs/EXERCISE_README_INSERT.md} +0 -0
  63. data/tracks/scala/config.json +758 -758
  64. data/tracks/scala/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  65. data/tracks/scheme/docs/EXERCISE_README_INSERT.md +0 -0
  66. data/tracks/swift/config.json +468 -478
  67. data/tracks/swift/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  68. data/tracks/typescript/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
  69. data/tracks/vbnet/config.json +21 -7
  70. metadata +37 -33
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c5ad44a7e68d17060f904305997256916000928c
4
- data.tar.gz: 262c51966c2eba2d2870792badd92f8f2f9ade76
3
+ metadata.gz: cd2031328b448784bbbb25c3474429115b197b0c
4
+ data.tar.gz: ce0d2fa5e4a4eb542e8d38d9490be58cacd9b063
5
5
  SHA512:
6
- metadata.gz: 001fbb9c03793117bef7a7bad3c82ca75fe2ea41562b479a095dc505383e65edc6784a78de809a667ecd33c220f8789aa5f9a2889ca3c512682da5b0ff973545
7
- data.tar.gz: 48e03ff57c34fa14be4bbef05786bcaf5928cc39feac666ce3c8139260bdbe9492e552f183c35a0829bd00f84b39d4d99629bf8196d014f72f768e269dc141c1
6
+ metadata.gz: 45ceeca0c9754f51c01f619ac22a7efc4af9c0d97945fee6c01f936d2d44561feaa012adb5b2133aaa4817f0578a20fa86b77182b4d662ff85b31f03cf6f99fa
7
+ data.tar.gz: c459730635818484f75dfd170b5c4a96871edc6039330fd1e742a2c1adb549f3f309855d03157dd1a4bb27efa0569601bf49321ad55cdad1cdb292118f7d7e33
@@ -335,30 +335,7 @@ scenarios in this guide.
335
335
 
336
336
  ### Pull Request Guidelines
337
337
 
338
- 1. Put the name of the exercise in the subject line of the commit.
339
- E.g. `hamming: Add test case for strands of unequal length`
340
- 1. The subject line should be a one-sentence summary, and should not include
341
- the word *and* (explicitly or implied).
342
- 1. Any extra detail should be provided in the body of the PR.
343
- 1. Don't submit unrelated changes in the same pull request.
344
- 1. If you had a bit of churn in the process of getting the change right,
345
- squash your commits.
346
- 1. If you had to refactor in order to add your change, then we'd love to
347
- see two commits: First the refactoring, then the added behavior. It's
348
- fine to put this in the same pull request, unless the refactoring is
349
- huge and would make it hard to review both at the same time.
350
- 1. If you are referencing another issue or pull-request, for instance
351
- *closes #XXX* or *see #XXX*, please include the reference in the body of the PR,
352
- rather than the subject line. This is simply because the subject line doesn't
353
- support markdown, and so these don't get turned into clickable links. It makes
354
- it harder to follow and to go look at the related issue or PR.
355
- 1. Please also refer to the guidelines for [commit messages](#commit-messages).
356
-
357
- Once you've submitted a pull request, one or more of the track maintainers
358
- will review it. Some tracks are less active and might not have someone
359
- checking in every day. If you don't get a response within a couple of days,
360
- feel free to ping us in the [support
361
- chat](https://gitter.im/exercism/support).
338
+ See the [pull request guidelines](https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/pull-request-guidelines.md) in the docs repository.
362
339
 
363
340
  ### Exercise Versioning
364
341
 
@@ -5,8 +5,12 @@
5
5
  "active": true,
6
6
  "test_pattern": "a.*animal",
7
7
  "ignore_pattern": "[^_]example",
8
- "problems": [
9
- "dog"
8
+ "exercises": [
9
+ {
10
+ "slug": "dog",
11
+ "difficulty": 1,
12
+ "topics": []
13
+ }
10
14
  ],
11
15
  "deprecated": [],
12
16
  "foregone": [
@@ -5,11 +5,6 @@
5
5
  "image": "fake.png",
6
6
  "checklist_issue": 5,
7
7
  "active": true,
8
- "problems": [
9
- "good",
10
- "bad",
11
- "ugly"
12
- ],
13
8
  "exercises": [
14
9
  {
15
10
  "slug": "hello-world" ,
@@ -6,10 +6,22 @@
6
6
  "active": true,
7
7
  "test_pattern": "\\.tst$",
8
8
  "gitter": "xfruit",
9
- "problems": [
10
- "apple",
11
- "banana",
12
- "cherry"
9
+ "exercises": [
10
+ {
11
+ "slug": "apple",
12
+ "difficulty": 1,
13
+ "topics": []
14
+ },
15
+ {
16
+ "slug": "banana",
17
+ "difficulty": 1,
18
+ "topics": []
19
+ },
20
+ {
21
+ "slug": "cherry",
22
+ "difficulty": 1,
23
+ "topics": []
24
+ }
13
25
  ],
14
26
  "deprecated": [
15
27
  "four"
@@ -3,8 +3,12 @@
3
3
  "language": "Fancy Stones",
4
4
  "repository": "https://github.com/exercism/xjewels",
5
5
  "active": true,
6
- "problems": [
7
- "hello-world"
6
+ "exercises": [
7
+ {
8
+ "slug": "hello-world",
9
+ "difficulty": 1,
10
+ "topics": []
11
+ }
8
12
  ],
9
13
  "deprecated": [],
10
14
  "foregone": []
@@ -3,8 +3,12 @@
3
3
  "language": "Shoes & Boots",
4
4
  "repository": "https://github.com/exercism/xshoes",
5
5
  "active": false,
6
- "problems": [
7
- "hello-world"
6
+ "exercises": [
7
+ {
8
+ "slug": "hello-world",
9
+ "difficulty": 1,
10
+ "topics": []
11
+ }
8
12
  ],
9
13
  "deprecated": [],
10
14
  "foregone": []
@@ -4,11 +4,27 @@
4
4
  "repository": "https://example.com/exercism/xsnowflake",
5
5
  "active": true,
6
6
  "test_pattern": "\\.tst$",
7
- "problems": [
8
- "apple",
9
- "banana",
10
- "cherry",
11
- "snowflake-only"
7
+ "exercises": [
8
+ {
9
+ "slug": "apple",
10
+ "difficulty": 1,
11
+ "topics": []
12
+ },
13
+ {
14
+ "slug": "banana",
15
+ "difficulty": 1,
16
+ "topics": []
17
+ },
18
+ {
19
+ "slug": "cherry",
20
+ "difficulty": 1,
21
+ "topics": []
22
+ },
23
+ {
24
+ "slug": "snowflake-only",
25
+ "difficulty": 1,
26
+ "topics": []
27
+ }
12
28
  ],
13
29
  "deprecated": [
14
30
  ],
@@ -136,21 +136,10 @@ module Trackler
136
136
  filepaths.find(-> { '' }) { |filepath| File.exist? filepath }
137
137
  end
138
138
 
139
- # The slugs for the problems that are currently in the track.
140
- # We deprecated the old array of problem slugs in favor of an array
141
- # containing richer metadata about a given exercise.
142
139
  def active_slugs
143
- __active_slugs__.empty? ? __active_slugs_deprecated_key__ : __active_slugs__
144
- end
145
-
146
- def __active_slugs__
147
140
  (config["exercises"] || []).map { |ex| ex["slug"] }
148
141
  end
149
142
 
150
- def __active_slugs_deprecated_key__
151
- config["problems"] || []
152
- end
153
-
154
143
  def foregone_slugs
155
144
  config["foregone"] || []
156
145
  end
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.1.0.32"
2
+ VERSION = "2.1.0.33"
3
3
  end
data/tracks/c/config.json CHANGED
@@ -4,290 +4,326 @@
4
4
  "repository": "https://github.com/exercism/xc",
5
5
  "checklist_issue": 8,
6
6
  "active": false,
7
- "exercises": [{
8
- "slug": "hello-world",
9
- "difficulty": 1,
10
- "topics": [
11
- "control-flow (if-statements)",
12
- "optional values",
13
- "text formatting"
14
- ]
15
- }, {
16
- "difficulty": 5,
17
- "slug": "anagram",
18
- "topics": [
19
- "strings",
20
- "filtering",
21
- "structs",
22
- "memory management"
23
- ]
24
- }, {
25
- "difficulty": 1,
26
- "slug": "leap",
27
- "topics": [
28
- "logic",
29
- "control-flow (if-else statements)"
30
- ]
31
- }, {
32
- "difficulty": 1,
33
- "slug": "gigasecond",
34
- "topics": [
35
- "dates"
36
- ]
37
- }, {
38
- "difficulty": 2,
39
- "slug": "hamming",
40
- "topics": [
41
- "arrays",
42
- "strings",
43
- "control-flow (loops)"
44
- ]
45
- }, {
46
- "difficulty": 2,
47
- "slug": "raindrops",
48
- "topics": [
49
- "strings",
50
- "control-flow (if-else statements)"
51
- ]
52
- }, {
53
- "difficulty": 10,
54
- "slug": "bob",
55
- "topics": [
56
- "strings",
57
- "control-flow (if-else statements)"
58
- ]
59
- }, {
60
- "difficulty": 1,
61
- "slug": "grains",
62
- "topics": [
63
- "control-flow (loops)",
64
- "bitwise operations",
65
- "performance optimizations"
66
- ]
67
- }, {
68
- "difficulty": 5,
69
- "slug": "largest-series-product",
70
- "topics": [
71
- "control-flow (loops)",
72
- "strings",
73
- "performance optimizations"
74
- ]
75
- }, {
76
- "difficulty": 3,
77
- "slug": "pangram",
78
- "topics": [
79
- "strings",
80
- "control-flow (if-else statements)",
81
- "control-flow (loops)"
82
- ]
83
- }, {
84
- "difficulty": 4,
85
- "slug": "nth-prime",
86
- "topics": [
87
- "control-flow (if-else statements)",
88
- "control-flow (loops)",
89
- "performance optimizations"
90
- ]
91
- }, {
92
- "difficulty": 2,
93
- "slug": "beer-song",
94
- "topics": [
95
- "strings",
96
- "control-flow (if-else statements)",
97
- "control-flow (loops)"
98
- ]
99
- }, {
100
- "difficulty": 2,
101
- "slug": "rna-transcription",
102
- "topics": [
103
- "strings",
104
- "control-flow (case statements)",
105
- "control-flow (loops)"
106
- ]
107
- }, {
108
- "difficulty": 1,
109
- "slug": "difference-of-squares",
110
- "topics": [
111
- "control-flow (loops)"
112
- ]
113
- }, {
114
- "difficulty": 4,
115
- "slug": "sum-of-multiples",
116
- "topics": [
117
- "control-flow (case statements)",
118
- "control-flow (loops)"
119
- ]
120
- }, {
121
- "difficulty": 2,
122
- "slug": "binary-search",
123
- "topics": [
124
- "arrays",
125
- "control-flow (if-else statements)",
126
- "control-flow (loops)",
127
- "searching"
128
- ]
129
- }, {
130
- "difficulty": 3,
131
- "slug": "roman-numerals",
132
- "topics": [
133
- "arrays",
134
- "memory management",
135
- "structs",
136
- "control-flow (loops)",
137
- "strings"
138
- ]
139
- }, {
140
- "difficulty": 3,
141
- "slug": "word-count",
142
- "topics": [
143
- "strings",
144
- "filtering",
145
- "structs",
146
- "memory management"
147
- ]
148
- }, {
149
- "difficulty": 4,
150
- "slug": "allergies",
151
- "topics": [
152
- "control-flow (if-statements)",
153
- "control-flow (loops)",
154
- "structs",
155
- "memory management"
156
- ]
157
- }, {
158
- "difficulty": 5,
159
- "slug": "atbash-cipher",
160
- "topics": [
161
- "control-flow (loops)",
162
- "control-flow (if-else statements)",
163
- "strings"
164
- ]
165
- }, {
166
- "difficulty": 4,
167
- "slug": "phone-number",
168
- "topics": [
169
- "strings",
170
- "memory management",
171
- "control-flow (loops)",
172
- "control-flow (if-else statements)"
173
- ]
174
- }, {
175
- "difficulty": 2,
176
- "slug": "clock",
177
- "topics": [
7
+ "exercises": [
8
+ {
9
+ "slug": "hello-world",
10
+ "difficulty": 1,
11
+ "topics": [
12
+ "control-flow (if-statements)",
13
+ "optional values",
14
+ "text formatting"
15
+ ]
16
+ },
17
+ {
18
+ "difficulty": 5,
19
+ "slug": "anagram",
20
+ "topics": [
21
+ "strings",
22
+ "filtering",
23
+ "structs",
24
+ "memory management"
25
+ ]
26
+ },
27
+ {
28
+ "difficulty": 1,
29
+ "slug": "leap",
30
+ "topics": [
31
+ "logic",
32
+ "control-flow (if-else statements)"
33
+ ]
34
+ },
35
+ {
36
+ "difficulty": 1,
37
+ "slug": "gigasecond",
38
+ "topics": [
39
+ "dates"
40
+ ]
41
+ },
42
+ {
43
+ "difficulty": 2,
44
+ "slug": "hamming",
45
+ "topics": [
46
+ "arrays",
47
+ "strings",
48
+ "control-flow (loops)"
49
+ ]
50
+ },
51
+ {
52
+ "difficulty": 2,
53
+ "slug": "raindrops",
54
+ "topics": [
55
+ "strings",
56
+ "control-flow (if-else statements)"
57
+ ]
58
+ },
59
+ {
60
+ "difficulty": 10,
61
+ "slug": "bob",
62
+ "topics": [
63
+ "strings",
64
+ "control-flow (if-else statements)"
65
+ ]
66
+ },
67
+ {
68
+ "difficulty": 1,
69
+ "slug": "grains",
70
+ "topics": [
71
+ "control-flow (loops)",
72
+ "bitwise operations",
73
+ "performance optimizations"
74
+ ]
75
+ },
76
+ {
77
+ "difficulty": 5,
78
+ "slug": "largest-series-product",
79
+ "topics": [
80
+ "control-flow (loops)",
81
+ "strings",
82
+ "performance optimizations"
83
+ ]
84
+ },
85
+ {
86
+ "difficulty": 3,
87
+ "slug": "pangram",
88
+ "topics": [
89
+ "strings",
90
+ "control-flow (if-else statements)",
91
+ "control-flow (loops)"
92
+ ]
93
+ },
94
+ {
95
+ "difficulty": 4,
96
+ "slug": "nth-prime",
97
+ "topics": [
98
+ "control-flow (if-else statements)",
99
+ "control-flow (loops)",
100
+ "performance optimizations"
101
+ ]
102
+ },
103
+ {
104
+ "difficulty": 2,
105
+ "slug": "beer-song",
106
+ "topics": [
107
+ "strings",
108
+ "control-flow (if-else statements)",
109
+ "control-flow (loops)"
110
+ ]
111
+ },
112
+ {
113
+ "difficulty": 2,
114
+ "slug": "rna-transcription",
115
+ "topics": [
116
+ "strings",
117
+ "control-flow (case statements)",
118
+ "control-flow (loops)"
119
+ ]
120
+ },
121
+ {
122
+ "difficulty": 1,
123
+ "slug": "difference-of-squares",
124
+ "topics": [
125
+ "control-flow (loops)"
126
+ ]
127
+ },
128
+ {
129
+ "difficulty": 4,
130
+ "slug": "sum-of-multiples",
131
+ "topics": [
132
+ "control-flow (case statements)",
133
+ "control-flow (loops)"
134
+ ]
135
+ },
136
+ {
137
+ "difficulty": 2,
138
+ "slug": "binary-search",
139
+ "topics": [
140
+ "arrays",
141
+ "control-flow (if-else statements)",
142
+ "control-flow (loops)",
143
+ "searching"
144
+ ]
145
+ },
146
+ {
147
+ "difficulty": 3,
148
+ "slug": "roman-numerals",
149
+ "topics": [
150
+ "arrays",
151
+ "memory management",
152
+ "structs",
153
+ "control-flow (loops)",
154
+ "strings"
155
+ ]
156
+ },
157
+ {
158
+ "difficulty": 3,
159
+ "slug": "word-count",
160
+ "topics": [
161
+ "strings",
162
+ "filtering",
163
+ "structs",
164
+ "memory management"
165
+ ]
166
+ },
167
+ {
168
+ "difficulty": 4,
169
+ "slug": "allergies",
170
+ "topics": [
171
+ "control-flow (if-statements)",
172
+ "control-flow (loops)",
173
+ "structs",
174
+ "memory management"
175
+ ]
176
+ },
177
+ {
178
+ "difficulty": 5,
179
+ "slug": "atbash-cipher",
180
+ "topics": [
181
+ "control-flow (loops)",
182
+ "control-flow (if-else statements)",
183
+ "strings"
184
+ ]
185
+ },
186
+ {
187
+ "difficulty": 4,
188
+ "slug": "phone-number",
189
+ "topics": [
190
+ "strings",
191
+ "memory management",
192
+ "control-flow (loops)",
193
+ "control-flow (if-else statements)"
194
+ ]
195
+ },
196
+ {
197
+ "difficulty": 2,
198
+ "slug": "clock",
199
+ "topics": [
178
200
  "control-flow (if-statements)",
179
201
  "strings",
180
202
  "text formatting",
181
203
  "preprocessor (x-macros in test)"
182
- ]
183
- }, {
184
- "difficulty": 2,
185
- "slug": "sieve",
186
- "topics": [
187
- "control-flow (if-statements)",
188
- "memory management"
189
- ]
190
- }, {
191
- "difficulty": 2,
192
- "slug": "series",
193
- "topics": [
204
+ ]
205
+ },
206
+ {
207
+ "difficulty": 2,
208
+ "slug": "sieve",
209
+ "topics": [
210
+ "control-flow (if-statements)",
211
+ "memory management"
212
+ ]
213
+ },
214
+ {
215
+ "difficulty": 2,
216
+ "slug": "series",
217
+ "topics": [
194
218
  "control-flow (if-statements)",
195
219
  "strings",
196
220
  "text formatting",
197
221
  "memory management"
198
- ]
199
- }, {
200
- "difficulty": 4,
201
- "slug": "meetup",
202
- "topics": [
222
+ ]
223
+ },
224
+ {
225
+ "difficulty": 4,
226
+ "slug": "meetup",
227
+ "topics": [
203
228
  "control-flow (if-statements)",
204
229
  "strings",
205
230
  "structs",
206
231
  "time functions",
207
232
  "preprocessor (x-macros in test)"
208
- ]
209
- }, {
210
- "difficulty": 2,
211
- "slug": "nucleotide-count",
212
- "topics": [
233
+ ]
234
+ },
235
+ {
236
+ "difficulty": 2,
237
+ "slug": "nucleotide-count",
238
+ "topics": [
213
239
  "control-flow (loops, switch, if-statements)",
214
240
  "strings",
215
241
  "text formatting",
216
242
  "memory management"
217
- ]
218
- }, {
219
- "difficulty": 2,
220
- "slug": "robot-simulator",
221
- "topics": [
243
+ ]
244
+ },
245
+ {
246
+ "difficulty": 2,
247
+ "slug": "robot-simulator",
248
+ "topics": [
222
249
  "strings",
223
250
  "control-flow (if-statements)",
224
251
  "structs",
225
252
  "variable argument lists",
226
253
  "pointers"
227
- ]
228
- }, {
229
- "difficulty": 1,
230
- "slug": "triangle",
231
- "topics": [
254
+ ]
255
+ },
256
+ {
257
+ "difficulty": 1,
258
+ "slug": "triangle",
259
+ "topics": [
232
260
  "control-flow (if-else statements)",
233
261
  "Booleans",
234
262
  "Structs",
235
263
  "Mathematics"
236
- ]
237
- }, {
238
- "difficulty": 1,
239
- "slug": "pascals-triangle",
240
- "topics" : [
241
- "control-flow (if-else statements)",
242
- "memory management",
243
- "Mathematics"
244
- ]
245
- }, {
246
- "difficulty": 1,
247
- "slug": "perfect-numbers",
248
- "topics" : [
249
- "control-flow (if-else statements)",
250
- "Mathematics"
251
- ]
252
- }, {
253
- "difficulty": 1,
254
- "slug": "binary",
255
- "topics": [
264
+ ]
265
+ },
266
+ {
267
+ "difficulty": 1,
268
+ "slug": "pascals-triangle",
269
+ "topics": [
270
+ "control-flow (if-else statements)",
271
+ "memory management",
272
+ "Mathematics"
273
+ ]
274
+ },
275
+ {
276
+ "difficulty": 1,
277
+ "slug": "perfect-numbers",
278
+ "topics": [
279
+ "control-flow (if-else statements)",
280
+ "Mathematics"
281
+ ]
282
+ },
283
+ {
284
+ "difficulty": 1,
285
+ "slug": "binary",
286
+ "topics": [
256
287
  "control-flow (loops)",
257
288
  "control-flow (if-statements)"
258
- ]
259
- },{
260
- "difficulty": 2,
261
- "slug": "palindrome-products",
262
- "topics": [
289
+ ]
290
+ },
291
+ {
292
+ "difficulty": 2,
293
+ "slug": "palindrome-products",
294
+ "topics": [
263
295
  "strings",
264
296
  "structs",
265
297
  "pointers",
266
298
  "Functions"
267
- ]
268
- }, {
269
- "difficulty": 4,
270
- "slug": "scrabble-score",
271
- "topics": [
299
+ ]
300
+ },
301
+ {
302
+ "difficulty": 4,
303
+ "slug": "scrabble-score",
304
+ "topics": [
272
305
  "structs",
273
306
  "pointers",
274
307
  "strings",
275
308
  "searching"
276
- ]
277
- }, {
278
- "difficulty": 1,
279
- "slug": "space-age",
280
- "topics": [
309
+ ]
310
+ },
311
+ {
312
+ "difficulty": 1,
313
+ "slug": "space-age",
314
+ "topics": [
281
315
  "Functions"
282
- ]
283
- }, {
284
- "difficulty": 10,
285
- "slug": "react",
286
- "topics": [
316
+ ]
317
+ },
318
+ {
319
+ "difficulty": 10,
320
+ "slug": "react",
321
+ "topics": [
287
322
  "memory management",
288
323
  "Functions"
289
- ]
290
- }],
324
+ ]
325
+ }
326
+ ],
291
327
  "deprecated": [
292
328
 
293
329
  ],