trackler 2.2.1.19 → 2.2.1.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/bash/config.json +11 -0
  4. data/tracks/bash/docs/ABOUT.md +5 -0
  5. data/tracks/bash/exercises/word-count/README.md +24 -0
  6. data/tracks/bash/exercises/word-count/example.awk +12 -0
  7. data/tracks/bash/exercises/word-count/example.sh +21 -0
  8. data/tracks/bash/exercises/word-count/word_count_test.sh +84 -0
  9. data/tracks/coffeescript/config/maintainers.json +5 -11
  10. data/tracks/csharp/.travis.yml +3 -0
  11. data/tracks/delphi/config/maintainers.json +1 -1
  12. data/tracks/ecmascript/config.json +108 -108
  13. data/tracks/elixir/exercises/phone-number/phone_number_test.exs +21 -1
  14. data/tracks/factor/docs/SNIPPET.txt +5 -0
  15. data/tracks/idris/docs/TESTS.md +7 -0
  16. data/tracks/java/config.json +47 -47
  17. data/tracks/javascript/config.json +103 -103
  18. data/tracks/julia/config.json +121 -121
  19. data/tracks/julia/docs/RESOURCES.md +1 -1
  20. data/tracks/julia/docs/SNIPPET.txt +8 -0
  21. data/tracks/objective-c/config.json +2 -3
  22. data/tracks/objective-c/exercises/rna-transcription/RNATranscriptionExample.m +11 -32
  23. data/tracks/ocaml/.travis-ci.sh +1 -1
  24. data/tracks/ocaml/.travis.yml +1 -1
  25. data/tracks/ocaml/README.md +1 -1
  26. data/tracks/ocaml/exercises/change/test.ml +24 -21
  27. data/tracks/ocaml/tools/test-generator/src/codegen.ml +3 -7
  28. data/tracks/ocaml/tools/test-generator/src/controller.ml +4 -5
  29. data/tracks/ocaml/tools/test-generator/src/languages.ml +4 -3
  30. data/tracks/ocaml/tools/test-generator/src/model.ml +1 -2
  31. data/tracks/ocaml/tools/test-generator/src/ocaml_special_cases.ml +19 -18
  32. data/tracks/ocaml/tools/test-generator/src/parser.ml +12 -17
  33. data/tracks/ocaml/tools/test-generator/src/purescript_special_cases.ml +11 -3
  34. data/tracks/ocaml/tools/test-generator/test/codegen_test.ml +2 -3
  35. data/tracks/ocaml/tools/test-generator/test/ocaml_special_cases_test.ml +12 -4
  36. data/tracks/ocaml/tools/test-generator/test/parser_test.ml +10 -10
  37. data/tracks/purescript/exercises/bob/test/Main.purs +5 -5
  38. data/tracks/ruby/bin/generate +1 -1
  39. data/tracks/ruby/docs/24pullrequests.md +1 -1
  40. data/tracks/ruby/exercises/all-your-base/all_your_base_test.rb +24 -24
  41. data/tracks/ruby/exercises/alphametics/.meta/generator/test_template.erb +1 -1
  42. data/tracks/ruby/exercises/bowling/.meta/generator/test_template.erb +1 -1
  43. data/tracks/ruby/exercises/bowling/bowling_test.rb +10 -10
  44. data/tracks/ruby/exercises/change/.meta/.version +1 -1
  45. data/tracks/ruby/exercises/change/.meta/solutions/change.rb +1 -1
  46. data/tracks/ruby/exercises/change/change_test.rb +7 -2
  47. data/tracks/ruby/exercises/collatz-conjecture/.meta/generator/collatz_conjecture_case.rb +1 -1
  48. data/tracks/ruby/exercises/connect/.meta/generator/test_template.erb +1 -1
  49. data/tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb +1 -1
  50. data/tracks/ruby/exercises/hamming/.meta/generator/hamming_case.rb +5 -1
  51. data/tracks/ruby/exercises/hamming/hamming_test.rb +7 -7
  52. data/tracks/ruby/exercises/leap/.meta/generator/test_template.erb +1 -1
  53. data/tracks/ruby/exercises/pangram/.meta/.version +1 -1
  54. data/tracks/ruby/exercises/pangram/.meta/solutions/pangram.rb +1 -1
  55. data/tracks/ruby/exercises/pangram/pangram_test.rb +3 -3
  56. data/tracks/ruby/exercises/rna-transcription/rna_transcription_test.rb +4 -4
  57. data/tracks/ruby/exercises/roman-numerals/.meta/solutions/roman_numerals.rb +1 -1
  58. data/tracks/ruby/exercises/space-age/.meta/generator/test_template.erb +1 -1
  59. data/tracks/ruby/lib/generator/test_template.erb +1 -1
  60. data/tracks/ruby/lib/generator/underscore.rb +1 -1
  61. data/tracks/ruby/lib/helper.rb +4 -4
  62. data/tracks/ruby/test/fixtures/{xruby → ruby}/exercises/alpha-beta/.meta/generator/test_template.erb +1 -1
  63. data/tracks/ruby/test/fixtures/{xruby → ruby}/exercises/alpha/.meta/.version +0 -0
  64. data/tracks/ruby/test/fixtures/{xruby → ruby}/exercises/alpha/.meta/generator/alpha_case.rb +0 -0
  65. data/tracks/ruby/test/fixtures/{xruby → ruby}/exercises/alpha/.meta/generator/test_template.erb +1 -1
  66. data/tracks/ruby/test/fixtures/{xruby → ruby}/exercises/alpha/.meta/solutions/alpha.rb +0 -0
  67. data/tracks/ruby/test/fixtures/{xruby → ruby}/exercises/beta/.meta/.version +0 -0
  68. data/tracks/ruby/test/fixtures/{xruby → ruby}/exercises/beta/.meta/generator/beta_case.rb +0 -0
  69. data/tracks/ruby/test/fixtures/{xruby → ruby}/lib/generator/test_template.erb +1 -1
  70. data/tracks/ruby/test/generator/files/track_files_test.rb +4 -4
  71. data/tracks/ruby/test/generator/implementation_test.rb +1 -1
  72. data/tracks/ruby/test/generator/template_values_test.rb +1 -1
  73. data/tracks/scala/exercises/rail-fence-cipher/src/main/scala/{RailFenceCipher.scala → .keep} +0 -0
  74. data/tracks/scala/exercises/rail-fence-cipher/src/test/scala/RailFenceCipherTest.scala +16 -23
  75. data/tracks/scala/exercises/say/src/test/scala/SayTest.scala +20 -33
  76. data/tracks/scala/testgen/src/main/scala/RailFenceCipherTestGenerator.scala +9 -53
  77. data/tracks/scala/testgen/src/main/scala/SayTestGenerator.scala +50 -0
  78. data/tracks/sml/bin/generate +1 -1
  79. data/tracks/sml/config.json +30 -0
  80. data/tracks/sml/exercises/all-your-base/README.md +61 -0
  81. data/tracks/sml/exercises/all-your-base/all-your-base.sml +2 -0
  82. data/tracks/sml/exercises/all-your-base/example.sml +36 -0
  83. data/tracks/sml/exercises/all-your-base/test.sml +75 -0
  84. data/tracks/sml/exercises/all-your-base/testlib.sml +159 -0
  85. data/tracks/sml/exercises/difference-of-squares/example.sml +3 -6
  86. data/tracks/sml/exercises/list-ops/README.md +40 -0
  87. data/tracks/sml/exercises/list-ops/example.sml +34 -0
  88. data/tracks/sml/exercises/list-ops/list-ops.sml +23 -0
  89. data/tracks/sml/exercises/list-ops/test.sml +85 -0
  90. data/tracks/sml/exercises/list-ops/testlib.sml +159 -0
  91. data/tracks/sml/exercises/prime-factors/README.md +66 -0
  92. data/tracks/sml/exercises/prime-factors/example.sml +15 -0
  93. data/tracks/sml/exercises/prime-factors/prime-factors.sml +2 -0
  94. data/tracks/sml/exercises/prime-factors/test.sml +35 -0
  95. data/tracks/sml/exercises/prime-factors/testlib.sml +159 -0
  96. metadata +34 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ffca3efc88204131068d7531852c74f211110f51
4
- data.tar.gz: b432f11924ff28ccfdedfdbd58c295fbe1a3798d
3
+ metadata.gz: 367591a6094ff5b99ca5e68c25c66c4bd9957422
4
+ data.tar.gz: 1e11ccffaaab2c1ed3b7410e8f78309b7ebc0322
5
5
  SHA512:
6
- metadata.gz: d6325615d58891ae4a2f7ce058c9cb936cffc101fd871d2990ab904ce38e6125b477fdbd095c060973a5c13f1e8fcb4dc35d743427a70c6218f34adfcda4d4d2
7
- data.tar.gz: 68dfb3831457408fd456c85d9c9bd089b5efa537e66592d75d07da9082c2c4893c7ed6b3dc1685a9107687a88a92de9d4cd4824081069af1bfb0c338a7d400b1
6
+ metadata.gz: c82d19de37b8ee2ad616cf379b5924ece5bbd469dd41077f2f554232b94cf790985b4e0c1b86447d569845b31e2a2a0f600673d2f42002bc5ed3666a1ecd65e7
7
+ data.tar.gz: 21de0a4f8941b8f587574c29907ad4b00938af67bab5fc341854907cca96c6ed0c0e49ee06ea43f3b1c3b76f3eac05db265a86a0a411590e6a26bde74483e6e3
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.2.1.19"
2
+ VERSION = "2.2.1.20"
3
3
  end
@@ -120,6 +120,17 @@
120
120
  "control_flow_conditionals"
121
121
  ]
122
122
  },
123
+ {
124
+ "uuid": "51bd6542-408b-4a73-8343-1c4d50db5315",
125
+ "slug": "word-count",
126
+ "core": false,
127
+ "unlocked_by": "pangram",
128
+ "difficulty": 2,
129
+ "topics": [
130
+ "control_flow_loops",
131
+ "string_comparison"
132
+ ]
133
+ },
123
134
  {
124
135
  "uuid": "9f9a1a49-472f-4a39-aa28-6aa17eeebdc7",
125
136
  "slug": "phone-number",
@@ -0,0 +1,5 @@
1
+ Although most users think of the shell as an interactive command interpreter, it is really a programming language in which each statement runs a command. Because it must satisfy both the interactive and programming aspects of command execution, it is a strange language, shaped as much by history as by design. —- Brian Kernighan & Rob Pike
2
+
3
+
4
+ cite: Kernighan, Brian W.; Pike, Rob (1984). The UNIX Programming Environment. Englewood Cliffs: Prentice-Hall. ISBN 0-13-937699-2.
5
+
@@ -0,0 +1,24 @@
1
+ # Word Count
2
+
3
+ Given a phrase, count the occurrences of each word in that phrase.
4
+
5
+ For example for the input `"olly olly in come free"`
6
+
7
+ ```plain
8
+ olly: 2
9
+ in: 1
10
+ come: 1
11
+ free: 1
12
+ ```
13
+
14
+
15
+ Run the tests with:
16
+
17
+ bats whatever_test.sh
18
+
19
+ ## Source
20
+
21
+ This is a classic toy problem, but we were reminded of it by seeing it in the Go Tour.
22
+
23
+ ## Submitting Incomplete Solutions
24
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,12 @@
1
+ {
2
+ for (field_index = 1; field_index <= NF; field_index++)
3
+ {
4
+ result[$field_index]++;
5
+ }
6
+ }
7
+ END {
8
+ for (field_index in result)
9
+ {
10
+ printf "%s: %d\n", field_index, result[field_index];
11
+ }
12
+ }
@@ -0,0 +1,21 @@
1
+ #!/bin/bash
2
+
3
+ input="$1";
4
+
5
+ if [ ! -n "${input}" ]
6
+ then
7
+ echo "Usage: $0 <input>"
8
+ exit;
9
+ fi
10
+
11
+ awk_progfile="${0%sh}awk";
12
+
13
+ if [ ! -f "${awk_progfile}" ]
14
+ then
15
+ echo "Awk program file not found."
16
+ exit 1;
17
+ fi
18
+
19
+ echo "$input" | tr '[:upper:]' '[:lower:]' | tr '.,:&@$%^!' ' ' | awk -f "${awk_progfile}";
20
+
21
+ exit $?;
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env bats
2
+
3
+ @test "count one word" {
4
+ run ./word_count.sh "word"
5
+
6
+ [ "$status" -eq 0 ]
7
+ echo $output | grep "word: 1"
8
+ echo $output | wc -w | grep "2"
9
+ }
10
+
11
+ @test "count one of each word" {
12
+ run ./word_count.sh "one of each"
13
+
14
+ [ "$status" -eq 0 ]
15
+ echo $output | grep "of: 1"
16
+ echo $output | grep "each: 1"
17
+ echo $output | grep "one: 1"
18
+ echo $output | wc -w | grep "6"
19
+ }
20
+
21
+ @test "multiple occurrences of a word" {
22
+ run ./word_count.sh "one fish two fish red fish blue fish"
23
+
24
+ [ "$status" -eq 0 ]
25
+ echo $output | grep "fish: 4"
26
+ echo $output | grep "red: 1"
27
+ echo $output | grep "one: 1"
28
+ echo $output | grep "two: 1"
29
+ echo $output | grep "blue: 1"
30
+ echo $output | wc -w | grep "10"
31
+ }
32
+
33
+ @test "handle cramped lists" {
34
+ run ./word_count.sh "one,two,three"
35
+
36
+ [ "$status" -eq 0 ]
37
+ echo $output | grep "one: 1"
38
+ echo $output | grep "two: 1"
39
+ echo $output | grep "three: 1"
40
+ echo $output | wc -w | grep "6"
41
+ }
42
+
43
+ @test "ignore punctuation" {
44
+ run ./word_count.sh "car: carpet as java: javascript!!&@$%^&"
45
+
46
+ [ "$status" -eq 0 ]
47
+ echo $output | grep "car: 1"
48
+ echo $output | grep "carpet: 1"
49
+ echo $output | grep "as: 1"
50
+ echo $output | grep "java: 1"
51
+ echo $output | grep "javascript: 1"
52
+ echo $output | wc -w | grep "10"
53
+ }
54
+
55
+ @test "include numbers" {
56
+ run ./word_count.sh "testing, 1, 2 testing"
57
+
58
+ [ "$status" -eq 0 ]
59
+ echo $output | grep "testing: 2"
60
+ echo $output | grep "1: 1"
61
+ echo $output | grep "2: 1"
62
+ echo $output | wc -w | grep "6"
63
+ }
64
+
65
+ @test "normalize case" {
66
+ run ./word_count.sh "go Go GO Stop stop"
67
+
68
+ [ "$status" -eq 0 ]
69
+ echo $output | grep "go: 3"
70
+ echo $output | grep "stop: 2"
71
+ echo $output | wc -w | grep "4"
72
+ }
73
+
74
+ @test "handle apostrophes" {
75
+ run ./word_count.sh "First: don't laugh. Then: don't cry."
76
+
77
+ [ "$status" -eq 0 ]
78
+ echo $output | grep "first: 1"
79
+ echo $output | grep "don't: 2"
80
+ echo $output | grep "laugh: 1"
81
+ echo $output | grep "then: 1"
82
+ echo $output | grep "cry: 1"
83
+ echo $output | wc -w | grep "10"
84
+ }
@@ -1,15 +1,9 @@
1
1
  {
2
+ "docs_url": "https://github.com/exercism/docs/blob/master/maintaining-a-track/maintainer-configuration.md",
2
3
  "maintainers": [
3
4
  {
4
- "github_username": "markijbema",
5
- "show_on_website": false,
6
- "alumnus": false,
7
- "name": null,
8
- "bio": null,
9
- "link_text": null,
10
- "link_url": null,
11
- "avatar_url": null
5
+ "alumnus": true,
6
+ "github_username": "markijbema"
12
7
  }
13
- ],
14
- "docs_url": "https://github.com/exercism/docs/blob/master/maintaining-a-track/maintainer-configuration.md"
15
- }
8
+ ]
9
+ }
@@ -10,3 +10,6 @@ script:
10
10
  - ./bin/fetch-configlet
11
11
  - ./bin/configlet lint .
12
12
  - ./build.sh
13
+ cache:
14
+ directories:
15
+ - $HOME/.nuget/packages
@@ -15,7 +15,7 @@
15
15
  "show_on_website": true,
16
16
  "alumnus": false,
17
17
  "name": "Ryan Potts",
18
- "bio": "I have been using Delphi professionally since 1996, Delphi 1. At my day job I develop software used in the control of various types of test machines used by the auto industry. Exercism is my first real push into Open Source and I'm happy to have this opportunity to teach and share the virtures of Delphi with others.",
18
+ "bio": "I have been using Delphi professionally since 1996. At my day job I develop software used in the control of various types of test machines used by the auto industry. Exercism is my first real push into Open Source and I'm happy to have this opportunity to teach and share the virtures of Delphi with others.",
19
19
  "link_text": null,
20
20
  "link_url": null,
21
21
  "avatar_url": null
@@ -42,8 +42,8 @@
42
42
  "core": true,
43
43
  "difficulty": 1,
44
44
  "topics": [
45
- "Control flow (conditionals)",
46
- "Control flow (loops)",
45
+ "Control-flow (conditionals)",
46
+ "Control-flow (loops)",
47
47
  "Algorithms",
48
48
  "Mathematics",
49
49
  "Strings",
@@ -58,8 +58,8 @@
58
58
  "core": true,
59
59
  "difficulty": 2,
60
60
  "topics": [
61
- "Control flow (conditionals)",
62
- "Control flow (loops)",
61
+ "Control-flow (conditionals)",
62
+ "Control-flow (loops)",
63
63
  "Lists",
64
64
  "Strings",
65
65
  "Maps",
@@ -73,7 +73,7 @@
73
73
  "core": true,
74
74
  "difficulty": 2,
75
75
  "topics": [
76
- "Control flow (conditionals)",
76
+ "Control-flow (conditionals)",
77
77
  "Polymorfism",
78
78
  "Strings",
79
79
  "Unicode",
@@ -107,8 +107,8 @@
107
107
  "core": true,
108
108
  "difficulty": 4,
109
109
  "topics": [
110
- "Control flow (conditionals)",
111
- "Control flow (loops)",
110
+ "Control-flow (conditionals)",
111
+ "Control-flow (loops)",
112
112
  "Mathematics",
113
113
  "Integers",
114
114
  "Strings",
@@ -122,8 +122,8 @@
122
122
  "core": true,
123
123
  "difficulty": 4,
124
124
  "topics": [
125
- "Control flow (conditionals)",
126
- "Control flow (loops)",
125
+ "Control-flow (conditionals)",
126
+ "Control-flow (loops)",
127
127
  "Mathematics",
128
128
  "Algorithms",
129
129
  "Integers"
@@ -135,8 +135,8 @@
135
135
  "core": true,
136
136
  "difficulty": 4,
137
137
  "topics": [
138
- "Control flow (conditionals)",
139
- "Control flow (loops)",
138
+ "Control-flow (conditionals)",
139
+ "Control-flow (loops)",
140
140
  "Data structures",
141
141
  "Arrays",
142
142
  "Matrices",
@@ -149,8 +149,8 @@
149
149
  "core": true,
150
150
  "difficulty": 5,
151
151
  "topics": [
152
- "Control flow (conditionals)",
153
- "Control flow (loops)",
152
+ "Control-flow (conditionals)",
153
+ "Control-flow (loops)",
154
154
  "Algorithms",
155
155
  "Data structures",
156
156
  "Arrays",
@@ -164,8 +164,8 @@
164
164
  "core": true,
165
165
  "difficulty": 5,
166
166
  "topics": [
167
- "Control flow (conditionals)",
168
- "Control flow (loops)",
167
+ "Control-flow (conditionals)",
168
+ "Control-flow (loops)",
169
169
  "Mathematics",
170
170
  "Strings",
171
171
  "Text formatting"
@@ -177,8 +177,8 @@
177
177
  "core": true,
178
178
  "difficulty": 6,
179
179
  "topics": [
180
- "Control flow (conditionals)",
181
- "Control flow (loops)",
180
+ "Control-flow (conditionals)",
181
+ "Control-flow (loops)",
182
182
  "Algorithms",
183
183
  "Games",
184
184
  "Bitwise operations",
@@ -202,7 +202,7 @@
202
202
  "core": true,
203
203
  "difficulty": 6,
204
204
  "topics": [
205
- "Control flow (conditionals)",
205
+ "Control-flow (conditionals)",
206
206
  "Exception handling",
207
207
  "Sets",
208
208
  "Randomness",
@@ -215,8 +215,8 @@
215
215
  "core": true,
216
216
  "difficulty": 7,
217
217
  "topics": [
218
- "Control flow (conditionals)",
219
- "Control flow (loops)",
218
+ "Control-flow (conditionals)",
219
+ "Control-flow (loops)",
220
220
  "Regular expressions",
221
221
  "Exception handling",
222
222
  "Strings",
@@ -230,7 +230,7 @@
230
230
  "core": true,
231
231
  "difficulty": 8,
232
232
  "topics": [
233
- "Control flow (loops)",
233
+ "Control-flow (loops)",
234
234
  "Data structures",
235
235
  "Lists",
236
236
  "Recursion"
@@ -267,8 +267,8 @@
267
267
  "unlocked_by": "bob",
268
268
  "difficulty": 5,
269
269
  "topics": [
270
- "Control flow (conditionals)",
271
- "Control flow (loops)",
270
+ "Control-flow (conditionals)",
271
+ "Control-flow (loops)",
272
272
  "Strings"
273
273
  ]
274
274
  },
@@ -311,7 +311,7 @@
311
311
  "unlocked_by": "rna-transcription",
312
312
  "difficulty": 2,
313
313
  "topics": [
314
- "Control flow (loops)",
314
+ "Control-flow (loops)",
315
315
  "Transforming",
316
316
  "Maps",
317
317
  "Integers"
@@ -335,7 +335,7 @@
335
335
  "unlocked_by": "space-age",
336
336
  "difficulty": 5,
337
337
  "topics": [
338
- "Control flow (loops)",
338
+ "Control-flow (loops)",
339
339
  "Integers",
340
340
  "Mathematics"
341
341
  ]
@@ -347,8 +347,8 @@
347
347
  "unlocked_by": "leap",
348
348
  "difficulty": 3,
349
349
  "topics": [
350
- "Control flow (loops)",
351
- "Control flow (conditionals)",
350
+ "Control-flow (loops)",
351
+ "Control-flow (conditionals)",
352
352
  "Exception handling",
353
353
  "Integers",
354
354
  "Mathematics"
@@ -373,8 +373,8 @@
373
373
  "unlocked_by": "space-age",
374
374
  "difficulty": 3,
375
375
  "topics": [
376
- "Control flow (conditionals)",
377
- "Control flow (loops)",
376
+ "Control-flow (conditionals)",
377
+ "Control-flow (loops)",
378
378
  "Arrays",
379
379
  "Integers",
380
380
  "Mathematics"
@@ -387,7 +387,7 @@
387
387
  "unlocked_by": "pangram",
388
388
  "difficulty": 1,
389
389
  "topics": [
390
- "Control flow (loops)",
390
+ "Control-flow (loops)",
391
391
  "Lists",
392
392
  "Strings",
393
393
  "Unicode",
@@ -401,7 +401,7 @@
401
401
  "unlocked_by": null,
402
402
  "difficulty": 2,
403
403
  "topics": [
404
- "Control flow (conditionals)",
404
+ "Control-flow (conditionals)",
405
405
  "Exception handling",
406
406
  "Parsing",
407
407
  "Text formatting",
@@ -418,7 +418,7 @@
418
418
  "difficulty": 2,
419
419
  "topics": [
420
420
  "Strings",
421
- "Control flow (loops)",
421
+ "Control-flow (loops)",
422
422
  "Regular expressions",
423
423
  "Transforming"
424
424
  ]
@@ -430,8 +430,8 @@
430
430
  "unlocked_by": "rna-transcription",
431
431
  "difficulty": 5,
432
432
  "topics": [
433
- "Control flow (conditionals)",
434
- "Control flow (loops)",
433
+ "Control-flow (conditionals)",
434
+ "Control-flow (loops)",
435
435
  "Maps",
436
436
  "Strings"
437
437
  ]
@@ -443,8 +443,8 @@
443
443
  "unlocked_by": null,
444
444
  "difficulty": 3,
445
445
  "topics": [
446
- "Control flow (conditionals)",
447
- "Control flow (loops)",
446
+ "Control-flow (conditionals)",
447
+ "Control-flow (loops)",
448
448
  "Mathematics",
449
449
  "Pattern recognition",
450
450
  "Transforming"
@@ -457,8 +457,8 @@
457
457
  "unlocked_by": "linked-list",
458
458
  "difficulty": 8,
459
459
  "topics": [
460
- "Control flow (conditionals)",
461
- "Control flow (loops)",
460
+ "Control-flow (conditionals)",
461
+ "Control-flow (loops)",
462
462
  "Data structures",
463
463
  "Lists",
464
464
  "Arrays",
@@ -472,7 +472,7 @@
472
472
  "unlocked_by": "rna-transcription",
473
473
  "difficulty": 2,
474
474
  "topics": [
475
- "Control flow (conditionals)",
475
+ "Control-flow (conditionals)",
476
476
  "Strings",
477
477
  "Integers",
478
478
  "Transforming"
@@ -485,8 +485,8 @@
485
485
  "unlocked_by": "rna-transcription",
486
486
  "difficulty": 6,
487
487
  "topics": [
488
- "Control flow (conditionals)",
489
- "Control flow (loops)",
488
+ "Control-flow (conditionals)",
489
+ "Control-flow (loops)",
490
490
  "Bitwise operations",
491
491
  "Arrays"
492
492
  ]
@@ -498,8 +498,8 @@
498
498
  "unlocked_by": "list-ops",
499
499
  "difficulty": 4,
500
500
  "topics": [
501
- "Control flow (conditionals)",
502
- "Control flow (loops)",
501
+ "Control-flow (conditionals)",
502
+ "Control-flow (loops)",
503
503
  "Algorithms",
504
504
  "Lists",
505
505
  "Arrays",
@@ -514,8 +514,8 @@
514
514
  "unlocked_by": "simple-cipher",
515
515
  "difficulty": 7,
516
516
  "topics": [
517
- "Control flow (conditionals)",
518
- "Control flow (loops)",
517
+ "Control-flow (conditionals)",
518
+ "Control-flow (loops)",
519
519
  "Algorithms",
520
520
  "Arrays",
521
521
  "Regular expressions",
@@ -529,7 +529,7 @@
529
529
  "unlocked_by": "list-ops",
530
530
  "difficulty": 5,
531
531
  "topics": [
532
- "Control flow (loops)",
532
+ "Control-flow (loops)",
533
533
  "Algorithms",
534
534
  "Lists",
535
535
  "Callbacks"
@@ -542,8 +542,8 @@
542
542
  "unlocked_by": "atbash-cipher",
543
543
  "difficulty": 9,
544
544
  "topics": [
545
- "Control flow (conditionals)",
546
- "Control flow (loops)",
545
+ "Control-flow (conditionals)",
546
+ "Control-flow (loops)",
547
547
  "Algorithms",
548
548
  "Arrays",
549
549
  "Sorting",
@@ -559,8 +559,8 @@
559
559
  "unlocked_by": "binary",
560
560
  "difficulty": 4,
561
561
  "topics": [
562
- "Control flow (conditionals)",
563
- "Control flow (loops)",
562
+ "Control-flow (conditionals)",
563
+ "Control-flow (loops)",
564
564
  "Mathematics",
565
565
  "Integers",
566
566
  "Strings",
@@ -574,8 +574,8 @@
574
574
  "unlocked_by": "prime-factors",
575
575
  "difficulty": 5,
576
576
  "topics": [
577
- "Control flow (conditionals)",
578
- "Control flow (loops)",
577
+ "Control-flow (conditionals)",
578
+ "Control-flow (loops)",
579
579
  "Mathematics",
580
580
  "Integers",
581
581
  "Recursion"
@@ -588,8 +588,8 @@
588
588
  "unlocked_by": "binary",
589
589
  "difficulty": 4,
590
590
  "topics": [
591
- "Control flow (conditionals)",
592
- "Control flow (loops)",
591
+ "Control-flow (conditionals)",
592
+ "Control-flow (loops)",
593
593
  "Mathematics",
594
594
  "Integers",
595
595
  "Strings",
@@ -603,8 +603,8 @@
603
603
  "unlocked_by": "space-age",
604
604
  "difficulty": 4,
605
605
  "topics": [
606
- "Control flow (conditionals)",
607
- "Control flow (loops)",
606
+ "Control-flow (conditionals)",
607
+ "Control-flow (loops)",
608
608
  "Mathematics",
609
609
  "Integers",
610
610
  "Strings"
@@ -617,8 +617,8 @@
617
617
  "unlocked_by": "bob",
618
618
  "difficulty": 4,
619
619
  "topics": [
620
- "Control flow (conditionals)",
621
- "Control flow (loops)",
620
+ "Control-flow (conditionals)",
621
+ "Control-flow (loops)",
622
622
  "Strings",
623
623
  "Games",
624
624
  "Regular expressions",
@@ -632,8 +632,8 @@
632
632
  "unlocked_by": "space-age",
633
633
  "difficulty": 5,
634
634
  "topics": [
635
- "Control flow (conditionals)",
636
- "Control flow (loops)",
635
+ "Control-flow (conditionals)",
636
+ "Control-flow (loops)",
637
637
  "Algorithms",
638
638
  "Mathematics",
639
639
  "Integers"
@@ -646,7 +646,7 @@
646
646
  "unlocked_by": "pangram",
647
647
  "difficulty": 3,
648
648
  "topics": [
649
- "Control flow (loops)",
649
+ "Control-flow (loops)",
650
650
  "Exception handling",
651
651
  "Strings",
652
652
  "Text formatting"
@@ -659,7 +659,7 @@
659
659
  "unlocked_by": "space-age",
660
660
  "difficulty": 3,
661
661
  "topics": [
662
- "Control flow (loops)",
662
+ "Control-flow (loops)",
663
663
  "Algorithms",
664
664
  "Mathematics",
665
665
  "Integers"
@@ -672,8 +672,8 @@
672
672
  "unlocked_by": "bob",
673
673
  "difficulty": 4,
674
674
  "topics": [
675
- "Control flow (conditionals)",
676
- "Control flow (loops)",
675
+ "Control-flow (conditionals)",
676
+ "Control-flow (loops)",
677
677
  "Arrays",
678
678
  "Strings",
679
679
  "Text formatting",
@@ -698,8 +698,8 @@
698
698
  "unlocked_by": "binary",
699
699
  "difficulty": 4,
700
700
  "topics": [
701
- "Control flow (conditionals)",
702
- "Control flow (loops)",
701
+ "Control-flow (conditionals)",
702
+ "Control-flow (loops)",
703
703
  "Mathematics",
704
704
  "Integers",
705
705
  "Strings",
@@ -713,8 +713,8 @@
713
713
  "unlocked_by": "pangram",
714
714
  "difficulty": 7,
715
715
  "topics": [
716
- "Control flow (conditionals)",
717
- "Control flow (loops)",
716
+ "Control-flow (conditionals)",
717
+ "Control-flow (loops)",
718
718
  "Mathematics",
719
719
  "Integers",
720
720
  "Strings",
@@ -729,8 +729,8 @@
729
729
  "unlocked_by": "wordy",
730
730
  "difficulty": 7,
731
731
  "topics": [
732
- "Control flow (conditionals)",
733
- "Control flow (loops)",
732
+ "Control-flow (conditionals)",
733
+ "Control-flow (loops)",
734
734
  "Strings",
735
735
  "Arrays",
736
736
  "Text formatting"
@@ -743,8 +743,8 @@
743
743
  "unlocked_by": "linked-list",
744
744
  "difficulty": 7,
745
745
  "topics": [
746
- "Control flow (conditionals)",
747
- "Control flow (loops)",
746
+ "Control-flow (conditionals)",
747
+ "Control-flow (loops)",
748
748
  "Recursion",
749
749
  "Arrays",
750
750
  "Algorithms"
@@ -757,8 +757,8 @@
757
757
  "unlocked_by": "binary-search",
758
758
  "difficulty": 6,
759
759
  "topics": [
760
- "Control flow (conditionals)",
761
- "Control flow (loops)",
760
+ "Control-flow (conditionals)",
761
+ "Control-flow (loops)",
762
762
  "Recursion",
763
763
  "Algorithms"
764
764
  ]
@@ -770,8 +770,8 @@
770
770
  "unlocked_by": "wordy",
771
771
  "difficulty": 5,
772
772
  "topics": [
773
- "Control flow (conditionals)",
774
- "Control flow (loops)",
773
+ "Control-flow (conditionals)",
774
+ "Control-flow (loops)",
775
775
  "Exception handling",
776
776
  "Strings",
777
777
  "Games",
@@ -785,8 +785,8 @@
785
785
  "unlocked_by": "prime-factors",
786
786
  "difficulty": 5,
787
787
  "topics": [
788
- "Control flow (conditionals)",
789
- "Control flow (loops)",
788
+ "Control-flow (conditionals)",
789
+ "Control-flow (loops)",
790
790
  "Exception handling",
791
791
  "Algorithms",
792
792
  "Mathematics",
@@ -800,8 +800,8 @@
800
800
  "unlocked_by": "prime-factors",
801
801
  "difficulty": 7,
802
802
  "topics": [
803
- "Control flow (conditionals)",
804
- "Control flow (loops)",
803
+ "Control-flow (conditionals)",
804
+ "Control-flow (loops)",
805
805
  "Exception handling",
806
806
  "Algorithms",
807
807
  "Mathematics",
@@ -815,8 +815,8 @@
815
815
  "unlocked_by": "bob",
816
816
  "difficulty": 6,
817
817
  "topics": [
818
- "Control flow (conditionals)",
819
- "Control flow (loops)",
818
+ "Control-flow (conditionals)",
819
+ "Control-flow (loops)",
820
820
  "Mathematics",
821
821
  "Integers",
822
822
  "Exception handling",
@@ -831,8 +831,8 @@
831
831
  "unlocked_by": "linked-list",
832
832
  "difficulty": 6,
833
833
  "topics": [
834
- "Control flow (conditionals)",
835
- "Control flow (loops)",
834
+ "Control-flow (conditionals)",
835
+ "Control-flow (loops)",
836
836
  "Data structures",
837
837
  "Arrays",
838
838
  "Lists",
@@ -848,8 +848,8 @@
848
848
  "unlocked_by": "prime-factors",
849
849
  "difficulty": 5,
850
850
  "topics": [
851
- "Control flow (conditionals)",
852
- "Control flow (loops)",
851
+ "Control-flow (conditionals)",
852
+ "Control-flow (loops)",
853
853
  "Lists",
854
854
  "Integers"
855
855
  ]
@@ -861,8 +861,8 @@
861
861
  "unlocked_by": null,
862
862
  "difficulty": 8,
863
863
  "topics": [
864
- "Control flow (conditionals)",
865
- "Control flow (loops)",
864
+ "Control-flow (conditionals)",
865
+ "Control-flow (loops)",
866
866
  "Optional values",
867
867
  "Exception handling",
868
868
  "Equality",
@@ -877,8 +877,8 @@
877
877
  "unlocked_by": "matrix",
878
878
  "difficulty": 6,
879
879
  "topics": [
880
- "Control flow (conditionals)",
881
- "Control flow (loops)",
880
+ "Control-flow (conditionals)",
881
+ "Control-flow (loops)",
882
882
  "Optional values",
883
883
  "Exception handling",
884
884
  "Equality",
@@ -895,8 +895,8 @@
895
895
  "unlocked_by": "matrix",
896
896
  "difficulty": 5,
897
897
  "topics": [
898
- "Control flow (conditionals)",
899
- "Control flow (loops)",
898
+ "Control-flow (conditionals)",
899
+ "Control-flow (loops)",
900
900
  "Exception handling",
901
901
  "Equality",
902
902
  "Parsing",
@@ -911,8 +911,8 @@
911
911
  "unlocked_by": "gigasecond",
912
912
  "difficulty": 7,
913
913
  "topics": [
914
- "Control flow (conditionals)",
915
- "Control flow (loops)",
914
+ "Control-flow (conditionals)",
915
+ "Control-flow (loops)",
916
916
  "Exception handling",
917
917
  "Equality",
918
918
  "Time",
@@ -926,8 +926,8 @@
926
926
  "unlocked_by": "pangram",
927
927
  "difficulty": 3,
928
928
  "topics": [
929
- "Control flow (conditionals)",
930
- "Control flow (loops)",
929
+ "Control-flow (conditionals)",
930
+ "Control-flow (loops)",
931
931
  "Strings",
932
932
  "Parsing",
933
933
  "Exception handling"
@@ -940,8 +940,8 @@
940
940
  "unlocked_by": "grade-school",
941
941
  "difficulty": 6,
942
942
  "topics": [
943
- "Control flow (conditionals)",
944
- "Control flow (loops)",
943
+ "Control-flow (conditionals)",
944
+ "Control-flow (loops)",
945
945
  "Arrays",
946
946
  "Parsing",
947
947
  "Algorithms",
@@ -956,8 +956,8 @@
956
956
  "unlocked_by": "pascals-triangle",
957
957
  "difficulty": 5,
958
958
  "topics": [
959
- "Control flow (conditionals)",
960
- "Control flow (loops)",
959
+ "Control-flow (conditionals)",
960
+ "Control-flow (loops)",
961
961
  "Arrays",
962
962
  "Parsing",
963
963
  "Games",
@@ -972,8 +972,8 @@
972
972
  "unlocked_by": "binary",
973
973
  "difficulty": 5,
974
974
  "topics": [
975
- "Control flow (conditionals)",
976
- "Control flow (loops)",
975
+ "Control-flow (conditionals)",
976
+ "Control-flow (loops)",
977
977
  "Exception handling",
978
978
  "Parsing",
979
979
  "Mathematics",
@@ -1010,8 +1010,8 @@
1010
1010
  "unlocked_by": "grade-school",
1011
1011
  "difficulty": 7,
1012
1012
  "topics": [
1013
- "Control flow (loops)",
1014
- "Control flow (conditionals)",
1013
+ "Control-flow (loops)",
1014
+ "Control-flow (conditionals)",
1015
1015
  "Games",
1016
1016
  "Parsing",
1017
1017
  "Arrays",
@@ -1025,8 +1025,8 @@
1025
1025
  "unlocked_by": "simple-cipher",
1026
1026
  "difficulty": 3,
1027
1027
  "topics": [
1028
- "Control flow (conditionals)",
1029
- "Control flow (loops)",
1028
+ "Control-flow (conditionals)",
1029
+ "Control-flow (loops)",
1030
1030
  "Algorithms",
1031
1031
  "Arrays",
1032
1032
  "Exception handling"
@@ -1039,8 +1039,8 @@
1039
1039
  "unlocked_by": "bob",
1040
1040
  "difficulty": 4,
1041
1041
  "topics": [
1042
- "Control flow (conditionals)",
1043
- "Control flow (loops)",
1042
+ "Control-flow (conditionals)",
1043
+ "Control-flow (loops)",
1044
1044
  "Polymorfism",
1045
1045
  "Strings",
1046
1046
  "Pattern recognition",