trackler 2.2.0.0 → 2.2.0.1

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 (206) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/CONTRIBUTING.md +1 -1
  4. data/tracks/bash/.travis.yml +1 -1
  5. data/tracks/bash/config.json +30 -3
  6. data/tracks/c/README.md +1 -1
  7. data/tracks/c/config.json +131 -39
  8. data/tracks/ceylon/README.md +6 -6
  9. data/tracks/ceylon/config.json +21 -3
  10. data/tracks/chapel/.travis.yml +1 -1
  11. data/tracks/clojurescript/.travis.yml +1 -1
  12. data/tracks/clojurescript/README.md +6 -6
  13. data/tracks/clojurescript/exercises/.keep +0 -0
  14. data/tracks/coffeescript/.travis.yml +1 -1
  15. data/tracks/coldfusion/.travis.yml +1 -1
  16. data/tracks/coq/.travis.yml +1 -1
  17. data/tracks/cpp/CMakeLists.txt +1 -0
  18. data/tracks/cpp/README.md +1 -1
  19. data/tracks/cpp/config.json +8 -0
  20. data/tracks/cpp/exercises/atbash-cipher/CMakeLists.txt +52 -0
  21. data/tracks/cpp/exercises/atbash-cipher/atbash_cipher_test.cpp +68 -0
  22. data/tracks/cpp/exercises/atbash-cipher/example.cpp +54 -0
  23. data/tracks/cpp/exercises/atbash-cipher/example.h +13 -0
  24. data/tracks/csharp/config.json +315 -6
  25. data/tracks/d/.travis.yml +1 -1
  26. data/tracks/dart/README.md +2 -2
  27. data/tracks/dart/config.json +21 -3
  28. data/tracks/delphi/README.md +1 -1
  29. data/tracks/delphi/config.json +83 -1
  30. data/tracks/ecmascript/config.json +10 -0
  31. data/tracks/ecmascript/exercises/accumulate/accumulate.spec.js +3 -9
  32. data/tracks/ecmascript/exercises/acronym/acronym.spec.js +2 -2
  33. data/tracks/ecmascript/exercises/all-your-base/all-your-base.spec.js +131 -133
  34. data/tracks/ecmascript/exercises/all-your-base/example.js +1 -3
  35. data/tracks/ecmascript/exercises/allergies/allergies.spec.js +8 -10
  36. data/tracks/ecmascript/exercises/allergies/example.js +3 -5
  37. data/tracks/ecmascript/exercises/alphametics/alphametics.spec.js +61 -63
  38. data/tracks/ecmascript/exercises/alphametics/example.js +99 -99
  39. data/tracks/ecmascript/exercises/anagram/anagram.spec.js +35 -37
  40. data/tracks/ecmascript/exercises/anagram/example.js +1 -3
  41. data/tracks/ecmascript/exercises/atbash-cipher/atbash-cipher.spec.js +1 -3
  42. data/tracks/ecmascript/exercises/atbash-cipher/example.js +3 -3
  43. data/tracks/ecmascript/exercises/beer-song/beer-song.spec.js +0 -2
  44. data/tracks/ecmascript/exercises/beer-song/example.js +9 -9
  45. data/tracks/ecmascript/exercises/binary/binary.spec.js +1 -2
  46. data/tracks/ecmascript/exercises/binary/example.js +3 -3
  47. data/tracks/ecmascript/exercises/binary-search/binary-search.spec.js +1 -3
  48. data/tracks/ecmascript/exercises/binary-search-tree/binary-search-tree.spec.js +13 -15
  49. data/tracks/ecmascript/exercises/binary-search-tree/example.js +2 -2
  50. data/tracks/ecmascript/exercises/bob/bob.spec.js +1 -3
  51. data/tracks/ecmascript/exercises/bob/example.js +3 -3
  52. data/tracks/ecmascript/exercises/bracket-push/example.js +2 -2
  53. data/tracks/ecmascript/exercises/circular-buffer/circular-buffer.spec.js +10 -12
  54. data/tracks/ecmascript/exercises/circular-buffer/example.js +12 -11
  55. data/tracks/ecmascript/exercises/clock/clock.spec.js +0 -8
  56. data/tracks/ecmascript/exercises/clock/example.js +11 -11
  57. data/tracks/ecmascript/exercises/connect/connect.spec.js +75 -77
  58. data/tracks/ecmascript/exercises/connect/example.js +27 -29
  59. data/tracks/ecmascript/exercises/crypto-square/crypto-square.spec.js +11 -11
  60. data/tracks/ecmascript/exercises/crypto-square/example.js +11 -10
  61. data/tracks/ecmascript/exercises/custom-set/custom-set.spec.js +2 -4
  62. data/tracks/ecmascript/exercises/custom-set/example.js +1 -1
  63. data/tracks/ecmascript/exercises/diamond/diamond.spec.js +20 -21
  64. data/tracks/ecmascript/exercises/diamond/example.js +12 -13
  65. data/tracks/ecmascript/exercises/difference-of-squares/difference-of-squares.spec.js +0 -5
  66. data/tracks/ecmascript/exercises/diffie-hellman/diffie-hellman.spec.js +7 -28
  67. data/tracks/ecmascript/exercises/etl/etl.spec.js +36 -18
  68. data/tracks/ecmascript/exercises/etl/example.js +3 -3
  69. data/tracks/ecmascript/exercises/flatten-array/example.js +1 -1
  70. data/tracks/ecmascript/exercises/flatten-array/flatten-array.spec.js +2 -3
  71. data/tracks/ecmascript/exercises/food-chain/example.js +12 -12
  72. data/tracks/ecmascript/exercises/food-chain/food-chain.spec.js +0 -1
  73. data/tracks/ecmascript/exercises/gigasecond/example.js +1 -1
  74. data/tracks/ecmascript/exercises/gigasecond/gigasecond.spec.js +0 -1
  75. data/tracks/ecmascript/exercises/grade-school/grade-school.spec.js +18 -19
  76. data/tracks/ecmascript/exercises/grains/grains.spec.js +0 -1
  77. data/tracks/ecmascript/exercises/hamming/example.js +3 -3
  78. data/tracks/ecmascript/exercises/hamming/hamming.spec.js +5 -6
  79. data/tracks/ecmascript/exercises/hello-world/example.js +1 -1
  80. data/tracks/ecmascript/exercises/hello-world/hello-world.spec.js +1 -1
  81. data/tracks/ecmascript/exercises/hexadecimal/example.js +2 -2
  82. data/tracks/ecmascript/exercises/hexadecimal/hexadecimal.spec.js +9 -11
  83. data/tracks/ecmascript/exercises/isogram/isogram.spec.js +22 -23
  84. data/tracks/ecmascript/exercises/kindergarten-garden/example.js +7 -7
  85. data/tracks/ecmascript/exercises/kindergarten-garden/kindergarten-garden.spec.js +0 -5
  86. data/tracks/ecmascript/exercises/largest-series-product/example.js +4 -8
  87. data/tracks/ecmascript/exercises/largest-series-product/largest-series-product.spec.js +5 -7
  88. data/tracks/ecmascript/exercises/leap/leap.spec.js +4 -6
  89. data/tracks/ecmascript/exercises/linked-list/example.js +2 -2
  90. data/tracks/ecmascript/exercises/list-ops/example.js +19 -19
  91. data/tracks/ecmascript/exercises/list-ops/list-ops.spec.js +2 -18
  92. data/tracks/ecmascript/exercises/luhn/example.js +1 -1
  93. data/tracks/ecmascript/exercises/luhn/luhn.spec.js +1 -3
  94. data/tracks/ecmascript/exercises/matrix/example.js +2 -4
  95. data/tracks/ecmascript/exercises/matrix/matrix.spec.js +0 -2
  96. data/tracks/ecmascript/exercises/meetup/example.js +12 -15
  97. data/tracks/ecmascript/exercises/meetup/meetup.spec.js +0 -2
  98. data/tracks/ecmascript/exercises/minesweeper/example.js +60 -0
  99. data/tracks/ecmascript/exercises/minesweeper/minesweeper.spec.js +174 -0
  100. data/tracks/ecmascript/exercises/minesweeper/package.json +69 -0
  101. data/tracks/ecmascript/exercises/nth-prime/example.js +3 -2
  102. data/tracks/ecmascript/exercises/nth-prime/nth-prime.spec.js +0 -1
  103. data/tracks/ecmascript/exercises/ocr-numbers/example.js +3 -3
  104. data/tracks/ecmascript/exercises/ocr-numbers/ocr-numbers.spec.js +16 -18
  105. data/tracks/ecmascript/exercises/octal/example.js +1 -1
  106. data/tracks/ecmascript/exercises/octal/octal.spec.js +0 -2
  107. data/tracks/ecmascript/exercises/palindrome-products/example.js +14 -11
  108. data/tracks/ecmascript/exercises/palindrome-products/palindrome-products.spec.js +15 -18
  109. data/tracks/ecmascript/exercises/pangram/example.js +6 -5
  110. data/tracks/ecmascript/exercises/pangram/pangram.spec.js +10 -12
  111. data/tracks/ecmascript/exercises/pascals-triangle/example.js +2 -2
  112. data/tracks/ecmascript/exercises/pascals-triangle/pascals-triangle.spec.js +6 -8
  113. data/tracks/ecmascript/exercises/perfect-numbers/example.js +3 -5
  114. data/tracks/ecmascript/exercises/perfect-numbers/perfect-numbers.spec.js +0 -10
  115. data/tracks/ecmascript/exercises/phone-number/example.js +2 -2
  116. data/tracks/ecmascript/exercises/phone-number/phone-number.spec.js +0 -2
  117. data/tracks/ecmascript/exercises/pig-latin/example.js +4 -4
  118. data/tracks/ecmascript/exercises/pig-latin/pig-latin.spec.js +0 -1
  119. data/tracks/ecmascript/exercises/prime-factors/example.js +2 -2
  120. data/tracks/ecmascript/exercises/prime-factors/prime-factors.spec.js +0 -2
  121. data/tracks/ecmascript/exercises/pythagorean-triplet/pythagorean-triplet.spec.js +3 -11
  122. data/tracks/ecmascript/exercises/queen-attack/example.js +17 -17
  123. data/tracks/ecmascript/exercises/queen-attack/queen-attack.spec.js +7 -8
  124. data/tracks/ecmascript/exercises/raindrops/example.js +1 -1
  125. data/tracks/ecmascript/exercises/raindrops/raindrops.spec.js +1 -2
  126. data/tracks/ecmascript/exercises/rna-transcription/example.js +5 -5
  127. data/tracks/ecmascript/exercises/rna-transcription/rna-transcription.spec.js +4 -5
  128. data/tracks/ecmascript/exercises/robot-name/example.js +6 -6
  129. data/tracks/ecmascript/exercises/robot-name/robot-name.spec.js +10 -11
  130. data/tracks/ecmascript/exercises/robot-simulator/example.js +1 -1
  131. data/tracks/ecmascript/exercises/robot-simulator/robot-simulator.spec.js +31 -32
  132. data/tracks/ecmascript/exercises/roman-numerals/example.js +16 -16
  133. data/tracks/ecmascript/exercises/saddle-points/saddle-points.spec.js +3 -3
  134. data/tracks/ecmascript/exercises/say/example.js +25 -25
  135. data/tracks/ecmascript/exercises/say/say.spec.js +2 -3
  136. data/tracks/ecmascript/exercises/scrabble-score/example.js +27 -9
  137. data/tracks/ecmascript/exercises/scrabble-score/scrabble-score.spec.js +6 -7
  138. data/tracks/ecmascript/exercises/secret-handshake/example.js +2 -3
  139. data/tracks/ecmascript/exercises/secret-handshake/secret-handshake.spec.js +3 -5
  140. data/tracks/ecmascript/exercises/series/series.spec.js +1 -3
  141. data/tracks/ecmascript/exercises/sieve/example.js +4 -3
  142. data/tracks/ecmascript/exercises/sieve/sieve.spec.js +0 -2
  143. data/tracks/ecmascript/exercises/simple-cipher/example.js +8 -9
  144. data/tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js +4 -4
  145. data/tracks/ecmascript/exercises/space-age/example.js +1 -1
  146. data/tracks/ecmascript/exercises/space-age/space-age.spec.js +9 -11
  147. data/tracks/ecmascript/exercises/strain/example.js +4 -4
  148. data/tracks/ecmascript/exercises/strain/strain.spec.js +14 -16
  149. data/tracks/ecmascript/exercises/sum-of-multiples/example.js +4 -4
  150. data/tracks/ecmascript/exercises/triangle/triangle.spec.js +2 -4
  151. data/tracks/ecmascript/exercises/trinary/example.js +3 -3
  152. data/tracks/ecmascript/exercises/trinary/trinary.spec.js +0 -2
  153. data/tracks/ecmascript/exercises/two-bucket/example.js +30 -27
  154. data/tracks/ecmascript/exercises/two-bucket/two-bucket.spec.js +4 -8
  155. data/tracks/ecmascript/exercises/word-count/example.js +2 -2
  156. data/tracks/ecmascript/exercises/word-count/word-count.spec.js +2 -3
  157. data/tracks/ecmascript/exercises/wordy/example.js +6 -6
  158. data/tracks/ecmascript/exercises/wordy/wordy.spec.js +2 -4
  159. data/tracks/factor/config.json +15 -6
  160. data/tracks/fortran/.travis.yml +1 -1
  161. data/tracks/fsharp/config.json +312 -10
  162. data/tracks/go/README.md +1 -1
  163. data/tracks/go/config.json +523 -155
  164. data/tracks/haskell/README.md +2 -2
  165. data/tracks/haskell/config.json +256 -7
  166. data/tracks/haxe/.travis.yml +1 -1
  167. data/tracks/haxe/Makefile +2 -2
  168. data/tracks/haxe/config.json +8 -5
  169. data/tracks/java/CONTRIBUTING.md +2 -2
  170. data/tracks/java/config.json +277 -17
  171. data/tracks/java/exercises/rotational-cipher/build.gradle +17 -0
  172. data/tracks/java/exercises/rotational-cipher/src/example/java/RotationalCipher.java +37 -0
  173. data/tracks/java/exercises/rotational-cipher/src/main/java/.keep +0 -0
  174. data/tracks/java/exercises/rotational-cipher/src/test/java/RotationalCipherTest.java +81 -0
  175. data/tracks/java/exercises/settings.gradle +1 -0
  176. data/tracks/java/exercises/twelve-days/src/main/java/TwelveDays.java +4 -0
  177. data/tracks/julia/.travis.yml +1 -1
  178. data/tracks/julia/README.md +1 -1
  179. data/tracks/kotlin/README.md +2 -2
  180. data/tracks/kotlin/exercises/hello-world/TUTORIAL.md +3 -3
  181. data/tracks/lisp/config.json +97 -3
  182. data/tracks/lisp/exercises/pascals-triangle/example.lisp +21 -0
  183. data/tracks/lisp/exercises/pascals-triangle/pascal.lisp +7 -0
  184. data/tracks/lisp/exercises/pascals-triangle/pascals-triangle-test.lisp +34 -0
  185. data/tracks/lua/.travis.yml +1 -1
  186. data/tracks/lua/README.md +1 -1
  187. data/tracks/mips/.travis.yml +1 -1
  188. data/tracks/mips/config.json +56 -17
  189. data/tracks/nasm/.travis.yml +1 -1
  190. data/tracks/nim/.travis.yml +1 -1
  191. data/tracks/ocaml/README.md +3 -3
  192. data/tracks/ocaml/config.json +130 -4
  193. data/tracks/perl5/docs/TESTS.md +40 -26
  194. data/tracks/plsql/.travis.yml +1 -1
  195. data/tracks/plsql/config.json +40 -13
  196. data/tracks/pony/.travis.yml +1 -1
  197. data/tracks/pony/bin/install-deps +4 -3
  198. data/tracks/prolog/.travis.yml +1 -1
  199. data/tracks/r/README.md +5 -5
  200. data/tracks/r/config.json +102 -30
  201. data/tracks/rust/.travis.yml +1 -1
  202. data/tracks/rust/config.json +172 -4
  203. data/tracks/rust/docs/EXERCISE_README_INSERT.md +1 -1
  204. data/tracks/sml/config.json +26 -3
  205. data/tracks/vimscript/config.json +60 -3
  206. metadata +16 -1
@@ -0,0 +1,17 @@
1
+ apply plugin: "java"
2
+ apply plugin: "eclipse"
3
+ apply plugin: "idea"
4
+
5
+ repositories {
6
+ mavenCentral()
7
+ }
8
+
9
+ dependencies {
10
+ testCompile "junit:junit:4.12"
11
+ }
12
+ test {
13
+ testLogging {
14
+ exceptionFormat = 'full'
15
+ events = ["passed", "failed", "skipped"]
16
+ }
17
+ }
@@ -0,0 +1,37 @@
1
+
2
+ public class RotationalCipher {
3
+
4
+ int shiftKey;
5
+
6
+ RotationalCipher(int shiftKey) {
7
+ this.shiftKey = shiftKey;
8
+ }
9
+
10
+ public String rotate(String data) {
11
+ StringBuilder dataStringBuilder = new StringBuilder();
12
+ for (char c : data.toCharArray()) {
13
+ if (Character.isUpperCase(c)) {
14
+ dataStringBuilder.append(getReplacementCharacter(c, 'A', 'Z'));
15
+ } else if (Character.isLowerCase(c)) {
16
+ dataStringBuilder.append(getReplacementCharacter(c, 'a', 'z'));
17
+ } else {
18
+ dataStringBuilder.append(c);
19
+ }
20
+ }
21
+ return dataStringBuilder.toString();
22
+ }
23
+
24
+ /**
25
+ * For Uppercase CaseStart = 'A' and CaseEnd = 'Z'
26
+ * For Lowercase CaseStart = 'a' and CaseEnd = 'z'
27
+ */
28
+ private char getReplacementCharacter(char characterToReplace,
29
+ char alphabetCaseStart, char alphabetCaseEnd) {
30
+ char replacementCharacter = (char) (characterToReplace + shiftKey);
31
+ if (replacementCharacter > alphabetCaseEnd) {
32
+ replacementCharacter = (char) ((alphabetCaseStart - 1) +
33
+ (replacementCharacter % alphabetCaseEnd));
34
+ }
35
+ return replacementCharacter;
36
+ }
37
+ }
@@ -0,0 +1,81 @@
1
+
2
+ import org.junit.Assert;
3
+ import org.junit.Before;
4
+ import org.junit.Ignore;
5
+ import org.junit.Test;
6
+
7
+ public class RotationalCipherTest {
8
+
9
+ private RotationalCipher rotationalCipher;
10
+
11
+ @Test
12
+ public void rotateSingleCharacterBy1() {
13
+ rotationalCipher = new RotationalCipher(1);
14
+ Assert.assertEquals("b", rotationalCipher.rotate("a"));
15
+ }
16
+
17
+ @Ignore("Remove to run test")
18
+ @Test
19
+ public void rotateSingleCharacterBy26() {
20
+ rotationalCipher = new RotationalCipher(26);
21
+ Assert.assertEquals("a", rotationalCipher.rotate("a"));
22
+ }
23
+
24
+ @Ignore("Remove to run test")
25
+ @Test
26
+ public void rotateSingleCharacterBy0() {
27
+ rotationalCipher = new RotationalCipher(0);
28
+ Assert.assertEquals("a", rotationalCipher.rotate("a"));
29
+ }
30
+
31
+ @Ignore("Remove to run test")
32
+ @Test
33
+ public void rotateSingleCharacterBy13() {
34
+ rotationalCipher = new RotationalCipher(13);
35
+ Assert.assertEquals("z", rotationalCipher.rotate("m"));
36
+ }
37
+
38
+ @Ignore("Remove to run test")
39
+ @Test
40
+ public void rotateSingleCharacterWithWrapAround() {
41
+ rotationalCipher = new RotationalCipher(13);
42
+ Assert.assertEquals("a", rotationalCipher.rotate("n"));
43
+ }
44
+
45
+ @Ignore("Remove to run test")
46
+ @Test
47
+ public void rotateCapitalLetters() {
48
+ rotationalCipher = new RotationalCipher(5);
49
+ Assert.assertEquals("TRL", rotationalCipher.rotate("OMG"));
50
+ }
51
+
52
+ @Ignore("Remove to run test")
53
+ @Test
54
+ public void rotateSpaces() {
55
+ rotationalCipher = new RotationalCipher(5);
56
+ Assert.assertEquals("T R L", rotationalCipher.rotate("O M G"));
57
+ }
58
+
59
+ @Ignore("Remove to run test")
60
+ @Test
61
+ public void rotateNumbers() {
62
+ rotationalCipher = new RotationalCipher(4);
63
+ Assert.assertEquals("Xiwxmrk 1 2 3 xiwxmrk", rotationalCipher.rotate("Testing 1 2 3 testing"));
64
+ }
65
+
66
+ @Ignore("Remove to run test")
67
+ @Test
68
+ public void rotatePunctuation() {
69
+ rotationalCipher = new RotationalCipher(21);
70
+ Assert.assertEquals("Gzo'n zvo, Bmviyhv!", rotationalCipher.rotate("Let's eat, Grandma!"));
71
+ }
72
+
73
+ @Ignore("Remove to run test")
74
+ @Test
75
+ public void rotateAllLetters() {
76
+ rotationalCipher = new RotationalCipher(13);
77
+ Assert.assertEquals("The quick brown fox jumps over the lazy dog.",
78
+ rotationalCipher.rotate("Gur dhvpx oebja sbk whzcf bire gur ynml qbt."));
79
+ }
80
+
81
+ }
@@ -60,6 +60,7 @@ include 'robot-name'
60
60
  include 'robot-simulator'
61
61
  include 'roman-numerals'
62
62
  include 'run-length-encoding'
63
+ include 'rotational-cipher'
63
64
  include 'saddle-points'
64
65
  include 'scrabble-score'
65
66
  include 'secret-handshake'
@@ -6,4 +6,8 @@ class TwelveDays {
6
6
  String verses(int startVerse, int endVerse) {
7
7
  throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
8
8
  }
9
+
10
+ String sing() {
11
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
12
+ }
9
13
  }
@@ -14,4 +14,4 @@ matrix:
14
14
  script:
15
15
  - julia runtests.jl
16
16
  - ./bin/fetch-configlet
17
- - ./bin/configlet .
17
+ - ./bin/configlet lint .
@@ -11,7 +11,7 @@ _Document how to contribute to the Julia track._
11
11
 
12
12
  ## Contributing Guide
13
13
 
14
- Please see the [contributing guide](https://github.com/exercism/x-common/blob/master/CONTRIBUTING.md).
14
+ Please see the [contributing guide](https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/README.md).
15
15
 
16
16
  ## Working on the Exercises
17
17
 
@@ -34,7 +34,7 @@ To submit a fix for an existing exercise or port an exercise to Kotlin with the
34
34
  (see [exercism.io: Installing Kotlin](http://exercism.io/languages/kotlin/installing))
35
35
  - **Setup a branch on a fork of [exercism/kotlin](https://github.com/exercism/kotlin) on your computer.**
36
36
 
37
- Use those instructions (in conjunction with the [Git Basics doc](https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/git-basics.md)) to:
37
+ Use those instructions (in conjunction with the [Git Basics doc](https://github.com/exercism/docs/blob/master/contributing/git-basics.md)) to:
38
38
  * "fork" a repository on GitHub;
39
39
  - install `git`;
40
40
  - "clone" a copy of your fork;
@@ -52,7 +52,7 @@ Use those instructions (in conjunction with the [Git Basics doc](https://github.
52
52
  $ git push
53
53
  ```
54
54
 
55
- The Git Basics doc has a section on [commit messages](https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/git-basics.md#commit-messages) that provides practical advice on crafting meaningful commit messages.
55
+ The Git Basics doc has a section on [commit messages](https://github.com/exercism/docs/blob/master/contributing/git-basics.md#commit-messages) that provides practical advice on crafting meaningful commit messages.
56
56
  - **Verify that your work passes all tests.** When you create a pull request (PR), GitHub triggers a build on Travis CI. Your PR will not be merged unless those tests pass.
57
57
 
58
58
  ## Getting Familiar With the Codebase
@@ -153,7 +153,7 @@ In your favorite text editor, open `src/test/kotlin/HelloWorldTest.kt`
153
153
  and go to line 10.
154
154
 
155
155
  ```kotlin
156
- assertEquals("Hello, World!", hello(""));
156
+ assertEquals("Hello, World!", hello(""))
157
157
  ```
158
158
 
159
159
  The test is expecting that `hello()`, when given an empty string (`""`),
@@ -551,7 +551,7 @@ fun hello(name: String = ""): String {
551
551
  }
552
552
 
553
553
  private fun whom(name: String):String {
554
- return if(name.isBlank()) "World" else name;
554
+ return if(name.isBlank()) "World" else name
555
555
  }
556
556
  ```
557
557
 
@@ -679,7 +679,7 @@ than 100 maintainers and many more contributors.
679
679
 
680
680
  A starting point to jumping in can be found here:
681
681
 
682
- https://github.com/exercism/problem-specifications/blob/master/CONTRIBUTING.md
682
+ https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/README.md
683
683
 
684
684
  ----
685
685
 
@@ -5,7 +5,10 @@
5
5
  "active": true,
6
6
  "exercises": [
7
7
  {
8
+ "uuid": "c029678b-9b9f-4fb2-958f-3a118efa16a9",
8
9
  "slug": "hamming",
10
+ "core": false,
11
+ "unlocked_by": null,
9
12
  "difficulty": 1,
10
13
  "topics": [
11
14
  "Control-flow (conditionals)",
@@ -16,7 +19,10 @@
16
19
  ]
17
20
  },
18
21
  {
22
+ "uuid": "8bfa54a8-4ee6-4e6e-b286-7fc8c70b9e9f",
19
23
  "slug": "leap",
24
+ "core": false,
25
+ "unlocked_by": null,
20
26
  "difficulty": 1,
21
27
  "topics": [
22
28
  "Control-flow (conditionals)",
@@ -26,7 +32,10 @@
26
32
  ]
27
33
  },
28
34
  {
35
+ "uuid": "eb3a92bf-0748-4406-ba67-9e27e367ae45",
29
36
  "slug": "grains",
37
+ "core": false,
38
+ "unlocked_by": null,
30
39
  "difficulty": 1,
31
40
  "topics": [
32
41
  "Variables",
@@ -35,7 +44,10 @@
35
44
  ]
36
45
  },
37
46
  {
47
+ "uuid": "25506c31-7274-402a-95e1-8475fcdb34e1",
38
48
  "slug": "gigasecond",
49
+ "core": false,
50
+ "unlocked_by": null,
39
51
  "difficulty": 1,
40
52
  "topics": [
41
53
  "Variables",
@@ -46,7 +58,10 @@
46
58
  ]
47
59
  },
48
60
  {
61
+ "uuid": "1e6c8365-775d-4a4f-8fc7-e376912d7912",
49
62
  "slug": "bob",
63
+ "core": false,
64
+ "unlocked_by": null,
50
65
  "difficulty": 1,
51
66
  "topics": [
52
67
  "Control-flow (conditionals)",
@@ -55,7 +70,10 @@
55
70
  ]
56
71
  },
57
72
  {
73
+ "uuid": "5c215cbf-a575-42ad-9b3f-892410a63077",
58
74
  "slug": "rna-transcription",
75
+ "core": false,
76
+ "unlocked_by": null,
59
77
  "difficulty": 1,
60
78
  "topics": [
61
79
  "Control-flow (conditionals)",
@@ -64,7 +82,10 @@
64
82
  ]
65
83
  },
66
84
  {
85
+ "uuid": "79a4a35c-40d6-4e2d-92a1-005c40b4f4c5",
67
86
  "slug": "robot-name",
87
+ "core": false,
88
+ "unlocked_by": null,
68
89
  "difficulty": 1,
69
90
  "topics": [
70
91
  "Variables",
@@ -73,7 +94,10 @@
73
94
  ]
74
95
  },
75
96
  {
97
+ "uuid": "424ed7aa-24f3-4aec-9620-3cc9dc224166",
76
98
  "slug": "word-count",
99
+ "core": false,
100
+ "unlocked_by": null,
77
101
  "difficulty": 1,
78
102
  "topics": [
79
103
  "Control-flow (conditionals)",
@@ -83,7 +107,10 @@
83
107
  ]
84
108
  },
85
109
  {
110
+ "uuid": "b5345fcb-d4cc-4ea0-b1b9-f1b0cb92f05c",
86
111
  "slug": "raindrops",
112
+ "core": false,
113
+ "unlocked_by": null,
87
114
  "difficulty": 1,
88
115
  "topics": [
89
116
  "Control-flow (conditionals)",
@@ -92,7 +119,10 @@
92
119
  ]
93
120
  },
94
121
  {
122
+ "uuid": "841641f2-16ba-4dc5-af1b-ffae5052853a",
95
123
  "slug": "grade-school",
124
+ "core": false,
125
+ "unlocked_by": null,
96
126
  "difficulty": 1,
97
127
  "topics": [
98
128
  "Interfaces",
@@ -103,7 +133,10 @@
103
133
  ]
104
134
  },
105
135
  {
136
+ "uuid": "d1d86b51-a3f4-4276-a18c-6db54bc8dfcc",
106
137
  "slug": "phone-number",
138
+ "core": false,
139
+ "unlocked_by": null,
107
140
  "difficulty": 1,
108
141
  "topics": [
109
142
  "Interfaces",
@@ -112,7 +145,10 @@
112
145
  ]
113
146
  },
114
147
  {
148
+ "uuid": "52ac3dd0-8803-445f-93cf-e984b59d6702",
115
149
  "slug": "etl",
150
+ "core": false,
151
+ "unlocked_by": null,
116
152
  "difficulty": 1,
117
153
  "topics": [
118
154
  "Control-flow (loops)",
@@ -121,7 +157,10 @@
121
157
  ]
122
158
  },
123
159
  {
160
+ "uuid": "5c6f22e7-109c-4d9e-b8bf-4ea63b2823ca",
124
161
  "slug": "beer-song",
162
+ "core": false,
163
+ "unlocked_by": null,
125
164
  "difficulty": 1,
126
165
  "topics": [
127
166
  "Control-flow (conditionals)",
@@ -131,7 +170,10 @@
131
170
  ]
132
171
  },
133
172
  {
173
+ "uuid": "d24cf0ea-876f-4775-969b-99970425e413",
134
174
  "slug": "space-age",
175
+ "core": false,
176
+ "unlocked_by": null,
135
177
  "difficulty": 1,
136
178
  "topics": [
137
179
  "Interfaces",
@@ -140,7 +182,10 @@
140
182
  ]
141
183
  },
142
184
  {
185
+ "uuid": "b9fd0f13-966c-4085-ac9d-ed49a96ac0bf",
143
186
  "slug": "anagram",
187
+ "core": false,
188
+ "unlocked_by": null,
144
189
  "difficulty": 1,
145
190
  "topics": [
146
191
  "Equality",
@@ -149,7 +194,10 @@
149
194
  ]
150
195
  },
151
196
  {
197
+ "uuid": "b2ad38c2-2962-4a47-9b14-20ca262ebff6",
152
198
  "slug": "nucleotide-count",
199
+ "core": false,
200
+ "unlocked_by": null,
153
201
  "difficulty": 1,
154
202
  "topics": [
155
203
  "Control-flow (loops)",
@@ -159,7 +207,10 @@
159
207
  ]
160
208
  },
161
209
  {
210
+ "uuid": "6c702aa9-70f3-41d0-bc76-4323a08f8fbf",
162
211
  "slug": "meetup",
212
+ "core": false,
213
+ "unlocked_by": null,
163
214
  "difficulty": 1,
164
215
  "topics": [
165
216
  "Control-flow (conditionals)",
@@ -168,7 +219,10 @@
168
219
  ]
169
220
  },
170
221
  {
222
+ "uuid": "bd2a55e3-9874-4d2e-ad6f-4b2f8c5e2e0a",
171
223
  "slug": "triangle",
224
+ "core": false,
225
+ "unlocked_by": null,
172
226
  "difficulty": 1,
173
227
  "topics": [
174
228
  "Control-flow (conditionals)",
@@ -179,7 +233,10 @@
179
233
  ]
180
234
  },
181
235
  {
236
+ "uuid": "71804ace-6ca1-46b9-bf06-ff57faef7afa",
182
237
  "slug": "difference-of-squares",
238
+ "core": false,
239
+ "unlocked_by": null,
183
240
  "difficulty": 1,
184
241
  "topics": [
185
242
  "Control-flow (loops)",
@@ -189,7 +246,10 @@
189
246
  ]
190
247
  },
191
248
  {
249
+ "uuid": "150d3608-d234-4c9e-ab6d-2d91f8a2c855",
192
250
  "slug": "roman-numerals",
251
+ "core": false,
252
+ "unlocked_by": null,
193
253
  "difficulty": 1,
194
254
  "topics": [
195
255
  "Control-flow (conditionals)",
@@ -200,7 +260,10 @@
200
260
  ]
201
261
  },
202
262
  {
263
+ "uuid": "f350f23d-72f8-4f47-a0f5-fe3c00f3f5f1",
203
264
  "slug": "scrabble-score",
265
+ "core": false,
266
+ "unlocked_by": null,
204
267
  "difficulty": 1,
205
268
  "topics": [
206
269
  "Control-flow (loops)",
@@ -210,7 +273,10 @@
210
273
  ]
211
274
  },
212
275
  {
276
+ "uuid": "005ff8b4-9df8-4b82-b919-a0c67356d654",
213
277
  "slug": "binary",
278
+ "core": false,
279
+ "unlocked_by": null,
214
280
  "difficulty": 1,
215
281
  "topics": [
216
282
  "Control-flow (conditionals)",
@@ -219,7 +285,10 @@
219
285
  ]
220
286
  },
221
287
  {
288
+ "uuid": "d2fd481e-7156-452d-976d-ea6df220fa18",
222
289
  "slug": "allergies",
290
+ "core": false,
291
+ "unlocked_by": null,
223
292
  "difficulty": 1,
224
293
  "topics": [
225
294
  "Control-flow (conditionals)",
@@ -229,7 +298,10 @@
229
298
  ]
230
299
  },
231
300
  {
301
+ "uuid": "40f3b911-0739-4fec-95cc-cfab99788c19",
232
302
  "slug": "sieve",
303
+ "core": false,
304
+ "unlocked_by": null,
233
305
  "difficulty": 1,
234
306
  "topics": [
235
307
  "Control-flow (conditionals)",
@@ -241,7 +313,10 @@
241
313
  ]
242
314
  },
243
315
  {
316
+ "uuid": "1a81aac9-9128-48ab-aa6a-4d981d6eb602",
244
317
  "slug": "strain",
318
+ "core": false,
319
+ "unlocked_by": null,
245
320
  "difficulty": 1,
246
321
  "topics": [
247
322
  "Control-flow (conditionals)",
@@ -251,7 +326,10 @@
251
326
  ]
252
327
  },
253
328
  {
329
+ "uuid": "71a1fdb6-414e-452c-8d24-03f2a5621e62",
254
330
  "slug": "atbash-cipher",
331
+ "core": false,
332
+ "unlocked_by": null,
255
333
  "difficulty": 1,
256
334
  "topics": [
257
335
  "Control-flow (conditionals)",
@@ -261,7 +339,10 @@
261
339
  ]
262
340
  },
263
341
  {
342
+ "uuid": "cc138097-7c0f-44b4-b07e-2a24f6475986",
264
343
  "slug": "prime-factors",
344
+ "core": false,
345
+ "unlocked_by": null,
265
346
  "difficulty": 1,
266
347
  "topics": [
267
348
  "Control-flow (conditionals)",
@@ -273,7 +354,10 @@
273
354
  ]
274
355
  },
275
356
  {
357
+ "uuid": "fcfc6b44-597d-4a03-bf02-6be5c8f7ae4e",
276
358
  "slug": "crypto-square",
359
+ "core": false,
360
+ "unlocked_by": null,
277
361
  "difficulty": 1,
278
362
  "topics": [
279
363
  "Control-flow (conditionals)",
@@ -284,17 +368,27 @@
284
368
  ]
285
369
  },
286
370
  {
371
+ "uuid": "ff3eb2c5-c7ce-4352-805c-e01d4fb85aa6",
287
372
  "slug": "trinary",
373
+ "core": false,
374
+ "unlocked_by": null,
288
375
  "difficulty": 1,
289
376
  "topics": [
290
377
  "Control-flow (conditionals)",
291
378
  "Integers",
292
379
  "Mathematics"
293
380
  ]
381
+ },
382
+ {
383
+ "slug": "pascals-triangle",
384
+ "difficulty": 1,
385
+ "topics": [
386
+ "Control-flow (loops)",
387
+ "Mathematics",
388
+ "Integers",
389
+ "Sequences"
390
+ ]
294
391
  }
295
- ],
296
- "deprecated": [
297
-
298
392
  ],
299
393
  "foregone": [
300
394
  "accumulate",
@@ -0,0 +1,21 @@
1
+ (defpackage #:pascal
2
+ (:use #:common-lisp)
3
+ (:export #:rows))
4
+
5
+ (in-package #:pascal)
6
+
7
+ (defun fact (n)
8
+ (loop for i from 0 to n
9
+ for fact = 1 then (* fact i)
10
+ finally (return fact)))
11
+
12
+ (defun choose (n r)
13
+ (/ (fact n)
14
+ (* (fact r) (fact (- n r)))))
15
+
16
+ (defun rows (n)
17
+ (if (> n 0)
18
+ (loop for i from 0 to (1- n)
19
+ collect (loop for j from 0 to i
20
+ collect (choose i j)))
21
+ '()))
@@ -0,0 +1,7 @@
1
+ (in-package #:cl-user)
2
+ (defpackage #:pascal
3
+ (:use #:cl)
4
+ (:export #:rows))
5
+ (in-package #:pascal)
6
+
7
+ (defun rows (n))
@@ -0,0 +1,34 @@
1
+ (ql:quickload "lisp-unit")
2
+ #-xlisp-test (load "pascal")
3
+
4
+ (defpackage #:pascal-test
5
+ (:use #:common-lisp #:lisp-unit))
6
+ (in-package #:pascal-test)
7
+
8
+ (define-test zero-rows
9
+ (assert-equal '()
10
+ (pascal:rows 0)))
11
+
12
+ (define-test single-row
13
+ (assert-equal '((1))
14
+ (pascal:rows 1)))
15
+
16
+ (define-test two-rows
17
+ (assert-equal '((1) (1 1))
18
+ (pascal:rows 2)))
19
+
20
+ (define-test three-rows
21
+ (assert-equal '((1) (1 1) (1 2 1))
22
+ (pascal:rows 3)))
23
+
24
+ (define-test four-rows
25
+ (assert-equal '((1) (1 1) (1 2 1) (1 3 3 1))
26
+ (pascal:rows 4)))
27
+
28
+ (define-test negative-rows
29
+ (assert-equal '()
30
+ (pascal:rows -1)))
31
+ #-xlisp-test
32
+ (let ((*print-errors* t)
33
+ (*print-failures* t))
34
+ (run-tests :all :pascal-test))
@@ -16,7 +16,7 @@ install:
16
16
 
17
17
  before_script:
18
18
  - bin/fetch-configlet
19
- - bin/configlet .
19
+ - bin/configlet lint .
20
20
 
21
21
  script:
22
22
  - bin/test-all
data/tracks/lua/README.md CHANGED
@@ -62,6 +62,6 @@ The Lua icon is inspired by the [Lua logo][9], which was designed by Alexandre N
62
62
  [4]: https://github.com/exercism/lua/tree/master/exercises/bob
63
63
  [5]: https://github.com/exercism/lua/blob/master/config.json
64
64
  [6]: https://github.com/exercism/docs/tree/master/contributing-to-language-tracks
65
- [7]: https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/pull-request-guidelines.md
65
+ [7]: https://github.com/exercism/docs/blob/master/contributing/pull-request-guidelines.md
66
66
  [8]: http://exercism.io/languages/lua/resources
67
67
  [9]: http://www.lua.org/images/
@@ -3,4 +3,4 @@ language: java
3
3
  script:
4
4
  - bin/test test-all
5
5
  - bin/fetch-configlet
6
- - bin/configlet .
6
+ - bin/configlet lint .