trackler 2.2.1.43 → 2.2.1.44

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 (151) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/lens-person/description.md +1 -1
  4. data/problem-specifications/exercises/palindrome-products/description.md +5 -12
  5. data/problem-specifications/exercises/pascals-triangle/canonical-data.json +1 -7
  6. data/tracks/c/exercises/meetup/src/example.c +64 -60
  7. data/tracks/c/exercises/meetup/src/example.h +2 -2
  8. data/tracks/c/exercises/meetup/test/test_meetup.c +4 -4
  9. data/tracks/cfml/config.json +179 -169
  10. data/tracks/cfml/exercises/markdown/.meta/HINTS.md +0 -0
  11. data/tracks/cfml/exercises/markdown/Markdown.cfc +121 -0
  12. data/tracks/cfml/exercises/markdown/MarkdownTest.cfc +51 -0
  13. data/tracks/cfml/exercises/markdown/Solution.cfc +204 -0
  14. data/tracks/cfml/exercises/markdown/SolutionTest.cfc +7 -0
  15. data/tracks/cfml/exercises/markdown/TestRunner.cfc +103 -0
  16. data/tracks/cfml/exercises/markdown/box.json +8 -0
  17. data/tracks/cfml/exercises/markdown/index.cfm +37 -0
  18. data/tracks/csharp/exercises/dominoes/DominoesTest.cs +40 -45
  19. data/tracks/csharp/exercises/meetup/MeetupTest.cs +761 -83
  20. data/tracks/csharp/generators/Exercises/Dominoes.cs +33 -0
  21. data/tracks/csharp/generators/Exercises/Meetup.cs +46 -0
  22. data/tracks/csharp/generators/Output/FormattingExtensions.cs +11 -1
  23. data/tracks/csharp/generators/Output/TypesExtensions.cs +23 -0
  24. data/tracks/csharp/generators/Output/ValueFormatter.cs +70 -69
  25. data/tracks/dart/config.json +15 -3
  26. data/tracks/dart/exercises/word-count/README.md +18 -0
  27. data/tracks/dart/exercises/word-count/lib/example.dart +26 -0
  28. data/tracks/dart/exercises/word-count/lib/word_count.dart +3 -0
  29. data/tracks/dart/exercises/word-count/pubspec.lock +293 -0
  30. data/tracks/dart/exercises/word-count/pubspec.yaml +3 -0
  31. data/tracks/dart/exercises/word-count/test/word_count_test.dart +64 -0
  32. data/tracks/ecmascript/docs/INSTALLATION.md +4 -7
  33. data/tracks/elixir/exercises/hello-world/README.md +1 -26
  34. data/tracks/elixir/exercises/hello-world/example.exs +3 -7
  35. data/tracks/elixir/exercises/hello-world/hello_world.exs +3 -25
  36. data/tracks/elixir/exercises/hello-world/hello_world_test.exs +2 -13
  37. data/tracks/elixir/mix.lock +1 -1
  38. data/tracks/elm/config.json +11 -0
  39. data/tracks/elm/exercises/pascals-triangle/README.md +51 -0
  40. data/tracks/elm/exercises/pascals-triangle/Triangle.elm +1 -0
  41. data/tracks/elm/exercises/pascals-triangle/Triangle.example.elm +23 -0
  42. data/tracks/elm/exercises/pascals-triangle/elm-package.json +14 -0
  43. data/tracks/elm/exercises/pascals-triangle/package.json +14 -0
  44. data/tracks/elm/exercises/pascals-triangle/tests/Tests.elm +34 -0
  45. data/tracks/elm/exercises/pascals-triangle/tests/elm-package.json +16 -0
  46. data/tracks/fsharp/exercises/grade-school/GradeSchool.fs +2 -2
  47. data/tracks/fsharp/exercises/grade-school/GradeSchoolTest.fs +3 -2
  48. data/tracks/java/CONTRIBUTING.md +34 -0
  49. data/tracks/java/config.json +42 -6
  50. data/tracks/java/exercises/largest-series-product/src/main/java/LargestSeriesProductCalculator.java +7 -3
  51. data/tracks/java/exercises/matrix/src/main/java/Matrix.java +23 -0
  52. data/tracks/julia/config.json +11 -2
  53. data/tracks/julia/exercises/grains/README.md +33 -0
  54. data/tracks/julia/exercises/grains/example.jl +23 -0
  55. data/tracks/julia/exercises/grains/grains.jl +9 -0
  56. data/tracks/julia/exercises/grains/runtests.jl +27 -0
  57. data/tracks/lua/README.md +1 -1
  58. data/tracks/mips/exercises/octal/README.md +3 -8
  59. data/tracks/ocaml/exercises/palindrome-products/README.md +8 -14
  60. data/tracks/perl6/.travis.yml +7 -3
  61. data/tracks/perl6/bin/exercise-gen.pl6 +5 -1
  62. data/tracks/perl6/exercises/accumulate/README.md +0 -3
  63. data/tracks/perl6/exercises/accumulate/accumulate.t +9 -3
  64. data/tracks/perl6/exercises/all-your-base/README.md +1 -1
  65. data/tracks/perl6/exercises/all-your-base/all-your-base.t +23 -11
  66. data/tracks/perl6/exercises/all-your-base/example.yaml +1 -1
  67. data/tracks/perl6/exercises/allergies/README.md +0 -1
  68. data/tracks/perl6/exercises/allergies/allergies.t +22 -10
  69. data/tracks/perl6/exercises/anagram/anagram.t +22 -10
  70. data/tracks/perl6/exercises/atbash-cipher/README.md +2 -1
  71. data/tracks/perl6/exercises/atbash-cipher/atbash-cipher.t +22 -10
  72. data/tracks/perl6/exercises/binary/README.md +2 -0
  73. data/tracks/perl6/exercises/bob/bob.t +24 -11
  74. data/tracks/perl6/exercises/bob/example.yaml +2 -2
  75. data/tracks/perl6/exercises/clock/clock.t +22 -10
  76. data/tracks/perl6/exercises/flatten-array/README.md +1 -2
  77. data/tracks/perl6/exercises/flatten-array/example.yaml +1 -1
  78. data/tracks/perl6/exercises/flatten-array/flatten-array.t +23 -11
  79. data/tracks/perl6/exercises/grade-school/README.md +0 -1
  80. data/tracks/perl6/exercises/grade-school/grade-school.t +9 -3
  81. data/tracks/perl6/exercises/grains/README.md +0 -1
  82. data/tracks/perl6/exercises/grains/grains.t +22 -10
  83. data/tracks/perl6/exercises/hello-world/example.yaml +3 -3
  84. data/tracks/perl6/exercises/hello-world/hello-world.t +25 -12
  85. data/tracks/perl6/exercises/leap/README.md +1 -1
  86. data/tracks/perl6/exercises/leap/example.yaml +1 -1
  87. data/tracks/perl6/exercises/leap/leap.t +23 -11
  88. data/tracks/perl6/exercises/linked-list/README.md +10 -10
  89. data/tracks/perl6/exercises/linked-list/linked-list.t +9 -3
  90. data/tracks/perl6/exercises/luhn/README.md +7 -7
  91. data/tracks/perl6/exercises/luhn/luhn.t +22 -10
  92. data/tracks/perl6/exercises/phone-number/README.md +3 -2
  93. data/tracks/perl6/exercises/phone-number/phone-number.t +22 -10
  94. data/tracks/perl6/exercises/raindrops/raindrops.t +22 -10
  95. data/tracks/perl6/exercises/rna-transcription/rna-transcription.t +22 -10
  96. data/tracks/perl6/exercises/robot-name/robot-name.t +9 -3
  97. data/tracks/perl6/exercises/scrabble-score/README.md +3 -1
  98. data/tracks/perl6/exercises/scrabble-score/scrabble-score.t +22 -10
  99. data/tracks/perl6/exercises/space-age/README.md +2 -1
  100. data/tracks/perl6/exercises/space-age/space-age.t +22 -10
  101. data/tracks/perl6/exercises/trinary/README.md +1 -1
  102. data/tracks/perl6/exercises/word-count/README.md +1 -2
  103. data/tracks/perl6/exercises/word-count/word-count.t +22 -10
  104. data/tracks/perl6/exercises/wordy/README.md +0 -5
  105. data/tracks/perl6/exercises/wordy/wordy.t +22 -10
  106. data/tracks/perl6/templates/test.mustache +26 -15
  107. data/tracks/python/config.json +10 -0
  108. data/tracks/python/exercises/book-store/book_store.py +1 -1
  109. data/tracks/python/exercises/flatten-array/flatten_array.py +1 -1
  110. data/tracks/python/exercises/matrix/matrix.py +1 -1
  111. data/tracks/python/exercises/palindrome-products/palindrome_products.py +2 -2
  112. data/tracks/python/exercises/perfect-numbers/perfect_numbers.py +2 -2
  113. data/tracks/python/exercises/pythagorean-triplet/pythagorean_triplet.py +3 -3
  114. data/tracks/python/exercises/raindrops/raindrops.py +1 -1
  115. data/tracks/python/exercises/scale-generator/scale_generator.py +1 -1
  116. data/tracks/python/exercises/sieve/sieve.py +1 -1
  117. data/tracks/python/exercises/sublist/sublist.py +1 -1
  118. data/tracks/python/exercises/transpose/transpose.py +1 -1
  119. data/tracks/python/exercises/triangle/triangle.py +4 -1
  120. data/tracks/python/exercises/two-bucket/example.py +59 -0
  121. data/tracks/python/exercises/two-bucket/two_bucket.py +2 -0
  122. data/tracks/python/exercises/two-bucket/two_bucket_test.py +32 -0
  123. data/tracks/scheme/config.json +59 -89
  124. data/tracks/scheme/config/maintainers.json +11 -11
  125. data/tracks/sml/exercises/allergies/README.md +20 -5
  126. data/tracks/sml/exercises/allergies/allergies.sml +11 -14
  127. data/tracks/sml/exercises/allergies/example.sml +9 -9
  128. data/tracks/sml/exercises/allergies/test.sml +65 -129
  129. data/tracks/sml/exercises/allergies/testlib.sml +159 -0
  130. data/tracks/sml/exercises/hamming/README.md +21 -5
  131. data/tracks/sml/exercises/hamming/example.sml +14 -10
  132. data/tracks/sml/exercises/hamming/hamming.sml +4 -3
  133. data/tracks/sml/exercises/hamming/test.sml +55 -64
  134. data/tracks/sml/exercises/hamming/testlib.sml +159 -0
  135. data/tracks/typescript/config.json +15 -0
  136. data/tracks/typescript/exercises/linked-list/linked-list.test.ts +11 -11
  137. data/tracks/typescript/exercises/nth-prime/README.md +36 -0
  138. data/tracks/typescript/exercises/nth-prime/nth-prime.example.ts +28 -0
  139. data/tracks/typescript/exercises/nth-prime/nth-prime.test.ts +25 -0
  140. data/tracks/typescript/exercises/nth-prime/nth-prime.ts +0 -0
  141. data/tracks/typescript/exercises/nth-prime/package.json +36 -0
  142. data/tracks/typescript/exercises/nth-prime/tsconfig.json +22 -0
  143. data/tracks/typescript/exercises/nth-prime/tslint.json +127 -0
  144. data/tracks/typescript/exercises/nth-prime/yarn.lock +2305 -0
  145. data/tracks/typescript/exercises/prime-factors/README.md +1 -1
  146. data/tracks/typescript/exercises/prime-factors/prime-factors.test.ts +11 -11
  147. data/tracks/typescript/exercises/series/README.md +1 -1
  148. data/tracks/typescript/exercises/series/series.test.ts +11 -11
  149. data/tracks/typescript/img/icon.png +0 -0
  150. data/tracks/typescript/img/icon.svg +3 -8
  151. metadata +44 -2
@@ -4,10 +4,12 @@ use Test;
4
4
  use lib my $dir = $?FILE.IO.dirname;
5
5
  use JSON::Fast;
6
6
 
7
- my $exercise = 'RNA';
8
- my $version = v1;
9
- my $module = %*ENV<EXERCISM> ?? 'Example' !! $exercise;
10
- plan 10;
7
+ my Str:D $exercise := 'RNA';
8
+ my Version:D $version = v1;
9
+ my Str $module //= $exercise;
10
+ INIT {
11
+ plan 10;
12
+ }
11
13
 
12
14
  use-ok $module or bail-out;
13
15
  require ::($module);
@@ -30,12 +32,6 @@ for @($c-data<cases>) {
30
32
  }
31
33
  }
32
34
 
33
- if %*ENV<EXERCISM> {
34
- if (my $c-data-file = "$dir/../../problem-specifications/exercises/{$dir.IO.resolve.basename}/canonical-data.json".IO.resolve) ~~ :f {
35
- is-deeply $c-data, EVAL('use JSON::Fast; from-json($c-data-file.slurp);'), 'canonical-data';
36
- } else { flunk 'canonical-data' }
37
- } else { skip }
38
-
39
35
  done-testing;
40
36
 
41
37
  INIT {
@@ -109,4 +105,20 @@ $c-data := from-json q:to/END/;
109
105
  }
110
106
 
111
107
  END
108
+
109
+ if %*ENV<EXERCISM> {
110
+ $module = 'Example';
111
+ if (my $c-data-file =
112
+ "$dir/../../problem-specifications/exercises/{$dir.IO.resolve.basename}/canonical-data.json"
113
+ .IO.resolve) ~~ :f
114
+ {
115
+ is-deeply $c-data, EVAL('from-json $c-data-file.slurp'), 'canonical-data';
116
+ }
117
+ else {
118
+ flunk 'canonical-data';
119
+ }
120
+ }
121
+ else {
122
+ skip;
123
+ }
112
124
  }
@@ -3,9 +3,9 @@ use v6;
3
3
  use Test;
4
4
  use lib $?FILE.IO.dirname;
5
5
 
6
- my $exercise = 'Robot';
7
- my $version = v1;
8
- my $module = %*ENV<EXERCISM> ?? 'Example' !! $exercise;
6
+ my Str:D $exercise := 'Robot';
7
+ my Version:D $version = v1;
8
+ my Str $module //= $exercise;
9
9
  plan 8;
10
10
 
11
11
  use-ok $module or bail-out;
@@ -48,3 +48,9 @@ subtest 'Randomness', {
48
48
  }
49
49
 
50
50
  done-testing;
51
+
52
+ INIT {
53
+ if %*ENV<EXERCISM> {
54
+ $module = 'Example';
55
+ }
56
+ }
@@ -6,7 +6,7 @@ Given a word, compute the scrabble score for that word.
6
6
 
7
7
  You'll need these:
8
8
 
9
- ```plain
9
+ ```text
10
10
  Letter Value
11
11
  A, E, I, O, U, L, N, R, S, T 1
12
12
  D, G 2
@@ -18,6 +18,7 @@ Q, Z 10
18
18
  ```
19
19
 
20
20
  ## Examples
21
+
21
22
  "cabbage" should be scored as worth 14 points:
22
23
 
23
24
  - 3 points for C
@@ -34,6 +35,7 @@ And to total:
34
35
  - = 14
35
36
 
36
37
  ## Extensions
38
+
37
39
  - You can play a double or a triple letter.
38
40
  - You can play a double or a triple word.
39
41
 
@@ -4,10 +4,12 @@ use Test;
4
4
  use lib my $dir = $?FILE.IO.dirname;
5
5
  use JSON::Fast;
6
6
 
7
- my $exercise = 'Scrabble';
8
- my $version = v1;
9
- my $module = %*ENV<EXERCISM> ?? 'Example' !! $exercise;
10
- plan 13;
7
+ my Str:D $exercise := 'Scrabble';
8
+ my Version:D $version = v1;
9
+ my Str $module //= $exercise;
10
+ INIT {
11
+ plan 13;
12
+ }
11
13
 
12
14
  use-ok $module or bail-out;
13
15
  require ::($module);
@@ -24,12 +26,6 @@ require ::($module) <&score>;
24
26
  my $c-data;
25
27
  is .<input>.&score, |.<expected description> for @($c-data<cases>);
26
28
 
27
- if %*ENV<EXERCISM> {
28
- if (my $c-data-file = "$dir/../../problem-specifications/exercises/{$dir.IO.resolve.basename}/canonical-data.json".IO.resolve) ~~ :f {
29
- is-deeply $c-data, EVAL('use JSON::Fast; from-json($c-data-file.slurp);'), 'canonical-data';
30
- } else { flunk 'canonical-data' }
31
- } else { skip }
32
-
33
29
  done-testing;
34
30
 
35
31
  INIT {
@@ -109,4 +105,20 @@ $c-data := from-json q:to/END/;
109
105
  }
110
106
 
111
107
  END
108
+
109
+ if %*ENV<EXERCISM> {
110
+ $module = 'Example';
111
+ if (my $c-data-file =
112
+ "$dir/../../problem-specifications/exercises/{$dir.IO.resolve.basename}/canonical-data.json"
113
+ .IO.resolve) ~~ :f
114
+ {
115
+ is-deeply $c-data, EVAL('from-json $c-data-file.slurp'), 'canonical-data';
116
+ }
117
+ else {
118
+ flunk 'canonical-data';
119
+ }
120
+ }
121
+ else {
122
+ skip;
123
+ }
112
124
  }
@@ -12,7 +12,8 @@ Given an age in seconds, calculate how old someone would be on:
12
12
  - Neptune: orbital period 164.79132 Earth years
13
13
 
14
14
  So if you were told someone were 1,000,000,000 seconds old, you should
15
- be able to say that they're 31 Earth-years old.
15
+ be able to say that they're 31.69 Earth-years old. Round all ages to
16
+ the nearest hundredth of a year.
16
17
 
17
18
  If you're wondering why Pluto didn't make the cut, go watch [this
18
19
  youtube video](http://www.youtube.com/watch?v=Z_2gbGXzFbs).
@@ -4,10 +4,12 @@ use Test;
4
4
  use lib my $dir = $?FILE.IO.dirname;
5
5
  use JSON::Fast;
6
6
 
7
- my $exercise = 'SpaceAge';
8
- my $version = v1;
9
- my $module = %*ENV<EXERCISM> ?? 'Example' !! $exercise;
10
- plan 10;
7
+ my Str:D $exercise := 'SpaceAge';
8
+ my Version:D $version = v1;
9
+ my Str $module //= $exercise;
10
+ INIT {
11
+ plan 10;
12
+ }
11
13
 
12
14
  use-ok $module or bail-out;
13
15
  require ::($module);
@@ -24,12 +26,6 @@ require ::($module) <Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune>;
24
26
  my $c-data;
25
27
  is (age-on ::(.<planet>): .<seconds>), |.<expected description> for @($c-data<cases>);
26
28
 
27
- if %*ENV<EXERCISM> {
28
- if (my $c-data-file = "$dir/../../problem-specifications/exercises/{$dir.IO.resolve.basename}/canonical-data.json".IO.resolve) ~~ :f {
29
- is-deeply $c-data, EVAL('use JSON::Fast; from-json($c-data-file.slurp);'), 'canonical-data';
30
- } else { flunk 'canonical-data' }
31
- } else { skip }
32
-
33
29
  done-testing;
34
30
 
35
31
  INIT {
@@ -99,4 +95,20 @@ $c-data := from-json q:to/END/;
99
95
  }
100
96
 
101
97
  END
98
+
99
+ if %*ENV<EXERCISM> {
100
+ $module = 'Example';
101
+ if (my $c-data-file =
102
+ "$dir/../../problem-specifications/exercises/{$dir.IO.resolve.basename}/canonical-data.json"
103
+ .IO.resolve) ~~ :f
104
+ {
105
+ is-deeply $c-data, EVAL('from-json $c-data-file.slurp'), 'canonical-data';
106
+ }
107
+ else {
108
+ flunk 'canonical-data';
109
+ }
110
+ }
111
+ else {
112
+ skip;
113
+ }
102
114
  }
@@ -11,7 +11,7 @@ Trinary numbers contain three symbols: 0, 1, and 2.
11
11
  The last place in a trinary number is the 1's place. The second to last
12
12
  is the 3's place, the third to last is the 9's place, etc.
13
13
 
14
- ```bash
14
+ ```shell
15
15
  # "102012"
16
16
  1 0 2 0 1 2 # the number
17
17
  1*3^5 + 0*3^4 + 2*3^3 + 0*3^2 + 1*3^1 + 2*3^0 # the value
@@ -4,14 +4,13 @@ Given a phrase, count the occurrences of each word in that phrase.
4
4
 
5
5
  For example for the input `"olly olly in come free"`
6
6
 
7
- ```plain
7
+ ```text
8
8
  olly: 2
9
9
  in: 1
10
10
  come: 1
11
11
  free: 1
12
12
  ```
13
13
 
14
-
15
14
  ## Resources
16
15
 
17
16
  Remember to check out the Perl 6 [documentation](https://docs.perl6.org/) and
@@ -4,10 +4,12 @@ use Test;
4
4
  use lib my $dir = $?FILE.IO.dirname;
5
5
  use JSON::Fast;
6
6
 
7
- my $exercise = 'WordCount';
8
- my $version = v1;
9
- my $module = %*ENV<EXERCISM> ?? 'Example' !! $exercise;
10
- plan 12;
7
+ my Str:D $exercise := 'WordCount';
8
+ my Version:D $version = v1;
9
+ my Str $module //= $exercise;
10
+ INIT {
11
+ plan 12;
12
+ }
11
13
 
12
14
  use-ok $module or bail-out;
13
15
  require ::($module);
@@ -24,12 +26,6 @@ require ::($module) <&count-words>;
24
26
  my $c-data;
25
27
  is-deeply (% = .<input>.&count-words), |.<expected description> for @($c-data<cases>);
26
28
 
27
- if %*ENV<EXERCISM> {
28
- if (my $c-data-file = "$dir/../../problem-specifications/exercises/{$dir.IO.resolve.basename}/canonical-data.json".IO.resolve) ~~ :f {
29
- is-deeply $c-data, EVAL('use JSON::Fast; from-json($c-data-file.slurp);'), 'canonical-data';
30
- } else { flunk 'canonical-data' }
31
- } else { skip }
32
-
33
29
  done-testing;
34
30
 
35
31
  INIT {
@@ -153,4 +149,20 @@ $c-data := from-json q:to/END/;
153
149
  }
154
150
 
155
151
  END
152
+
153
+ if %*ENV<EXERCISM> {
154
+ $module = 'Example';
155
+ if (my $c-data-file =
156
+ "$dir/../../problem-specifications/exercises/{$dir.IO.resolve.basename}/canonical-data.json"
157
+ .IO.resolve) ~~ :f
158
+ {
159
+ is-deeply $c-data, EVAL('from-json $c-data-file.slurp'), 'canonical-data';
160
+ }
161
+ else {
162
+ flunk 'canonical-data';
163
+ }
164
+ }
165
+ else {
166
+ skip;
167
+ }
156
168
  }
@@ -2,7 +2,6 @@
2
2
 
3
3
  Parse and evaluate simple math word problems returning the answer as an integer.
4
4
 
5
-
6
5
  ## Iteration 1 — Addition
7
6
 
8
7
  Add two numbers together.
@@ -13,7 +12,6 @@ Evaluates to 18.
13
12
 
14
13
  Handle large numbers and negative numbers.
15
14
 
16
-
17
15
  ## Iteration 2 — Subtraction, Multiplication and Division
18
16
 
19
17
  Now, perform the other three operations.
@@ -30,7 +28,6 @@ Now, perform the other three operations.
30
28
 
31
29
  5
32
30
 
33
-
34
31
  ## Iteration 3 — Multiple Operations
35
32
 
36
33
  Handle a set of operations, in sequence.
@@ -46,7 +43,6 @@ left-to-right, _ignoring the typical order of operations._
46
43
 
47
44
  15 (i.e. not 9)
48
45
 
49
-
50
46
  ## Bonus — Exponentials
51
47
 
52
48
  If you'd like, handle exponentials.
@@ -55,7 +51,6 @@ If you'd like, handle exponentials.
55
51
 
56
52
  32
57
53
 
58
-
59
54
  ## Resources
60
55
 
61
56
  Remember to check out the Perl 6 [documentation](https://docs.perl6.org/) and
@@ -4,10 +4,12 @@ use Test;
4
4
  use lib my $dir = $?FILE.IO.dirname;
5
5
  use JSON::Fast;
6
6
 
7
- my $exercise = 'Wordy';
8
- my $version = v1;
9
- my $module = %*ENV<EXERCISM> ?? 'Example' !! $exercise;
10
- plan 18;
7
+ my Str:D $exercise := 'Wordy';
8
+ my Version:D $version = v1;
9
+ my Str $module //= $exercise;
10
+ INIT {
11
+ plan 18;
12
+ }
11
13
 
12
14
  use-ok $module or bail-out;
13
15
  require ::($module);
@@ -30,12 +32,6 @@ for @($c-data<cases>) {
30
32
  }
31
33
  }
32
34
 
33
- if %*ENV<EXERCISM> {
34
- if (my $c-data-file = "$dir/../../problem-specifications/exercises/{$dir.IO.resolve.basename}/canonical-data.json".IO.resolve) ~~ :f {
35
- is-deeply $c-data, EVAL('use JSON::Fast; from-json($c-data-file.slurp);'), 'canonical-data';
36
- } else { flunk 'canonical-data' }
37
- } else { skip }
38
-
39
35
  done-testing;
40
36
 
41
37
  INIT {
@@ -150,4 +146,20 @@ $c-data := from-json q:to/END/;
150
146
  }
151
147
 
152
148
  END
149
+
150
+ if %*ENV<EXERCISM> {
151
+ $module = 'Example';
152
+ if (my $c-data-file =
153
+ "$dir/../../problem-specifications/exercises/{$dir.IO.resolve.basename}/canonical-data.json"
154
+ .IO.resolve) ~~ :f
155
+ {
156
+ is-deeply $c-data, EVAL('from-json $c-data-file.slurp'), 'canonical-data';
157
+ }
158
+ else {
159
+ flunk 'canonical-data';
160
+ }
161
+ }
162
+ else {
163
+ skip;
164
+ }
153
165
  }
@@ -5,10 +5,12 @@ use lib #`{{#cdata}}my $dir = #`{{/cdata}}$?FILE.IO.dirname;#`{{#lib_comment}} #
5
5
  use JSON::Fast;#`{{/cdata}}#`{{#modules}}
6
6
  use #`{{&use}};#`{{/modules}}
7
7
 
8
- my $exercise#`{{#exercise}} = '#`{{&exercise}}'#`{{/exercise}};#`{{#exercise_comment}} #`[#`{{&exercise_comment}}]#`{{/exercise_comment}}
9
- my $version#`{{#version}} = v#`{{&version}}#`{{/version}};#`{{#version_comment}} #`[#`{{&version_comment}}]#`{{/version_comment}}
10
- my $module = %*ENV<EXERCISM> ?? 'Example' !! $exercise;#`{{#module_comment}} #`[#`{{&module_comment}}]#`{{/module_comment}}#`{{#plan}}
11
- plan #`{{&plan}};#`{{#plan_comment}} #`[#`{{&plan_comment}}]#`{{/plan_comment}}#`{{/plan}}
8
+ my Str:D $exercise#`{{#exercise}} := '#`{{&exercise}}'#`{{/exercise}};#`{{#exercise_comment}} #`[#`{{&exercise_comment}}]#`{{/exercise_comment}}
9
+ my Version:D $version#`{{#version}} = v#`{{&version}}#`{{/version}};#`{{#version_comment}} #`[#`{{&version_comment}}]#`{{/version_comment}}
10
+ my Str $module //= $exercise;#`{{#module_comment}} #`[#`{{&module_comment}}]#`{{/module_comment}}#`{{#plan}}
11
+ #`{{#cdata}}INIT {
12
+ #`{{/cdata}}plan #`{{&plan}};#`{{#plan_comment}} #`[#`{{&plan_comment}}]#`{{/plan_comment}}#`{{#cdata}}
13
+ }#`{{/cdata}}#`{{/plan}}
12
14
  #`{{#use_test_comment}}
13
15
 
14
16
  #`[#`{{&use_test_comment}}]#`{{/use_test_comment}}
@@ -34,24 +36,33 @@ subtest 'Class methods', {
34
36
  #`{{/methods}}#`{{#cdata}}
35
37
  my $c-data;#`{{/cdata}}
36
38
  #`{{&tests}}
37
- #`{{#cdata}}#`{{#cdata_test_comment}}
38
- #`[#`{{&cdata_test_comment}}]#`{{/cdata_test_comment}}
39
- if %*ENV<EXERCISM> {
40
- if (my $c-data-file = "$dir/../../problem-specifications/exercises/{$dir.IO.resolve.basename}/canonical-data.json".IO.resolve) ~~ :f {
41
- is-deeply $c-data, EVAL('use JSON::Fast; from-json($c-data-file.slurp);'), 'canonical-data';
42
- } else { flunk 'canonical-data' }
43
- } else { skip }
44
- #`{{/cdata}}
45
39
 
46
40
  done-testing;#`{{#done_testing_comment}} #`[#`{{&done_testing_comment}}]#`{{/done_testing_comment}}#`{{#after_done_testing}}
47
41
 
48
- #`{{&after_done_testing}}#`{{/after_done_testing}}#`{{#cdata}}
42
+ #`{{&after_done_testing}}#`{{/after_done_testing}}
49
43
  #`{{#INIT_comment}}
50
44
 
51
45
  #`[#`{{&INIT_comment}}]#`{{/INIT_comment}}
52
46
  INIT {
53
- $c-data := from-json q:to/END/;
47
+ #`{{#cdata}}$c-data := from-json q:to/END/;
54
48
 
55
49
  #`{{&json}}
56
50
  END
57
- }#`{{/cdata}}
51
+
52
+ #`{{/cdata}} if %*ENV<EXERCISM> {#`{{#exercism_comment}}
53
+ #`[#`{{&exercism_comment}}]#`{{/exercism_comment}}
54
+ $module = 'Example';#`{{#cdata}}
55
+ if (my $c-data-file =
56
+ "$dir/../../problem-specifications/exercises/{$dir.IO.resolve.basename}/canonical-data.json"
57
+ .IO.resolve) ~~ :f
58
+ {
59
+ is-deeply $c-data, EVAL('from-json $c-data-file.slurp'), 'canonical-data';
60
+ }
61
+ else {
62
+ flunk 'canonical-data';
63
+ }
64
+ }
65
+ else {
66
+ skip;#`{{/cdata}}
67
+ }
68
+ }
@@ -834,6 +834,16 @@
834
834
  "mathematics"
835
835
  ]
836
836
  },
837
+ {
838
+ "uuid": "8c89f739-05fb-7b80-b5f9-6ad079c750ba8302be8",
839
+ "slug": "two-bucket",
840
+ "difficulty": 5,
841
+ "topics": [
842
+ "algorithms",
843
+ "loops",
844
+ "conditionals"
845
+ ]
846
+ },
837
847
  {
838
848
  "uuid": "e7351e8e-d3ff-4621-b818-cd55cf05bffd",
839
849
  "slug": "accumulate",