trackler 2.2.1.43 → 2.2.1.44

Sign up to get free protection for your applications and to get access to all the features.
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",