trackler 2.2.1.49 → 2.2.1.50

Sign up to get free protection for your applications and to get access to all the features.
Files changed (170) hide show
  1. checksums.yaml +4 -4
  2. data/bin/verify-configs +1 -1
  3. data/lib/trackler/version.rb +1 -1
  4. data/problem-specifications/exercises/kindergarten-garden/canonical-data.json +0 -37
  5. data/tracks/c/exercises/allergies/test/test_allergies.c +41 -41
  6. data/tracks/common-lisp/config.json +266 -252
  7. data/tracks/common-lisp/config/maintainers.json +23 -23
  8. data/tracks/common-lisp/exercises/allergies/README.md +0 -1
  9. data/tracks/common-lisp/exercises/atbash-cipher/README.md +2 -1
  10. data/tracks/common-lisp/exercises/beer-song/README.md +1 -1
  11. data/tracks/common-lisp/exercises/binary/README.md +2 -0
  12. data/tracks/common-lisp/exercises/collatz-conjecture/README.md +4 -8
  13. data/tracks/common-lisp/exercises/crypto-square/README.md +4 -4
  14. data/tracks/common-lisp/exercises/etl/README.md +2 -0
  15. data/tracks/common-lisp/exercises/grade-school/README.md +0 -1
  16. data/tracks/common-lisp/exercises/grains/README.md +0 -1
  17. data/tracks/common-lisp/exercises/leap/README.md +1 -1
  18. data/tracks/common-lisp/exercises/meetup/README.md +1 -2
  19. data/tracks/common-lisp/exercises/nucleotide-count/README.md +8 -22
  20. data/tracks/common-lisp/exercises/pascals-triangle/README.md +1 -1
  21. data/tracks/common-lisp/exercises/perfect-numbers/README.md +3 -4
  22. data/tracks/common-lisp/exercises/phone-number/README.md +3 -2
  23. data/tracks/common-lisp/exercises/roman-numerals/README.md +1 -1
  24. data/tracks/common-lisp/exercises/scrabble-score/README.md +3 -1
  25. data/tracks/common-lisp/exercises/space-age/README.md +2 -1
  26. data/tracks/common-lisp/exercises/sublist/README.md +65 -0
  27. data/tracks/common-lisp/exercises/sublist/example.lisp +24 -0
  28. data/tracks/common-lisp/exercises/sublist/sublist-test.lisp +87 -0
  29. data/tracks/common-lisp/exercises/sublist/sublist.lisp +8 -0
  30. data/tracks/common-lisp/exercises/triangle/README.md +9 -6
  31. data/tracks/common-lisp/exercises/trinary/README.md +1 -1
  32. data/tracks/common-lisp/exercises/word-count/README.md +1 -2
  33. data/tracks/ecmascript/config.json +30 -0
  34. data/tracks/ecmascript/exercises/bowling/README.md +80 -0
  35. data/tracks/ecmascript/exercises/bowling/bowling.spec.js +159 -0
  36. data/tracks/ecmascript/exercises/bowling/example.js +67 -0
  37. data/tracks/ecmascript/exercises/bowling/package.json +71 -0
  38. data/tracks/ecmascript/exercises/two-fer/README.md +47 -0
  39. data/tracks/ecmascript/exercises/two-fer/example.js +4 -0
  40. data/tracks/ecmascript/exercises/two-fer/package.json +69 -0
  41. data/tracks/ecmascript/exercises/two-fer/two-fer.spec.js +18 -0
  42. data/tracks/fsharp/exercises/pascals-triangle/Example.fs +12 -8
  43. data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangle.fs +2 -2
  44. data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangleTest.fs +15 -12
  45. data/tracks/fsharp/generators/Generators.fs +19 -0
  46. data/tracks/fsharp/generators/Templates/_AssertThrows.liquid +1 -0
  47. data/tracks/java/docs/ABOUT.md +13 -31
  48. data/tracks/java/exercises/bracket-push/.meta/version +1 -1
  49. data/tracks/java/exercises/bracket-push/src/test/java/BracketCheckerTest.java +7 -1
  50. data/tracks/java/exercises/collatz-conjecture/.meta/version +1 -1
  51. data/tracks/java/exercises/etl/README.md +1 -1
  52. data/tracks/java/exercises/ocr-numbers/README.md +1 -1
  53. data/tracks/java/exercises/pascals-triangle/README.md +1 -1
  54. data/tracks/java/exercises/perfect-numbers/.meta/version +1 -1
  55. data/tracks/java/exercises/rna-transcription/README.md +1 -1
  56. data/tracks/java/exercises/secret-handshake/.meta/version +1 -1
  57. data/tracks/java/exercises/secret-handshake/src/test/java/HandshakeCalculatorTest.java +1 -9
  58. data/tracks/java/scripts/canonical_data_check.sh +104 -0
  59. data/tracks/javascript/exercises/twelve-days/example.js +23 -25
  60. data/tracks/julia/.travis.yml +1 -0
  61. data/tracks/kotlin/exercises/all-your-base/.meta/version +1 -0
  62. data/tracks/kotlin/exercises/all-your-base/src/test/kotlin/BaseConverterTest.kt +0 -3
  63. data/tracks/kotlin/exercises/change/.meta/version +1 -0
  64. data/tracks/kotlin/exercises/change/src/test/kotlin/ChangeCalculatorTest.kt +0 -3
  65. data/tracks/kotlin/exercises/clock/.meta/version +1 -0
  66. data/tracks/kotlin/exercises/clock/src/test/kotlin/ClockAddTest.kt +1 -4
  67. data/tracks/kotlin/exercises/clock/src/test/kotlin/ClockCreationTest.kt +1 -4
  68. data/tracks/kotlin/exercises/clock/src/test/kotlin/ClockEqualTest.kt +1 -4
  69. data/tracks/kotlin/exercises/collatz-conjecture/.meta/version +1 -0
  70. data/tracks/kotlin/exercises/collatz-conjecture/src/test/kotlin/CollatzCalculatorTest.kt +0 -3
  71. data/tracks/kotlin/exercises/complex-numbers/.meta/version +1 -0
  72. data/tracks/kotlin/exercises/complex-numbers/src/test/kotlin/ComplexNumberTest.kt +0 -3
  73. data/tracks/kotlin/exercises/diamond/.meta/version +1 -0
  74. data/tracks/kotlin/exercises/diamond/src/test/kotlin/DiamondPrinterTest.kt +0 -3
  75. data/tracks/kotlin/exercises/etl/README.md +1 -1
  76. data/tracks/kotlin/exercises/forth/.meta/version +1 -0
  77. data/tracks/kotlin/exercises/forth/src/test/kotlin/ForthEvaluatorTest.kt +0 -3
  78. data/tracks/kotlin/exercises/grains/.meta/version +1 -0
  79. data/tracks/kotlin/exercises/grains/src/test/kotlin/BoardTest.kt +0 -3
  80. data/tracks/kotlin/exercises/hamming/.meta/version +1 -0
  81. data/tracks/kotlin/exercises/hamming/src/test/kotlin/HammingTest.kt +0 -3
  82. data/tracks/kotlin/exercises/list-ops/.meta/version +1 -0
  83. data/tracks/kotlin/exercises/list-ops/src/test/kotlin/ListExtensionsTest.kt +0 -3
  84. data/tracks/kotlin/exercises/meetup/.meta/version +1 -0
  85. data/tracks/kotlin/exercises/meetup/src/test/kotlin/MeetupTest.kt +0 -3
  86. data/tracks/kotlin/exercises/minesweeper/.meta/version +1 -0
  87. data/tracks/kotlin/exercises/minesweeper/src/test/kotlin/MinesweeperBoardTest.kt +0 -3
  88. data/tracks/kotlin/exercises/pangram/.meta/version +1 -0
  89. data/tracks/kotlin/exercises/pangram/src/test/kotlin/PangramTest.kt +0 -3
  90. data/tracks/kotlin/exercises/pascals-triangle/README.md +1 -1
  91. data/tracks/kotlin/exercises/prime-factors/.meta/version +1 -0
  92. data/tracks/kotlin/exercises/prime-factors/src/test/kotlin/PrimeFactorCalculatorTest.kt +0 -3
  93. data/tracks/kotlin/exercises/rna-transcription/.meta/version +1 -0
  94. data/tracks/kotlin/exercises/rna-transcription/README.md +1 -1
  95. data/tracks/kotlin/exercises/rna-transcription/src/test/kotlin/RnaTranscriptionTest.kt +0 -3
  96. data/tracks/kotlin/exercises/robot-simulator/.meta/version +1 -0
  97. data/tracks/kotlin/exercises/robot-simulator/src/test/kotlin/RobotTest.kt +0 -3
  98. data/tracks/kotlin/exercises/rotational-cipher/.meta/version +1 -0
  99. data/tracks/kotlin/exercises/rotational-cipher/src/test/kotlin/RotationalCipherTest.kt +0 -3
  100. data/tracks/kotlin/exercises/saddle-points/.meta/version +1 -0
  101. data/tracks/kotlin/exercises/saddle-points/src/test/kotlin/MatrixTest.kt +0 -3
  102. data/tracks/kotlin/exercises/say/.meta/version +1 -0
  103. data/tracks/kotlin/exercises/say/src/test/kotlin/NumberSpellerTest.kt +0 -3
  104. data/tracks/kotlin/exercises/secret-handshake/.meta/version +1 -0
  105. data/tracks/kotlin/exercises/secret-handshake/src/test/kotlin/HandshakeCalculatorTest.kt +0 -3
  106. data/tracks/kotlin/exercises/spiral-matrix/.meta/version +1 -0
  107. data/tracks/kotlin/exercises/spiral-matrix/src/test/kotlin/SpiralMatrixTest.kt +0 -3
  108. data/tracks/kotlin/exercises/sublist/.meta/version +1 -0
  109. data/tracks/kotlin/exercises/sublist/src/test/kotlin/SublistTest.kt +0 -3
  110. data/tracks/kotlin/scripts/canonical_data_check.sh +104 -0
  111. data/tracks/perl6/exercises/accumulate/accumulate.t +2 -3
  112. data/tracks/perl6/exercises/all-your-base/all-your-base.t +17 -18
  113. data/tracks/perl6/exercises/allergies/allergies.t +17 -18
  114. data/tracks/perl6/exercises/anagram/anagram.t +17 -18
  115. data/tracks/perl6/exercises/atbash-cipher/atbash-cipher.t +17 -18
  116. data/tracks/perl6/exercises/bob/bob.t +20 -22
  117. data/tracks/perl6/exercises/bob/example.yaml +1 -2
  118. data/tracks/perl6/exercises/clock/clock.t +17 -18
  119. data/tracks/perl6/exercises/flatten-array/flatten-array.t +17 -18
  120. data/tracks/perl6/exercises/grade-school/grade-school.t +2 -3
  121. data/tracks/perl6/exercises/grains/grains.t +17 -18
  122. data/tracks/perl6/exercises/hello-world/example.yaml +1 -2
  123. data/tracks/perl6/exercises/hello-world/hello-world.t +20 -22
  124. data/tracks/perl6/exercises/leap/leap.t +17 -18
  125. data/tracks/perl6/exercises/linked-list/linked-list.t +2 -3
  126. data/tracks/perl6/exercises/luhn/luhn.t +17 -18
  127. data/tracks/perl6/exercises/phone-number/phone-number.t +17 -18
  128. data/tracks/perl6/exercises/raindrops/raindrops.t +17 -18
  129. data/tracks/perl6/exercises/rna-transcription/rna-transcription.t +17 -18
  130. data/tracks/perl6/exercises/robot-name/robot-name.t +2 -3
  131. data/tracks/perl6/exercises/scrabble-score/scrabble-score.t +17 -18
  132. data/tracks/perl6/exercises/space-age/space-age.t +17 -18
  133. data/tracks/perl6/exercises/word-count/word-count.t +17 -18
  134. data/tracks/perl6/exercises/wordy/wordy.t +17 -18
  135. data/tracks/perl6/templates/test.mustache +9 -10
  136. data/tracks/purescript/config.json +11 -0
  137. data/tracks/purescript/exercises/rna-transcription/README.md +25 -0
  138. data/tracks/purescript/exercises/rna-transcription/bower.json +26 -0
  139. data/tracks/purescript/exercises/rna-transcription/examples/src/RNATranscription.purs +18 -0
  140. data/tracks/purescript/exercises/rna-transcription/src/RNATranscription.purs +3 -0
  141. data/tracks/purescript/exercises/rna-transcription/test/Main.purs +48 -0
  142. data/tracks/python/exercises/variable-length-quantity/example.py +6 -6
  143. data/tracks/python/exercises/variable-length-quantity/variable_length_quantity.py +2 -2
  144. data/tracks/ruby/config.json +6 -0
  145. data/tracks/ruby/exercises/complex-numbers/.meta/.version +1 -0
  146. data/tracks/ruby/exercises/complex-numbers/.meta/generator/complex_numbers_case.rb +44 -0
  147. data/tracks/ruby/exercises/complex-numbers/.meta/solutions/complex_numbers.rb +49 -0
  148. data/tracks/ruby/exercises/complex-numbers/README.md +64 -0
  149. data/tracks/ruby/exercises/complex-numbers/complex_numbers_test.rb +207 -0
  150. data/tracks/ruby/exercises/crypto-square/.meta/.version +1 -0
  151. data/tracks/ruby/exercises/crypto-square/.meta/generator/crypto_square_case.rb +19 -0
  152. data/tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb +20 -15
  153. data/tracks/ruby/exercises/crypto-square/README.md +10 -8
  154. data/tracks/ruby/exercises/crypto-square/crypto_square_test.rb +45 -81
  155. data/tracks/ruby/exercises/flatten-array/.meta/.version +1 -0
  156. data/tracks/ruby/exercises/flatten-array/.meta/generator/flatten_array_case.rb +11 -0
  157. data/tracks/ruby/exercises/flatten-array/.meta/solutions/flatten_array.rb +5 -2
  158. data/tracks/ruby/exercises/flatten-array/flatten_array_test.rb +32 -7
  159. data/tracks/ruby/exercises/hamming/hamming_test.rb +3 -3
  160. data/tracks/ruby/exercises/isogram/isogram_test.rb +4 -4
  161. data/tracks/ruby/exercises/leap/leap_test.rb +2 -2
  162. data/tracks/ruby/exercises/pig-latin/.meta/.version +1 -1
  163. data/tracks/ruby/exercises/pig-latin/.meta/solutions/pig_latin.rb +2 -2
  164. data/tracks/ruby/exercises/pig-latin/pig_latin_test.rb +17 -7
  165. data/tracks/ruby/exercises/queen-attack/.meta/generator/queen_attack_case.rb +1 -1
  166. data/tracks/ruby/exercises/queen-attack/queen_attack_test.rb +7 -7
  167. data/tracks/ruby/exercises/sum-of-multiples/.meta/.version +1 -1
  168. data/tracks/ruby/exercises/sum-of-multiples/.meta/solutions/sum_of_multiples.rb +1 -1
  169. data/tracks/ruby/exercises/sum-of-multiples/sum_of_multiples_test.rb +7 -2
  170. metadata +53 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b95e3d468624c932aadb731c5452482736b0b853
4
- data.tar.gz: 62aecd5db91cc9724ec7eb3e3d54b8c0da0feefb
3
+ metadata.gz: 285cce57fb4909cbdee24c58fec5b08c9e5bc97d
4
+ data.tar.gz: bdccff307e03fe678cc131690d77d3377a50d1bd
5
5
  SHA512:
6
- metadata.gz: 21ab8536da103bab29b789b96aec703b11d43e5e1a48d349354981d1480fac3346a380fd781419572d3b0e841028b97fef574b70c6b6916a47d88948d493f5f9
7
- data.tar.gz: 7f7092bec5a3e6ea91c72208fc74cc8efc503d4bcb3c6955f3dff578f06d6c064ba3873530831ed476f7da84b8c22ea97d426018a29043c0c5b448744e807af8
6
+ metadata.gz: c9585df79288c5f961127a49a4d02ebec3b7b2996662b4f0758ae9dc192fa1fb9c427e1781c660a75ab4a5ea32498f64eb9bbc2d1037458fcd26d9446ac3c4fd
7
+ data.tar.gz: e0ad10f90bcc849b5434c183a495557906a75e5d6b5163ec1ed21e5c78350e8605fc511d9c905a0f81ae3adf2931e014810903bdb24768d7b00d5f5b49856ce9
data/bin/verify-configs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  status = 0
4
4
  Dir.glob("tracks/*").each do |path|
5
- `bin/configlet #{path}`
5
+ `bin/configlet lint #{path}`
6
6
  unless $?.success?
7
7
  puts "ERROR: %s" % path
8
8
  status = $?.to_i
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.2.1.49"
2
+ VERSION = "2.2.1.50"
3
3
  end
@@ -82,43 +82,6 @@
82
82
  "expected": ["grass", "violets", "clover", "violets"]
83
83
  }
84
84
  ]
85
- },
86
- {
87
- "description": "non-alphabetical student list",
88
- "cases": [
89
- {
90
- "description": "first student's garden",
91
- "property": "plants",
92
- "students": ["Samantha", "Patricia", "Xander", "Roger"],
93
- "diagram": "VCRRGVRG\nRVGCCGCV",
94
- "student": "Patricia",
95
- "expected": ["violets", "clover", "radishes", "violets"]
96
- },
97
- {
98
- "description": "second student's garden",
99
- "property": "plants",
100
- "students": ["Samantha", "Patricia", "Xander", "Roger"],
101
- "diagram": "VCRRGVRG\nRVGCCGCV",
102
- "student": "Roger",
103
- "expected": ["radishes", "radishes", "grass", "clover"]
104
- },
105
- {
106
- "description": "third student's garden",
107
- "property": "plants",
108
- "students": ["Samantha", "Patricia", "Xander", "Roger"],
109
- "diagram": "VCRRGVRG\nRVGCCGCV",
110
- "student": "Samantha",
111
- "expected": ["grass", "violets", "clover", "grass"]
112
- },
113
- {
114
- "description": "fourth (last) student's garden",
115
- "property": "plants",
116
- "students": ["Samantha", "Patricia", "Xander", "Roger"],
117
- "diagram": "VCRRGVRG\nRVGCCGCV",
118
- "student": "Xander",
119
- "expected": ["radishes", "grass", "clover", "violets"]
120
- }
121
- ]
122
85
  }
123
86
  ]
124
87
  }
@@ -10,14 +10,14 @@ void tearDown(void)
10
10
  {
11
11
  }
12
12
 
13
- void test_list_count_is(int count, allergen_list_t * list)
13
+ //helper functions
14
+ void list_count_is(int count, allergen_list_t * list)
14
15
  {
15
16
  TEST_ASSERT_EQUAL(count, list->count);
16
17
  }
17
18
 
18
- void test_list_contains(allergen_t allergen, allergen_list_t * list)
19
+ void list_contains(allergen_t allergen, allergen_list_t * list)
19
20
  {
20
- TEST_IGNORE(); // delete this line to run test
21
21
  bool allergen_found = false;
22
22
 
23
23
  for (int i = 0; i < list->count; i++) {
@@ -30,9 +30,9 @@ void test_list_contains(allergen_t allergen, allergen_list_t * list)
30
30
  TEST_ASSERT_TRUE(allergen_found);
31
31
  }
32
32
 
33
+ //Tests start here
33
34
  void test_no_allergies_means_not_allergic(void)
34
35
  {
35
- TEST_IGNORE();
36
36
  int score = 0;
37
37
 
38
38
  TEST_ASSERT_FALSE(is_allergic_to(ALLERGEN_PEANUTS, score));
@@ -42,7 +42,7 @@ void test_no_allergies_means_not_allergic(void)
42
42
 
43
43
  void test_is_allergic_to_eggs(void)
44
44
  {
45
- TEST_IGNORE();
45
+ TEST_IGNORE(); // delete this line to run test
46
46
  int score = 1;
47
47
 
48
48
  TEST_ASSERT_TRUE(is_allergic_to(ALLERGEN_EGGS, score));
@@ -66,7 +66,7 @@ void test_no_allergies_at_all(void)
66
66
 
67
67
  get_allergens(score, &list);
68
68
 
69
- test_list_count_is(0, &list);
69
+ list_count_is(0, &list);
70
70
 
71
71
  free(list.allergens);
72
72
  }
@@ -79,8 +79,8 @@ void test_allergic_to_just_eggs(void)
79
79
 
80
80
  get_allergens(score, &list);
81
81
 
82
- test_list_count_is(1, &list);
83
- test_list_contains(ALLERGEN_EGGS, &list);
82
+ list_count_is(1, &list);
83
+ list_contains(ALLERGEN_EGGS, &list);
84
84
 
85
85
  free(list.allergens);
86
86
  }
@@ -93,8 +93,8 @@ void test_allergic_to_just_peanuts(void)
93
93
 
94
94
  get_allergens(score, &list);
95
95
 
96
- test_list_count_is(1, &list);
97
- test_list_contains(ALLERGEN_PEANUTS, &list);
96
+ list_count_is(1, &list);
97
+ list_contains(ALLERGEN_PEANUTS, &list);
98
98
 
99
99
  free(list.allergens);
100
100
  }
@@ -107,8 +107,8 @@ void test_allergic_to_just_strawberries(void)
107
107
 
108
108
  get_allergens(score, &list);
109
109
 
110
- test_list_count_is(1, &list);
111
- test_list_contains(ALLERGEN_STRAWBERRIES, &list);
110
+ list_count_is(1, &list);
111
+ list_contains(ALLERGEN_STRAWBERRIES, &list);
112
112
 
113
113
  free(list.allergens);
114
114
  }
@@ -121,9 +121,9 @@ void test_allergic_to_eggs_and_peanuts(void)
121
121
 
122
122
  get_allergens(score, &list);
123
123
 
124
- test_list_count_is(2, &list);
125
- test_list_contains(ALLERGEN_EGGS, &list);
126
- test_list_contains(ALLERGEN_PEANUTS, &list);
124
+ list_count_is(2, &list);
125
+ list_contains(ALLERGEN_EGGS, &list);
126
+ list_contains(ALLERGEN_PEANUTS, &list);
127
127
 
128
128
  free(list.allergens);
129
129
  }
@@ -136,9 +136,9 @@ void test_allergic_to_more_than_eggs_but_not_peanuts(void)
136
136
 
137
137
  get_allergens(score, &list);
138
138
 
139
- test_list_count_is(2, &list);
140
- test_list_contains(ALLERGEN_EGGS, &list);
141
- test_list_contains(ALLERGEN_SHELLFISH, &list);
139
+ list_count_is(2, &list);
140
+ list_contains(ALLERGEN_EGGS, &list);
141
+ list_contains(ALLERGEN_SHELLFISH, &list);
142
142
 
143
143
  free(list.allergens);
144
144
  }
@@ -151,12 +151,12 @@ void test_allergic_to_lots_of_stuff(void)
151
151
 
152
152
  get_allergens(score, &list);
153
153
 
154
- test_list_count_is(5, &list);
155
- test_list_contains(ALLERGEN_STRAWBERRIES, &list);
156
- test_list_contains(ALLERGEN_TOMATOES, &list);
157
- test_list_contains(ALLERGEN_CHOCOLATE, &list);
158
- test_list_contains(ALLERGEN_POLLEN, &list);
159
- test_list_contains(ALLERGEN_CATS, &list);
154
+ list_count_is(5, &list);
155
+ list_contains(ALLERGEN_STRAWBERRIES, &list);
156
+ list_contains(ALLERGEN_TOMATOES, &list);
157
+ list_contains(ALLERGEN_CHOCOLATE, &list);
158
+ list_contains(ALLERGEN_POLLEN, &list);
159
+ list_contains(ALLERGEN_CATS, &list);
160
160
 
161
161
  free(list.allergens);
162
162
  }
@@ -169,15 +169,15 @@ void test_allergic_to_everything(void)
169
169
 
170
170
  get_allergens(score, &list);
171
171
 
172
- test_list_count_is(8, &list);
173
- test_list_contains(ALLERGEN_EGGS, &list);
174
- test_list_contains(ALLERGEN_PEANUTS, &list);
175
- test_list_contains(ALLERGEN_SHELLFISH, &list);
176
- test_list_contains(ALLERGEN_STRAWBERRIES, &list);
177
- test_list_contains(ALLERGEN_TOMATOES, &list);
178
- test_list_contains(ALLERGEN_CHOCOLATE, &list);
179
- test_list_contains(ALLERGEN_POLLEN, &list);
180
- test_list_contains(ALLERGEN_CATS, &list);
172
+ list_count_is(8, &list);
173
+ list_contains(ALLERGEN_EGGS, &list);
174
+ list_contains(ALLERGEN_PEANUTS, &list);
175
+ list_contains(ALLERGEN_SHELLFISH, &list);
176
+ list_contains(ALLERGEN_STRAWBERRIES, &list);
177
+ list_contains(ALLERGEN_TOMATOES, &list);
178
+ list_contains(ALLERGEN_CHOCOLATE, &list);
179
+ list_contains(ALLERGEN_POLLEN, &list);
180
+ list_contains(ALLERGEN_CATS, &list);
181
181
 
182
182
  free(list.allergens);
183
183
  }
@@ -190,14 +190,14 @@ void test_ignore_non_allergen_score_parts(void)
190
190
 
191
191
  get_allergens(score, &list);
192
192
 
193
- test_list_count_is(7, &list);
194
- test_list_contains(ALLERGEN_EGGS, &list);
195
- test_list_contains(ALLERGEN_SHELLFISH, &list);
196
- test_list_contains(ALLERGEN_STRAWBERRIES, &list);
197
- test_list_contains(ALLERGEN_TOMATOES, &list);
198
- test_list_contains(ALLERGEN_CHOCOLATE, &list);
199
- test_list_contains(ALLERGEN_POLLEN, &list);
200
- test_list_contains(ALLERGEN_CATS, &list);
193
+ list_count_is(7, &list);
194
+ list_contains(ALLERGEN_EGGS, &list);
195
+ list_contains(ALLERGEN_SHELLFISH, &list);
196
+ list_contains(ALLERGEN_STRAWBERRIES, &list);
197
+ list_contains(ALLERGEN_TOMATOES, &list);
198
+ list_contains(ALLERGEN_CHOCOLATE, &list);
199
+ list_contains(ALLERGEN_POLLEN, &list);
200
+ list_contains(ALLERGEN_CATS, &list);
201
201
 
202
202
  free(list.allergens);
203
203
  }
@@ -1,42 +1,38 @@
1
1
  {
2
- "language": "Common Lisp",
3
2
  "active": true,
4
3
  "exercises": [
5
4
  {
6
- "uuid": "d4af6cfa-d468-15b5-dcdf-7d717ddf6556",
7
- "slug": "hello-world",
8
5
  "core": true,
9
- "unlocked_by": null,
10
6
  "difficulty": 1,
7
+ "slug": "hello-world",
11
8
  "topics": [
12
- "Strings"
13
- ]
9
+ "strings"
10
+ ],
11
+ "unlocked_by": null,
12
+ "uuid": "d4af6cfa-d468-15b5-dcdf-7d717ddf6556"
14
13
  },
15
14
  {
16
- "uuid": "c029678b-9b9f-4fb2-958f-3a118efa16a9",
17
- "slug": "hamming",
18
15
  "core": true,
19
- "unlocked_by": null,
20
16
  "difficulty": 1,
17
+ "slug": "hamming",
21
18
  "topics": [
22
- "Control-flow (conditionals)",
23
- "Control-flow (loops)",
24
- "Equality",
25
- "Strings",
26
- "Filtering"
27
- ]
19
+ "control_flow_conditionals",
20
+ "control_flow_loops",
21
+ "equality",
22
+ "filtering",
23
+ "strings"
24
+ ],
25
+ "unlocked_by": null,
26
+ "uuid": "c029678b-9b9f-4fb2-958f-3a118efa16a9"
28
27
  },
29
28
  {
30
- "uuid": "8bfa54a8-4ee6-4e6e-b286-7fc8c70b9e9f",
31
- "slug": "leap",
32
- "core": true,
29
+ "uuid": "428e5b28-31b6-4c84-8eae-d7753d45efc1",
30
+ "slug": "sublist",
31
+ "core": false,
33
32
  "unlocked_by": null,
34
33
  "difficulty": 1,
35
34
  "topics": [
36
- "Control-flow (conditionals)",
37
- "Equality",
38
- "Integers",
39
- "Logic"
35
+ "Lists"
40
36
  ]
41
37
  },
42
38
  {
@@ -44,385 +40,403 @@
44
40
  "slug": "grains",
45
41
  "core": false,
46
42
  "unlocked_by": null,
43
+ "core": true,
47
44
  "difficulty": 1,
45
+ "slug": "leap",
48
46
  "topics": [
49
- "Variables",
50
- "Integers",
51
- "Mathematics"
52
- ]
47
+ "control_flow_conditionals",
48
+ "equality",
49
+ "integers",
50
+ "logic"
51
+ ],
52
+ "unlocked_by": null,
53
+ "uuid": "8bfa54a8-4ee6-4e6e-b286-7fc8c70b9e9f"
53
54
  },
54
55
  {
55
- "uuid": "25506c31-7274-402a-95e1-8475fcdb34e1",
56
- "slug": "gigasecond",
57
56
  "core": false,
57
+ "difficulty": 1,
58
+ "slug": "grains",
59
+ "topics": [
60
+ "integers",
61
+ "mathematics",
62
+ "variables"
63
+ ],
58
64
  "unlocked_by": null,
65
+ "uuid": "eb3a92bf-0748-4406-ba67-9e27e367ae45"
66
+ },
67
+ {
68
+ "core": false,
59
69
  "difficulty": 1,
70
+ "slug": "gigasecond",
60
71
  "topics": [
61
- "Variables",
62
- "Integers",
63
- "Date",
64
- "Time",
65
- "Transforming"
66
- ]
72
+ "date",
73
+ "integers",
74
+ "time",
75
+ "transforming",
76
+ "variables"
77
+ ],
78
+ "unlocked_by": null,
79
+ "uuid": "25506c31-7274-402a-95e1-8475fcdb34e1"
67
80
  },
68
81
  {
69
- "uuid": "1e6c8365-775d-4a4f-8fc7-e376912d7912",
70
- "slug": "bob",
71
82
  "core": true,
72
- "unlocked_by": null,
73
83
  "difficulty": 1,
84
+ "slug": "bob",
74
85
  "topics": [
75
- "Control-flow (conditionals)",
76
- "Strings",
77
- "Parsing"
78
- ]
86
+ "control_flow_conditionals",
87
+ "parsing",
88
+ "strings"
89
+ ],
90
+ "unlocked_by": null,
91
+ "uuid": "1e6c8365-775d-4a4f-8fc7-e376912d7912"
79
92
  },
80
93
  {
81
- "uuid": "5c215cbf-a575-42ad-9b3f-892410a63077",
82
- "slug": "rna-transcription",
83
94
  "core": false,
84
- "unlocked_by": null,
85
95
  "difficulty": 1,
96
+ "slug": "rna-transcription",
86
97
  "topics": [
87
- "Control-flow (conditionals)",
88
- "Strings",
89
- "Transforming"
90
- ]
98
+ "control_flow_conditionals",
99
+ "strings",
100
+ "transforming"
101
+ ],
102
+ "unlocked_by": null,
103
+ "uuid": "5c215cbf-a575-42ad-9b3f-892410a63077"
91
104
  },
92
105
  {
93
- "uuid": "79a4a35c-40d6-4e2d-92a1-005c40b4f4c5",
94
- "slug": "robot-name",
95
106
  "core": false,
96
- "unlocked_by": null,
97
107
  "difficulty": 1,
108
+ "slug": "robot-name",
98
109
  "topics": [
99
- "Variables",
100
- "Strings",
101
- "Randomness"
102
- ]
110
+ "randomness",
111
+ "strings",
112
+ "variables"
113
+ ],
114
+ "unlocked_by": null,
115
+ "uuid": "79a4a35c-40d6-4e2d-92a1-005c40b4f4c5"
103
116
  },
104
117
  {
105
- "uuid": "424ed7aa-24f3-4aec-9620-3cc9dc224166",
106
- "slug": "word-count",
107
118
  "core": false,
108
- "unlocked_by": null,
109
119
  "difficulty": 1,
120
+ "slug": "word-count",
110
121
  "topics": [
111
- "Control-flow (conditionals)",
112
- "Control-flow (loops)",
113
- "Strings",
114
- "Filtering"
115
- ]
122
+ "control_flow_conditionals",
123
+ "control_flow_loops",
124
+ "filtering",
125
+ "strings"
126
+ ],
127
+ "unlocked_by": null,
128
+ "uuid": "424ed7aa-24f3-4aec-9620-3cc9dc224166"
116
129
  },
117
130
  {
118
- "uuid": "b5345fcb-d4cc-4ea0-b1b9-f1b0cb92f05c",
119
- "slug": "raindrops",
120
131
  "core": false,
121
- "unlocked_by": null,
122
132
  "difficulty": 1,
133
+ "slug": "raindrops",
123
134
  "topics": [
124
- "Control-flow (conditionals)",
125
- "Integers",
126
- "Filtering"
127
- ]
135
+ "control_flow_conditionals",
136
+ "filtering",
137
+ "integers"
138
+ ],
139
+ "unlocked_by": null,
140
+ "uuid": "b5345fcb-d4cc-4ea0-b1b9-f1b0cb92f05c"
128
141
  },
129
142
  {
130
- "uuid": "841641f2-16ba-4dc5-af1b-ffae5052853a",
131
- "slug": "grade-school",
132
143
  "core": false,
133
- "unlocked_by": null,
134
144
  "difficulty": 1,
145
+ "slug": "grade-school",
135
146
  "topics": [
136
- "Interfaces",
137
- "Variables",
138
- "Lists",
139
- "Maps",
140
- "Sorting"
141
- ]
147
+ "interfaces",
148
+ "lists",
149
+ "maps",
150
+ "sorting",
151
+ "variables"
152
+ ],
153
+ "unlocked_by": null,
154
+ "uuid": "841641f2-16ba-4dc5-af1b-ffae5052853a"
142
155
  },
143
156
  {
144
- "uuid": "d1d86b51-a3f4-4276-a18c-6db54bc8dfcc",
145
- "slug": "phone-number",
146
157
  "core": false,
147
- "unlocked_by": null,
148
158
  "difficulty": 1,
159
+ "slug": "phone-number",
149
160
  "topics": [
150
- "Interfaces",
151
- "Strings",
152
- "Parsing"
153
- ]
161
+ "interfaces",
162
+ "parsing",
163
+ "strings"
164
+ ],
165
+ "unlocked_by": null,
166
+ "uuid": "d1d86b51-a3f4-4276-a18c-6db54bc8dfcc"
154
167
  },
155
168
  {
156
- "uuid": "52ac3dd0-8803-445f-93cf-e984b59d6702",
157
- "slug": "etl",
158
169
  "core": false,
159
- "unlocked_by": null,
160
170
  "difficulty": 1,
171
+ "slug": "etl",
161
172
  "topics": [
162
- "Control-flow (loops)",
163
- "Maps",
164
- "Transforming"
165
- ]
173
+ "control_flow_loops",
174
+ "maps",
175
+ "transforming"
176
+ ],
177
+ "unlocked_by": null,
178
+ "uuid": "52ac3dd0-8803-445f-93cf-e984b59d6702"
166
179
  },
167
180
  {
168
- "uuid": "5c6f22e7-109c-4d9e-b8bf-4ea63b2823ca",
169
- "slug": "beer-song",
170
181
  "core": true,
171
- "unlocked_by": null,
172
182
  "difficulty": 1,
183
+ "slug": "beer-song",
173
184
  "topics": [
174
- "Control-flow (conditionals)",
175
- "Control-flow (loops)",
176
- "Integers",
177
- "Text formatting"
178
- ]
185
+ "control_flow_conditionals",
186
+ "control_flow_loops",
187
+ "integers",
188
+ "text_formatting"
189
+ ],
190
+ "unlocked_by": null,
191
+ "uuid": "5c6f22e7-109c-4d9e-b8bf-4ea63b2823ca"
179
192
  },
180
193
  {
181
- "uuid": "d24cf0ea-876f-4775-969b-99970425e413",
182
- "slug": "space-age",
183
194
  "core": false,
184
- "unlocked_by": null,
185
195
  "difficulty": 1,
196
+ "slug": "space-age",
186
197
  "topics": [
187
- "Interfaces",
188
- "Floating-point numbers",
189
- "Transforming"
190
- ]
198
+ "floating_point_numbers",
199
+ "interfaces",
200
+ "transforming"
201
+ ],
202
+ "unlocked_by": null,
203
+ "uuid": "d24cf0ea-876f-4775-969b-99970425e413"
191
204
  },
192
205
  {
193
- "uuid": "b9fd0f13-966c-4085-ac9d-ed49a96ac0bf",
194
- "slug": "anagram",
195
206
  "core": false,
196
- "unlocked_by": null,
197
207
  "difficulty": 1,
208
+ "slug": "anagram",
198
209
  "topics": [
199
- "Equality",
200
- "Strings",
201
- "Filtering"
202
- ]
210
+ "equality",
211
+ "filtering",
212
+ "strings"
213
+ ],
214
+ "unlocked_by": null,
215
+ "uuid": "b9fd0f13-966c-4085-ac9d-ed49a96ac0bf"
203
216
  },
204
217
  {
205
- "uuid": "b2ad38c2-2962-4a47-9b14-20ca262ebff6",
206
- "slug": "nucleotide-count",
207
218
  "core": false,
208
- "unlocked_by": null,
209
219
  "difficulty": 1,
220
+ "slug": "nucleotide-count",
210
221
  "topics": [
211
- "Control-flow (loops)",
212
- "Strings",
213
- "Maps",
214
- "Sorting"
215
- ]
222
+ "control_flow_loops",
223
+ "maps",
224
+ "sorting",
225
+ "strings"
226
+ ],
227
+ "unlocked_by": null,
228
+ "uuid": "b2ad38c2-2962-4a47-9b14-20ca262ebff6"
216
229
  },
217
230
  {
218
- "uuid": "b3ad38c2-2962-4b47-9b14-20ca262ebff6",
219
- "slug": "collatz-conjecture",
220
231
  "core": false,
221
- "unlocked_by": null,
222
232
  "difficulty": 1,
233
+ "slug": "collatz-conjecture",
223
234
  "topics": [
224
- "Integer",
225
- "Recursivity",
226
- "Mathematics"
227
- ]
235
+ "integer",
236
+ "mathematics",
237
+ "recursivity"
238
+ ],
239
+ "unlocked_by": null,
240
+ "uuid": "b3ad38c2-2962-4b47-9b14-20ca262ebff6"
228
241
  },
229
242
  {
230
- "uuid": "b3ad38c2-2962-4b47-9b15-15ca262ebff6",
231
- "slug": "perfect-numbers",
232
243
  "core": false,
233
- "unlocked_by": null,
234
244
  "difficulty": 1,
245
+ "slug": "perfect-numbers",
235
246
  "topics": [
236
- "Number theory"
237
- ]
247
+ "number_theory"
248
+ ],
249
+ "unlocked_by": null,
250
+ "uuid": "b3ad38c2-2962-4b47-9b15-15ca262ebff6"
238
251
  },
239
252
  {
240
- "uuid": "6c702aa9-70f3-41d0-bc76-4323a08f8fbf",
241
- "slug": "meetup",
242
253
  "core": false,
243
- "unlocked_by": null,
244
254
  "difficulty": 1,
255
+ "slug": "meetup",
245
256
  "topics": [
246
- "Control-flow (conditionals)",
247
- "Dates",
248
- "Filtering"
249
- ]
257
+ "control_flow_conditionals",
258
+ "dates",
259
+ "filtering"
260
+ ],
261
+ "unlocked_by": null,
262
+ "uuid": "6c702aa9-70f3-41d0-bc76-4323a08f8fbf"
250
263
  },
251
264
  {
252
- "uuid": "bd2a55e3-9874-4d2e-ad6f-4b2f8c5e2e0a",
253
- "slug": "triangle",
254
265
  "core": false,
255
- "unlocked_by": null,
256
266
  "difficulty": 1,
267
+ "slug": "triangle",
257
268
  "topics": [
258
- "Control-flow (conditionals)",
259
- "Integers",
260
- "Floating-point numbers",
261
- "Mathematics",
262
- "Filtering"
263
- ]
269
+ "control_flow_conditionals",
270
+ "filtering",
271
+ "floating_point_numbers",
272
+ "integers",
273
+ "mathematics"
274
+ ],
275
+ "unlocked_by": null,
276
+ "uuid": "bd2a55e3-9874-4d2e-ad6f-4b2f8c5e2e0a"
264
277
  },
265
278
  {
266
- "uuid": "71804ace-6ca1-46b9-bf06-ff57faef7afa",
267
- "slug": "difference-of-squares",
268
279
  "core": false,
269
- "unlocked_by": null,
270
280
  "difficulty": 1,
281
+ "slug": "difference-of-squares",
271
282
  "topics": [
272
- "Control-flow (loops)",
273
- "Integers",
274
- "Floating-point numbers",
275
- "Mathematics"
276
- ]
283
+ "control_flow_loops",
284
+ "floating_point_numbers",
285
+ "integers",
286
+ "mathematics"
287
+ ],
288
+ "unlocked_by": null,
289
+ "uuid": "71804ace-6ca1-46b9-bf06-ff57faef7afa"
277
290
  },
278
291
  {
279
- "uuid": "150d3608-d234-4c9e-ab6d-2d91f8a2c855",
280
- "slug": "roman-numerals",
281
292
  "core": false,
282
- "unlocked_by": null,
283
293
  "difficulty": 1,
294
+ "slug": "roman-numerals",
284
295
  "topics": [
285
- "Control-flow (conditionals)",
286
- "Control-flow (loops)",
287
- "Integers",
288
- "Strings",
289
- "Text formatting"
290
- ]
296
+ "control_flow_conditionals",
297
+ "control_flow_loops",
298
+ "integers",
299
+ "strings",
300
+ "text_formatting"
301
+ ],
302
+ "unlocked_by": null,
303
+ "uuid": "150d3608-d234-4c9e-ab6d-2d91f8a2c855"
291
304
  },
292
305
  {
293
- "uuid": "f350f23d-72f8-4f47-a0f5-fe3c00f3f5f1",
294
- "slug": "scrabble-score",
295
306
  "core": false,
296
- "unlocked_by": null,
297
307
  "difficulty": 1,
308
+ "slug": "scrabble-score",
298
309
  "topics": [
299
- "Control-flow (loops)",
300
- "Maps",
301
- "Strings",
302
- "Games"
303
- ]
310
+ "control_flow_loops",
311
+ "games",
312
+ "maps",
313
+ "strings"
314
+ ],
315
+ "unlocked_by": null,
316
+ "uuid": "f350f23d-72f8-4f47-a0f5-fe3c00f3f5f1"
304
317
  },
305
318
  {
306
- "uuid": "005ff8b4-9df8-4b82-b919-a0c67356d654",
307
- "slug": "binary",
308
319
  "core": false,
309
- "unlocked_by": null,
310
320
  "difficulty": 1,
321
+ "slug": "binary",
311
322
  "topics": [
312
- "Control-flow (conditionals)",
313
- "Integers",
314
- "Bitwise operations"
315
- ]
323
+ "bitwise_operations",
324
+ "control_flow_conditionals",
325
+ "integers"
326
+ ],
327
+ "unlocked_by": null,
328
+ "uuid": "005ff8b4-9df8-4b82-b919-a0c67356d654"
316
329
  },
317
330
  {
318
- "uuid": "d2fd481e-7156-452d-976d-ea6df220fa18",
319
- "slug": "allergies",
320
331
  "core": false,
321
- "unlocked_by": null,
322
332
  "difficulty": 1,
333
+ "slug": "allergies",
323
334
  "topics": [
324
- "Control-flow (conditionals)",
325
- "Integers",
326
- "Bitwise operations",
327
- "Text formatting"
328
- ]
335
+ "bitwise_operations",
336
+ "control_flow_conditionals",
337
+ "integers",
338
+ "text_formatting"
339
+ ],
340
+ "unlocked_by": null,
341
+ "uuid": "d2fd481e-7156-452d-976d-ea6df220fa18"
329
342
  },
330
343
  {
331
- "uuid": "40f3b911-0739-4fec-95cc-cfab99788c19",
332
- "slug": "sieve",
333
344
  "core": true,
334
- "unlocked_by": null,
335
345
  "difficulty": 1,
346
+ "slug": "sieve",
336
347
  "topics": [
337
- "Control-flow (conditionals)",
338
- "Control-flow (loops)",
339
- "Integers",
340
- "Maps",
341
- "Mathematics",
342
- "Filtering"
343
- ]
348
+ "control_flow_conditionals",
349
+ "control_flow_loops",
350
+ "filtering",
351
+ "integers",
352
+ "maps",
353
+ "mathematics"
354
+ ],
355
+ "unlocked_by": null,
356
+ "uuid": "40f3b911-0739-4fec-95cc-cfab99788c19"
344
357
  },
345
358
  {
346
- "uuid": "1a81aac9-9128-48ab-aa6a-4d981d6eb602",
347
- "slug": "strain",
348
359
  "core": false,
349
- "unlocked_by": null,
350
360
  "difficulty": 1,
361
+ "slug": "strain",
351
362
  "topics": [
352
- "Control-flow (conditionals)",
353
- "Control-flow (loops)",
354
- "Sequences",
355
- "Filtering"
356
- ]
363
+ "control_flow_conditionals",
364
+ "control_flow_loops",
365
+ "filtering",
366
+ "sequences"
367
+ ],
368
+ "unlocked_by": null,
369
+ "uuid": "1a81aac9-9128-48ab-aa6a-4d981d6eb602"
357
370
  },
358
371
  {
359
- "uuid": "71a1fdb6-414e-452c-8d24-03f2a5621e62",
360
- "slug": "atbash-cipher",
361
372
  "core": false,
362
- "unlocked_by": null,
363
373
  "difficulty": 1,
374
+ "slug": "atbash-cipher",
364
375
  "topics": [
365
- "Control-flow (conditionals)",
366
- "Control-flow (loops)",
367
- "Sequences",
368
- "Transforming"
369
- ]
376
+ "control_flow_conditionals",
377
+ "control_flow_loops",
378
+ "sequences",
379
+ "transforming"
380
+ ],
381
+ "unlocked_by": null,
382
+ "uuid": "71a1fdb6-414e-452c-8d24-03f2a5621e62"
370
383
  },
371
384
  {
372
- "uuid": "cc138097-7c0f-44b4-b07e-2a24f6475986",
373
- "slug": "prime-factors",
374
385
  "core": false,
375
- "unlocked_by": null,
376
386
  "difficulty": 1,
387
+ "slug": "prime-factors",
377
388
  "topics": [
378
- "Control-flow (conditionals)",
379
- "Control-flow (loops)",
380
- "Integers",
381
- "Maps",
382
- "Mathematics",
383
- "Filtering"
384
- ]
389
+ "control_flow_conditionals",
390
+ "control_flow_loops",
391
+ "filtering",
392
+ "integers",
393
+ "maps",
394
+ "mathematics"
395
+ ],
396
+ "unlocked_by": null,
397
+ "uuid": "cc138097-7c0f-44b4-b07e-2a24f6475986"
385
398
  },
386
399
  {
387
- "uuid": "fcfc6b44-597d-4a03-bf02-6be5c8f7ae4e",
388
- "slug": "crypto-square",
389
400
  "core": false,
390
- "unlocked_by": null,
391
401
  "difficulty": 1,
402
+ "slug": "crypto-square",
392
403
  "topics": [
393
- "Control-flow (conditionals)",
394
- "Control-flow (loops)",
395
- "Strings",
396
- "Arrays",
397
- "Transforming"
398
- ]
404
+ "arrays",
405
+ "control_flow_conditionals",
406
+ "control_flow_loops",
407
+ "strings",
408
+ "transforming"
409
+ ],
410
+ "unlocked_by": null,
411
+ "uuid": "fcfc6b44-597d-4a03-bf02-6be5c8f7ae4e"
399
412
  },
400
413
  {
401
- "uuid": "ff3eb2c5-c7ce-4352-805c-e01d4fb85aa6",
402
- "slug": "trinary",
403
414
  "core": false,
404
- "unlocked_by": null,
405
415
  "difficulty": 1,
416
+ "slug": "trinary",
406
417
  "topics": [
407
- "Control-flow (conditionals)",
408
- "Integers",
409
- "Mathematics"
410
- ]
418
+ "control_flow_conditionals",
419
+ "integers",
420
+ "mathematics"
421
+ ],
422
+ "unlocked_by": null,
423
+ "uuid": "ff3eb2c5-c7ce-4352-805c-e01d4fb85aa6"
411
424
  },
412
425
  {
413
- "uuid": "34bc4fbe-f148-4519-a699-91efed432703",
414
- "slug": "pascals-triangle",
415
426
  "difficulty": 1,
427
+ "slug": "pascals-triangle",
416
428
  "topics": [
417
- "Control-flow (loops)",
418
- "Mathematics",
419
- "Integers",
420
- "Sequences"
421
- ]
429
+ "control_flow_loops",
430
+ "integers",
431
+ "mathematics",
432
+ "sequences"
433
+ ],
434
+ "uuid": "34bc4fbe-f148-4519-a699-91efed432703"
422
435
  }
423
436
  ],
424
437
  "foregone": [
425
438
  "accumulate",
426
439
  "bank-account"
427
- ]
428
- }
440
+ ],
441
+ "language": "Common Lisp"
442
+ }