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
@@ -199,7 +199,14 @@
199
199
  "core": true,
200
200
  "difficulty": 4,
201
201
  "slug": "matrix",
202
- "topics": null,
202
+ "topics": [
203
+ "loops",
204
+ "arrays",
205
+ "pattern_matching",
206
+ "integers",
207
+ "strings",
208
+ "type_conversion"
209
+ ],
203
210
  "unlocked_by": null,
204
211
  "uuid": "c1d4e0b4-6a0f-4be9-8222-345966621f53"
205
212
  },
@@ -229,7 +236,13 @@
229
236
  "core": false,
230
237
  "difficulty": 4,
231
238
  "slug": "sieve",
232
- "topics": null,
239
+ "topics": [
240
+ "loops",
241
+ "lists",
242
+ "integers",
243
+ "algorithms",
244
+ "mathematics"
245
+ ],
233
246
  "unlocked_by": "difference-of-squares",
234
247
  "uuid": "6791d01f-bae4-4b63-ae76-86529ac49e36"
235
248
  },
@@ -274,7 +287,13 @@
274
287
  "core": false,
275
288
  "difficulty": 4,
276
289
  "slug": "collatz-conjecture",
277
- "topics": null,
290
+ "topics": [
291
+ "exception_handling",
292
+ "recursion",
293
+ "conditionals",
294
+ "integers",
295
+ "mathematics"
296
+ ],
278
297
  "unlocked_by": "triangle",
279
298
  "uuid": "1500d39a-c9d9-4d3a-9e77-fdc1837fc6ad"
280
299
  },
@@ -282,7 +301,13 @@
282
301
  "core": false,
283
302
  "difficulty": 4,
284
303
  "slug": "nth-prime",
285
- "topics": null,
304
+ "topics": [
305
+ "arrays",
306
+ "exception_handling",
307
+ "lists",
308
+ "loops",
309
+ "integers"
310
+ ],
286
311
  "unlocked_by": "triangle",
287
312
  "uuid": "2c69db99-648d-4bd7-8012-1fbdeff6ca0a"
288
313
  },
@@ -399,7 +424,14 @@
399
424
  "core": false,
400
425
  "difficulty": 5,
401
426
  "slug": "prime-factors",
402
- "topics": null,
427
+ "topics": [
428
+ "arrays",
429
+ "conditionals",
430
+ "integers",
431
+ "lists",
432
+ "loops",
433
+ "mathematics"
434
+ ],
403
435
  "unlocked_by": "triangle",
404
436
  "uuid": "599c08ec-7338-46ed-99f8-a76f78f724e6"
405
437
  },
@@ -796,7 +828,11 @@
796
828
  "core": false,
797
829
  "difficulty": 8,
798
830
  "slug": "complex-numbers",
799
- "topics": null,
831
+ "topics": [
832
+ "mathematics",
833
+ "floating_point_numbers",
834
+ "classes"
835
+ ],
800
836
  "unlocked_by": "triangle",
801
837
  "uuid": "52d11278-0d65-4b5b-b387-1374fced3243"
802
838
  },
@@ -1,5 +1,9 @@
1
- public class LargestSeriesProductCalculator {
2
-
3
-
1
+ class LargestSeriesProductCalculator {
2
+ LargestSeriesProductCalculator(String inputNumber) {
3
+ throw new UnsupportedOperationException ("Delete this statement and write your own implementation.");
4
+ }
4
5
 
6
+ long calculateLargestProductForSeriesLength(int numberOfDigits) {
7
+ throw new UnsupportedOperationException ("Delete this statement and write your own implementation.");
8
+ }
5
9
  }
@@ -0,0 +1,23 @@
1
+
2
+ class Matrix {
3
+
4
+ Matrix(String matrixAsString) {
5
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
6
+ }
7
+
8
+ int[] getRow(int rowNumber) {
9
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
10
+ }
11
+
12
+ int[] getColumn(int columnNumber) {
13
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
14
+ }
15
+
16
+ int getRowsCount() {
17
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
18
+ }
19
+
20
+ int getColumnsCount() {
21
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
22
+ }
23
+ }
@@ -2,8 +2,7 @@
2
2
  "language": "Julia",
3
3
  "active": true,
4
4
  "blurb": "Julia is an open-source high-level, dynamic programming language whose sweet spot is technical and scientific computing. It is convenient for day-to-day work and fast enough for high performance computing.",
5
- "exercises": [
6
- {
5
+ "exercises": [{
7
6
  "uuid": "a668410d-41aa-4710-a68f-54521da6486d",
8
7
  "slug": "hello-world",
9
8
  "core": true,
@@ -358,6 +357,16 @@
358
357
  "mathematics",
359
358
  "iterators"
360
359
  ]
360
+ },
361
+ {
362
+ "uuid": "2ed6e171-04e1-b080-f383-a801b2564b3e0f4f1ee",
363
+ "slug": "grains",
364
+ "core": false,
365
+ "unlocked_by": "difference-of-squares",
366
+ "difficulty": 1,
367
+ "topics": [
368
+ "exceptions"
369
+ ]
361
370
  }
362
371
  ],
363
372
  "foregone": [
@@ -0,0 +1,33 @@
1
+ # Grains
2
+
3
+ Calculate the number of grains of wheat on a chessboard given that the number
4
+ on each square doubles.
5
+
6
+ There once was a wise servant who saved the life of a prince. The king
7
+ promised to pay whatever the servant could dream up. Knowing that the
8
+ king loved chess, the servant told the king he would like to have grains
9
+ of wheat. One grain on the first square of a chess board. Two grains on
10
+ the next. Four on the third, and so on.
11
+
12
+ There are 64 squares on a chessboard.
13
+
14
+ Write code that shows:
15
+ - how many grains were on each square (`on_square`)
16
+ - the total number of grains (`total_after`)
17
+
18
+ ## For bonus points
19
+
20
+ Did you get the tests passing and the code clean? If you want to, these
21
+ are some additional things you could try:
22
+
23
+ - Optimize for speed.
24
+ - Optimize for readability.
25
+
26
+ Then please share your thoughts in a comment on the submission. Did this
27
+ experiment make the code better? Worse? Did you learn anything from it?
28
+
29
+ ## Source
30
+ JavaRanch Cattle Drive, exercise 6 [http://www.javaranch.com/grains.jsp](http://www.javaranch.com/grains.jsp)
31
+
32
+ ## Submitting Incomplete Solutions
33
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,23 @@
1
+ """Calculate the number of grains on square `square`."""
2
+ function on_square(square)
3
+ check_square_input(square)
4
+ 2 ^ (square - 1)
5
+ end
6
+
7
+ """Calculate the total number of grains after square `square`."""
8
+ function total_after(square)
9
+ check_square_input(square)
10
+ sum(map(on_square, 1:square))
11
+ end
12
+
13
+ """Validate an arbitrary square."""
14
+ function check_square_input(square)
15
+ square == 0 && throw(DomainError(square, "Square input of zero is invalid."))
16
+ square < 0 && throw(DomainError(square, "Negative square input is invalid."))
17
+ square > 64 && throw(DomainError(square, "Square input greater than 64 is invalid."))
18
+ end
19
+
20
+ if VERSION < v"0.7" # backwards compatibility
21
+ Base.DomainError(val) = DomainError()
22
+ Base.DomainError(val, msg) = DomainError()
23
+ end
@@ -0,0 +1,9 @@
1
+ """Calculate the number of grains on square `square`."""
2
+ function on_square(square)
3
+
4
+ end
5
+
6
+ """Calculate the total number of grains after square `square`."""
7
+ function total_after(square)
8
+
9
+ end
@@ -0,0 +1,27 @@
1
+ using Base.Test
2
+
3
+ include("grains.jl")
4
+
5
+ @testset "On squares" begin
6
+ @testset "On square $s" for s = UInt64(1):64
7
+ @test on_square(s) == 2^(s-1)
8
+ @test total_after(s) == 2^s - 1
9
+ end
10
+ end
11
+
12
+ @testset "Invalid values" begin
13
+ @testset "Zero" begin
14
+ @test_throws DomainError on_square(0)
15
+ @test_throws DomainError total_after(0)
16
+ end
17
+
18
+ @testset "Negative" begin
19
+ @test_throws DomainError on_square(-1)
20
+ @test_throws DomainError total_after(-1)
21
+ end
22
+
23
+ @testset "Greater than 64" begin
24
+ @test_throws DomainError on_square(65)
25
+ @test_throws DomainError total_after(65)
26
+ end
27
+ end
data/tracks/lua/README.md CHANGED
@@ -56,7 +56,7 @@ Pleases see the [Useful Lua Resources][8] page.
56
56
  ## Lua icon
57
57
  The Lua icon is inspired by the [Lua logo][9], which was designed by Alexandre Nakonechnyj.
58
58
 
59
- [1]: http://exercism.io/languages/lua/installing
59
+ [1]: http://exercism.io/languages/lua/installation
60
60
  [2]: https://help.github.com/articles/fork-a-repo/
61
61
  [3]: https://help.github.com/articles/creating-a-pull-request/
62
62
  [4]: https://github.com/exercism/lua/tree/master/exercises/bob
@@ -1,15 +1,10 @@
1
1
  # Octal
2
2
 
3
- Convert an octal number, represented as a string (e.g. '1735263'), to its
4
- decimal equivalent using first principles (i.e. no, you may not use built-in or
5
- external libraries to accomplish the conversion).
6
-
7
- Implement octal to decimal conversion. Given an octal input
8
- string, your program should produce a decimal output.
3
+ Convert an octal number, represented as a string of ascii values (e.g. "1735263"), to its
4
+ decimal equivalent using first principles. For instance, given the input "10", your program
5
+ should return the integer 8.
9
6
 
10
7
  ## Note
11
- - Implement the conversion yourself.
12
- Do not use something else to perform the conversion for you.
13
8
  - Treat invalid input as octal 0.
14
9
 
15
10
  ## About Octal (Base-8)
@@ -5,22 +5,16 @@ Detect palindrome products in a given range.
5
5
  A palindromic number is a number that remains the same when its digits are
6
6
  reversed. For example, `121` is a palindromic number but `112` is not.
7
7
 
8
- Given the definition of a palindromic number, we define a palindrome _product_
9
- to be the product `c`, such that `a * b = c`, where `c` is a palindromic number and
10
- `a` and `b` are integers (possibly, but _not_ necessarily palindromic numbers).
8
+ Given a range of numbers, find the largest and smallest palindromes which
9
+ are products of numbers within that range.
11
10
 
12
- For example, the palindromic number 9009 can be written as the palindrome
13
- product: `91 * 99 = 9009`.
11
+ Your solution should return the largest and smallest palindromes, along with the
12
+ factors of each within the range. If the largest or smallest palindrome has more
13
+ than one pair of factors within the range, then return all the pairs.
14
14
 
15
- It's possible (and indeed common) for a palindrome product to be the product
16
- of multiple combinations of numbers. For example, the palindrome product `9` has
17
- the factors `(1, 9)` and `(3, 3)`.
18
-
19
- Write a program that given a range of integers, returns the smallest and largest
20
- palindromic product of factors within that range, along with all the factors in the range for that product.
21
-
22
- Not all ranges of factors can produce a Palindrome, and ranges must have their max at least as large
23
- as their min. This exercise uses the OCaml `Result.t` type to specify errors.
15
+ Not all ranges of factors can produce a Palindrome, and ranges must have their
16
+ max at least as large as their min. This exercise uses the OCaml `Result.t`
17
+ type to specify errors.
24
18
 
25
19
  ## Example 1
26
20
 
@@ -1,11 +1,15 @@
1
1
  ---
2
2
  sudo: false
3
- services:
4
- - docker
5
3
  before_script:
6
4
  - git clone https://github.com/exercism/problem-specifications.git
7
5
  - bin/fetch-configlet
8
6
  - docker pull rakudo-star:latest
9
7
  script:
10
8
  - bin/configlet lint .
11
- - docker run -e EXERCISM=1 -t -v $PWD:/exercism rakudo-star prove /exercism -re perl6
9
+ - docker run
10
+ --env EXERCISM=1
11
+ --volume $PWD:/exercism
12
+ rakudo-star prove /exercism
13
+ --exec perl6
14
+ --recurse
15
+ --jobs 2
@@ -6,6 +6,10 @@ use YAMLish;
6
6
  my $base-dir = $?FILE.IO.resolve.parent.parent;
7
7
  my @exercises;
8
8
 
9
+ if $base-dir.child('problem-specifications') !~~ :d {
10
+ warn 'problem-specifications directory not found; some exercises may generate incorrectly.';
11
+ }
12
+
9
13
  if @*ARGS {
10
14
  if @*ARGS[0] eq '--all' {
11
15
  push @exercises, .basename for $base-dir.child('exercises').dir;
@@ -59,4 +63,4 @@ for @exercises -> $exercise {
59
63
  }
60
64
 
61
65
  if @dir-not-found {warn 'exercise directory does not exist for: ' ~ join ' ', @dir-not-found}
62
- if @yaml-not-found {warn 'example.yaml not found for: ' ~ join ' ', @yaml-not-found}
66
+ if @yaml-not-found {note 'example.yaml not found for: ' ~ join ' ', @yaml-not-found}
@@ -25,9 +25,6 @@ Keep your hands off that collect/map/fmap/whatchamacallit functionality
25
25
  provided by your standard library!
26
26
  Solve this one yourself using other basic tools instead.
27
27
 
28
- Lisp specific: it's perfectly fine to use `MAPCAR` or the equivalent,
29
- as this is idiomatic Lisp, not a library function.
30
-
31
28
  ## Resources
32
29
 
33
30
  Remember to check out the Perl 6 [documentation](https://docs.perl6.org/) and
@@ -3,9 +3,9 @@ use v6;
3
3
  use Test;
4
4
  use lib $?FILE.IO.dirname;
5
5
 
6
- my $exercise = 'Accumulate';
7
- my $version = v1;
8
- my $module = %*ENV<EXERCISM> ?? 'Example' !! $exercise;
6
+ my Str:D $exercise := 'Accumulate';
7
+ my Version:D $version = v1;
8
+ my Str $module //= $exercise;
9
9
  plan 7;
10
10
 
11
11
  use-ok $module or bail-out;
@@ -40,3 +40,9 @@ is-deeply accumulate(['the', 'quick', 'brown', 'fox'], sub { @_[0].flip }),
40
40
  'reverse strings';
41
41
 
42
42
  done-testing;
43
+
44
+ INIT {
45
+ if %*ENV<EXERCISM> {
46
+ $module = 'Example';
47
+ }
48
+ }
@@ -6,6 +6,7 @@ Implement general base conversion. Given a number in base **a**,
6
6
  represented as a sequence of digits, convert it to base **b**.
7
7
 
8
8
  ## Note
9
+
9
10
  - Try to implement the conversion yourself.
10
11
  Do not use something else to perform the conversion for you.
11
12
 
@@ -28,7 +29,6 @@ The number 1120, *in base 3*, means:
28
29
 
29
30
  I think you got the idea!
30
31
 
31
-
32
32
  *Yes. Those three numbers above are exactly the same. Congratulations!*
33
33
 
34
34
  ## Resources
@@ -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 = 'AllYourBase';
8
- my $version = v2;
9
- my $module = %*ENV<EXERCISM> ?? 'Example' !! $exercise;
10
- plan 23;
7
+ my Str:D $exercise := 'AllYourBase';
8
+ my Version:D $version = v2;
9
+ my Str $module //= $exercise;
10
+ INIT {
11
+ plan 23;
12
+ }
11
13
 
12
14
  use-ok $module or bail-out;
13
15
  require ::($module);
@@ -41,15 +43,9 @@ for @($c-data<cases>) -> $case {
41
43
  is-deeply call-convert-base, $expected, $case<description>
42
44
  }
43
45
 
44
- sub call-convert-base { &::('convert-base')(|$case<input_base input_digits output_base>) }
46
+ sub call-convert-base { convert-base(|$case<input_base input_digits output_base>) }
45
47
  }
46
48
 
47
- if %*ENV<EXERCISM> {
48
- if (my $c-data-file = "$dir/../../problem-specifications/exercises/{$dir.IO.resolve.basename}/canonical-data.json".IO.resolve) ~~ :f {
49
- is-deeply $c-data, EVAL('use JSON::Fast; from-json($c-data-file.slurp);'), 'canonical-data';
50
- } else { flunk 'canonical-data' }
51
- } else { skip }
52
-
53
49
  done-testing;
54
50
 
55
51
  INIT {
@@ -251,4 +247,20 @@ $c-data := from-json q:to/END/;
251
247
  }
252
248
 
253
249
  END
250
+
251
+ if %*ENV<EXERCISM> {
252
+ $module = 'Example';
253
+ if (my $c-data-file =
254
+ "$dir/../../problem-specifications/exercises/{$dir.IO.resolve.basename}/canonical-data.json"
255
+ .IO.resolve) ~~ :f
256
+ {
257
+ is-deeply $c-data, EVAL('from-json $c-data-file.slurp'), 'canonical-data';
258
+ }
259
+ else {
260
+ flunk 'canonical-data';
261
+ }
262
+ }
263
+ else {
264
+ skip;
265
+ }
254
266
  }