trackler 2.0.0.2 → 2.0.0.3

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 (197) hide show
  1. checksums.yaml +4 -4
  2. data/common/exercises/forth/canonical-data.json +1 -1
  3. data/common/exercises/pangram/canonical-data.json +0 -10
  4. data/common/exercises/run-length-encoding/canonical-data.json +21 -11
  5. data/lib/trackler/version.rb +1 -1
  6. data/tracks/bash/SETUP.md +2 -39
  7. data/tracks/bash/config.json +0 -9
  8. data/tracks/bash/exercises/hello-world/HINTS.md +38 -0
  9. data/tracks/bash/exercises/hello-world/hello_world_test.sh +0 -14
  10. data/tracks/haskell/.travis.yml +2 -13
  11. data/tracks/haskell/README.md +2 -1
  12. data/tracks/haskell/config.json +6 -0
  13. data/tracks/haskell/exercises/accumulate/examples/success-standard/package.yaml +16 -0
  14. data/tracks/haskell/exercises/accumulate/{src/Example.hs → examples/success-standard/src/Accumulate.hs} +0 -0
  15. data/tracks/haskell/exercises/all-your-base/examples/success-standard/package.yaml +16 -0
  16. data/tracks/haskell/exercises/all-your-base/{src/Example.hs → examples/success-standard/src/Base.hs} +0 -0
  17. data/tracks/haskell/exercises/allergies/examples/success-standard/package.yaml +16 -0
  18. data/tracks/haskell/exercises/allergies/{src/Example.hs → examples/success-standard/src/Allergies.hs} +0 -0
  19. data/tracks/haskell/exercises/alphametics/HINTS.md +5 -0
  20. data/tracks/haskell/exercises/alphametics/examples/success-standard/package.yaml +18 -0
  21. data/tracks/haskell/exercises/alphametics/examples/success-standard/src/Alphametics.hs +116 -0
  22. data/tracks/haskell/exercises/alphametics/package.yaml +20 -0
  23. data/tracks/haskell/exercises/alphametics/src/Alphametics.hs +4 -0
  24. data/tracks/haskell/exercises/alphametics/stack.yaml +1 -0
  25. data/tracks/haskell/exercises/alphametics/test/Tests.hs +78 -0
  26. data/tracks/haskell/exercises/anagram/examples/{list-string → success-liststring}/package.yaml +0 -1
  27. data/tracks/haskell/exercises/anagram/examples/{list-string → success-liststring/src}/Anagram.hs +0 -0
  28. data/tracks/haskell/exercises/anagram/examples/{set-text → success-settext}/package.yaml +0 -0
  29. data/tracks/haskell/exercises/anagram/examples/{set-text → success-settext/src}/Anagram.hs +0 -0
  30. data/tracks/haskell/exercises/atbash-cipher/examples/success-standard/package.yaml +18 -0
  31. data/tracks/haskell/exercises/atbash-cipher/{src/Example.hs → examples/success-standard/src/Atbash.hs} +0 -0
  32. data/tracks/haskell/exercises/bank-account/examples/success-standard/package.yaml +18 -0
  33. data/tracks/haskell/exercises/bank-account/{src/Example.hs → examples/success-standard/src/BankAccount.hs} +0 -0
  34. data/tracks/haskell/exercises/beer-song/examples/success-standard/package.yaml +16 -0
  35. data/tracks/haskell/exercises/beer-song/{src/Example.hs → examples/success-standard/src/Beer.hs} +0 -0
  36. data/tracks/haskell/exercises/binary-search-tree/examples/success-standard/package.yaml +16 -0
  37. data/tracks/haskell/exercises/binary-search-tree/{src/Example.hs → examples/success-standard/src/BST.hs} +0 -0
  38. data/tracks/haskell/exercises/binary/examples/success-standard/package.yaml +16 -0
  39. data/tracks/haskell/exercises/binary/{src/Example.hs → examples/success-standard/src/Binary.hs} +0 -0
  40. data/tracks/haskell/exercises/bob/examples/success-standard/package.yaml +16 -0
  41. data/tracks/haskell/exercises/bob/{src/Example.hs → examples/success-standard/src/Bob.hs} +0 -0
  42. data/tracks/haskell/exercises/change/examples/success-standard/package.yaml +16 -0
  43. data/tracks/haskell/exercises/change/{src/Example.hs → examples/success-standard/src/Change.hs} +0 -0
  44. data/tracks/haskell/exercises/clock/examples/success-standard/package.yaml +16 -0
  45. data/tracks/haskell/exercises/clock/{src/Example.hs → examples/success-standard/src/Clock.hs} +0 -0
  46. data/tracks/haskell/exercises/connect/examples/success-standard/package.yaml +18 -0
  47. data/tracks/haskell/exercises/connect/{src/Example.hs → examples/success-standard/src/Connect.hs} +0 -0
  48. data/tracks/haskell/exercises/crypto-square/examples/success-standard/package.yaml +18 -0
  49. data/tracks/haskell/exercises/crypto-square/{src/Example.hs → examples/success-standard/src/CryptoSquare.hs} +0 -0
  50. data/tracks/haskell/exercises/custom-set/examples/success-standard/package.yaml +16 -0
  51. data/tracks/haskell/exercises/custom-set/{src/Example.hs → examples/success-standard/src/CustomSet.hs} +0 -0
  52. data/tracks/haskell/exercises/difference-of-squares/examples/success-standard/package.yaml +16 -0
  53. data/tracks/haskell/exercises/difference-of-squares/{src/Example.hs → examples/success-standard/src/Squares.hs} +0 -0
  54. data/tracks/haskell/exercises/etl/examples/success-standard/package.yaml +17 -0
  55. data/tracks/haskell/exercises/etl/{src/Example.hs → examples/success-standard/src/ETL.hs} +0 -0
  56. data/tracks/haskell/exercises/food-chain/examples/success-standard/package.yaml +18 -0
  57. data/tracks/haskell/exercises/food-chain/{src/Example.hs → examples/success-standard/src/FoodChain.hs} +0 -0
  58. data/tracks/haskell/exercises/forth/HINTS.md +2 -2
  59. data/tracks/haskell/exercises/forth/examples/success-standard/package.yaml +19 -0
  60. data/tracks/haskell/exercises/forth/{src/Example.hs → examples/success-standard/src/Forth.hs} +3 -3
  61. data/tracks/haskell/exercises/forth/package.yaml +0 -1
  62. data/tracks/haskell/exercises/forth/src/Forth.hs +3 -3
  63. data/tracks/haskell/exercises/forth/test/Tests.hs +120 -65
  64. data/tracks/haskell/exercises/gigasecond/examples/success-standard/package.yaml +17 -0
  65. data/tracks/haskell/exercises/gigasecond/{src/Example.hs → examples/success-standard/src/Gigasecond.hs} +0 -0
  66. data/tracks/haskell/exercises/go-counting/examples/success-standard/package.yaml +20 -0
  67. data/tracks/haskell/exercises/go-counting/{src/Example.hs → examples/success-standard/src/Counting.hs} +0 -0
  68. data/tracks/haskell/exercises/grade-school/examples/success-standard/package.yaml +18 -0
  69. data/tracks/haskell/exercises/grade-school/{src/Example.hs → examples/success-standard/src/School.hs} +0 -0
  70. data/tracks/haskell/exercises/grains/examples/success-standard/package.yaml +16 -0
  71. data/tracks/haskell/exercises/grains/{src/Example.hs → examples/success-standard/src/Grains.hs} +0 -0
  72. data/tracks/haskell/exercises/grains/test/Tests.hs +1 -2
  73. data/tracks/haskell/exercises/hamming/examples/success-standard/package.yaml +16 -0
  74. data/tracks/haskell/exercises/hamming/{src/Example.hs → examples/success-standard/src/Hamming.hs} +0 -0
  75. data/tracks/haskell/exercises/hexadecimal/examples/success-standard/package.yaml +16 -0
  76. data/tracks/haskell/exercises/hexadecimal/{src/Example.hs → examples/success-standard/src/Hexadecimal.hs} +0 -0
  77. data/tracks/haskell/exercises/house/examples/success-standard/package.yaml +16 -0
  78. data/tracks/haskell/exercises/house/{src/Example.hs → examples/success-standard/src/House.hs} +0 -0
  79. data/tracks/haskell/exercises/kindergarten-garden/examples/success-standard/package.yaml +19 -0
  80. data/tracks/haskell/exercises/kindergarten-garden/{src/Example.hs → examples/success-standard/src/Garden.hs} +0 -0
  81. data/tracks/haskell/exercises/largest-series-product/examples/success-standard/package.yaml +18 -0
  82. data/tracks/haskell/exercises/largest-series-product/{src/Example.hs → examples/success-standard/src/Series.hs} +0 -0
  83. data/tracks/haskell/exercises/leap/examples/success-standard/package.yaml +16 -0
  84. data/tracks/haskell/exercises/leap/{src/Example.hs → examples/success-standard/src/LeapYear.hs} +0 -0
  85. data/tracks/haskell/exercises/lens-person/examples/success-standard/package.yaml +19 -0
  86. data/tracks/haskell/exercises/lens-person/{src/Example.hs → examples/success-standard/src/Person.hs} +0 -0
  87. data/tracks/haskell/exercises/linked-list/examples/success-standard/package.yaml +18 -0
  88. data/tracks/haskell/exercises/linked-list/{src/Example.hs → examples/success-standard/src/Deque.hs} +0 -0
  89. data/tracks/haskell/exercises/list-ops/examples/success-standard/package.yaml +16 -0
  90. data/tracks/haskell/exercises/list-ops/{src/Example.hs → examples/success-standard/src/ListOps.hs} +0 -0
  91. data/tracks/haskell/exercises/luhn/examples/success-standard/package.yaml +16 -0
  92. data/tracks/haskell/exercises/luhn/{src/Example.hs → examples/success-standard/src/Luhn.hs} +0 -0
  93. data/tracks/haskell/exercises/matrix/examples/success-standard/package.yaml +17 -0
  94. data/tracks/haskell/exercises/matrix/{src/Example.hs → examples/success-standard/src/Matrix.hs} +0 -0
  95. data/tracks/haskell/exercises/meetup/examples/success-standard/package.yaml +17 -0
  96. data/tracks/haskell/exercises/meetup/{src/Example.hs → examples/success-standard/src/Meetup.hs} +0 -0
  97. data/tracks/haskell/exercises/minesweeper/examples/success-standard/package.yaml +16 -0
  98. data/tracks/haskell/exercises/minesweeper/{src/Example.hs → examples/success-standard/src/Minesweeper.hs} +0 -0
  99. data/tracks/haskell/exercises/nth-prime/examples/success-standard/package.yaml +16 -0
  100. data/tracks/haskell/exercises/nth-prime/{src/Example.hs → examples/success-standard/src/Prime.hs} +0 -0
  101. data/tracks/haskell/exercises/nucleotide-count/examples/success-standard/package.yaml +17 -0
  102. data/tracks/haskell/exercises/nucleotide-count/{src/Example.hs → examples/success-standard/src/DNA.hs} +0 -0
  103. data/tracks/haskell/exercises/ocr-numbers/examples/success-standard/package.yaml +19 -0
  104. data/tracks/haskell/exercises/ocr-numbers/{src/Example.hs → examples/success-standard/src/OCR.hs} +0 -0
  105. data/tracks/haskell/exercises/octal/examples/success-standard/package.yaml +17 -0
  106. data/tracks/haskell/exercises/octal/{src/Example.hs → examples/success-standard/src/Octal.hs} +0 -0
  107. data/tracks/haskell/exercises/palindrome-products/examples/success-standard/package.yaml +16 -0
  108. data/tracks/haskell/exercises/palindrome-products/{src/Example.hs → examples/success-standard/src/Palindromes.hs} +0 -0
  109. data/tracks/haskell/exercises/parallel-letter-frequency/examples/success-standard/package.yaml +20 -0
  110. data/tracks/haskell/exercises/parallel-letter-frequency/{src/Example.hs → examples/success-standard/src/Frequency.hs} +0 -0
  111. data/tracks/haskell/exercises/pascals-triangle/examples/success-standard/package.yaml +16 -0
  112. data/tracks/haskell/exercises/pascals-triangle/{src/Example.hs → examples/success-standard/src/Triangle.hs} +0 -0
  113. data/tracks/haskell/exercises/phone-number/examples/success-standard/package.yaml +16 -0
  114. data/tracks/haskell/exercises/phone-number/{src/Example.hs → examples/success-standard/src/Phone.hs} +0 -0
  115. data/tracks/haskell/exercises/pig-latin/examples/success-standard/package.yaml +16 -0
  116. data/tracks/haskell/exercises/pig-latin/{src/Example.hs → examples/success-standard/src/PigLatin.hs} +0 -0
  117. data/tracks/haskell/exercises/pig-latin/test/Tests.hs +2 -1
  118. data/tracks/haskell/exercises/pov/examples/success-standard/package.yaml +17 -0
  119. data/tracks/haskell/exercises/pov/{src/Example.hs → examples/success-standard/src/POV.hs} +0 -0
  120. data/tracks/haskell/exercises/pov/test/Tests.hs +34 -8
  121. data/tracks/haskell/exercises/prime-factors/examples/success-standard/package.yaml +16 -0
  122. data/tracks/haskell/exercises/prime-factors/{src/Example.hs → examples/success-standard/src/PrimeFactors.hs} +0 -0
  123. data/tracks/haskell/exercises/pythagorean-triplet/examples/success-standard/package.yaml +16 -0
  124. data/tracks/haskell/exercises/pythagorean-triplet/{src/Example.hs → examples/success-standard/src/Triplet.hs} +0 -0
  125. data/tracks/haskell/exercises/queen-attack/examples/success-standard/package.yaml +16 -0
  126. data/tracks/haskell/exercises/queen-attack/{src/Example.hs → examples/success-standard/src/Queens.hs} +0 -0
  127. data/tracks/haskell/exercises/raindrops/examples/success-standard/package.yaml +16 -0
  128. data/tracks/haskell/exercises/raindrops/{src/Example.hs → examples/success-standard/src/Raindrops.hs} +0 -0
  129. data/tracks/haskell/exercises/rna-transcription/examples/success-standard/package.yaml +18 -0
  130. data/tracks/haskell/exercises/rna-transcription/{src/Example.hs → examples/success-standard/src/DNA.hs} +0 -0
  131. data/tracks/haskell/exercises/robot-name/examples/success-standard/package.yaml +18 -0
  132. data/tracks/haskell/exercises/robot-name/{src/Example.hs → examples/success-standard/src/Robot.hs} +0 -0
  133. data/tracks/haskell/exercises/robot-simulator/examples/success-standard/package.yaml +16 -0
  134. data/tracks/haskell/exercises/robot-simulator/{src/Example.hs → examples/success-standard/src/Robot.hs} +0 -0
  135. data/tracks/haskell/exercises/roman-numerals/examples/success-standard/package.yaml +16 -0
  136. data/tracks/haskell/exercises/roman-numerals/{src/Example.hs → examples/success-standard/src/Roman.hs} +0 -0
  137. data/tracks/haskell/exercises/saddle-points/examples/success-standard/package.yaml +19 -0
  138. data/tracks/haskell/exercises/saddle-points/{src/Example.hs → examples/success-standard/src/Matrix.hs} +0 -0
  139. data/tracks/haskell/exercises/say/examples/success-standard/package.yaml +18 -0
  140. data/tracks/haskell/exercises/say/{src/Example.hs → examples/success-standard/src/Say.hs} +0 -0
  141. data/tracks/haskell/exercises/say/test/Tests.hs +4 -2
  142. data/tracks/haskell/exercises/scrabble-score/examples/success-standard/package.yaml +18 -0
  143. data/tracks/haskell/exercises/scrabble-score/{src/Example.hs → examples/success-standard/src/Scrabble.hs} +0 -0
  144. data/tracks/haskell/exercises/secret-handshake/examples/success-standard/package.yaml +16 -0
  145. data/tracks/haskell/exercises/secret-handshake/{src/Example.hs → examples/success-standard/src/SecretHandshake.hs} +0 -0
  146. data/tracks/haskell/exercises/series/examples/success-standard/package.yaml +16 -0
  147. data/tracks/haskell/exercises/series/{src/Example.hs → examples/success-standard/src/Series.hs} +0 -0
  148. data/tracks/haskell/exercises/sgf-parsing/examples/success-standard/package.yaml +20 -0
  149. data/tracks/haskell/exercises/sgf-parsing/{src/Example.hs → examples/success-standard/src/Sgf.hs} +0 -0
  150. data/tracks/haskell/exercises/sieve/examples/success-standard/package.yaml +18 -0
  151. data/tracks/haskell/exercises/sieve/{src/Example.hs → examples/success-standard/src/Sieve.hs} +0 -0
  152. data/tracks/haskell/exercises/simple-cipher/examples/success-standard/package.yaml +18 -0
  153. data/tracks/haskell/exercises/simple-cipher/{src/Example.hs → examples/success-standard/src/Cipher.hs} +0 -0
  154. data/tracks/haskell/exercises/simple-linked-list/examples/success-standard/package.yaml +16 -0
  155. data/tracks/haskell/exercises/simple-linked-list/{src/Example.hs → examples/success-standard/src/LinkedList.hs} +0 -0
  156. data/tracks/haskell/exercises/space-age/examples/success-double/package.yaml +0 -3
  157. data/tracks/haskell/exercises/space-age/examples/success-double/{SpaceAge.hs → src/SpaceAge.hs} +0 -0
  158. data/tracks/haskell/exercises/space-age/examples/success-rational/package.yaml +0 -3
  159. data/tracks/haskell/exercises/space-age/examples/success-rational/{SpaceAge.hs → src/SpaceAge.hs} +0 -0
  160. data/tracks/haskell/exercises/strain/examples/success-standard/package.yaml +16 -0
  161. data/tracks/haskell/exercises/strain/{src/Example.hs → examples/success-standard/src/Strain.hs} +0 -0
  162. data/tracks/haskell/exercises/sublist/examples/success-standard/package.yaml +16 -0
  163. data/tracks/haskell/exercises/sublist/{src/Example.hs → examples/success-standard/src/Sublist.hs} +0 -0
  164. data/tracks/haskell/exercises/sum-of-multiples/examples/success-standard/package.yaml +16 -0
  165. data/tracks/haskell/exercises/sum-of-multiples/{src/Example.hs → examples/success-standard/src/SumOfMultiples.hs} +0 -0
  166. data/tracks/haskell/exercises/triangle/examples/success-standard/package.yaml +18 -0
  167. data/tracks/haskell/exercises/triangle/{src/Example.hs → examples/success-standard/src/Triangle.hs} +0 -0
  168. data/tracks/haskell/exercises/trinary/examples/success-standard/package.yaml +17 -0
  169. data/tracks/haskell/exercises/trinary/{src/Example.hs → examples/success-standard/src/Trinary.hs} +0 -0
  170. data/tracks/haskell/exercises/word-count/examples/success-newtype/package.yaml +0 -2
  171. data/tracks/haskell/exercises/word-count/examples/success-newtype/{WordCount.hs → src/WordCount.hs} +0 -0
  172. data/tracks/haskell/exercises/word-count/examples/success-simple/package.yaml +0 -2
  173. data/tracks/haskell/exercises/word-count/examples/success-simple/{WordCount.hs → src/WordCount.hs} +0 -0
  174. data/tracks/haskell/exercises/wordy/examples/success-standard/package.yaml +19 -0
  175. data/tracks/haskell/exercises/wordy/{src/Example.hs → examples/success-standard/src/WordProblem.hs} +0 -0
  176. data/tracks/haskell/exercises/zebra-puzzle/examples/success-standard/package.yaml +16 -0
  177. data/tracks/haskell/exercises/zebra-puzzle/{src/Example.hs → examples/success-standard/src/ZebraPuzzle.hs} +0 -0
  178. data/tracks/haskell/exercises/zipper/examples/success-standard/package.yaml +16 -0
  179. data/tracks/haskell/exercises/zipper/{src/Example.hs → examples/success-standard/src/Zipper.hs} +0 -0
  180. data/tracks/java/config.json +7 -1
  181. data/tracks/java/exercises/difference-of-squares/build.gradle +17 -0
  182. data/tracks/java/exercises/difference-of-squares/src/example/java/.keep +0 -0
  183. data/tracks/java/exercises/difference-of-squares/src/example/java/Difference.java +20 -0
  184. data/tracks/java/exercises/difference-of-squares/src/main/java/.keep +0 -0
  185. data/tracks/java/exercises/difference-of-squares/src/main/java/Difference.java +5 -0
  186. data/tracks/java/exercises/difference-of-squares/src/test/java/DifferenceTest.java +87 -0
  187. data/tracks/java/exercises/settings.gradle +1 -0
  188. data/tracks/kotlin/docs/TESTS.md +97 -13
  189. data/tracks/ruby/exercises/alphametics/.version +1 -1
  190. data/tracks/ruby/exercises/alphametics/alphametics_test.rb +55 -45
  191. data/tracks/ruby/exercises/alphametics/example.rb +100 -63
  192. data/tracks/ruby/exercises/alphametics/example.tt +7 -6
  193. data/tracks/ruby/lib/alphametics_cases.rb +49 -13
  194. data/tracks/ruby/lib/generator.rb +2 -1
  195. data/tracks/rust/docs/LEARNING.md +1 -0
  196. data/tracks/rust/exercises/acronym/tests/acronym.rs +6 -0
  197. metadata +164 -80
@@ -0,0 +1,16 @@
1
+ name: sum-of-multiples
2
+
3
+ dependencies:
4
+ - base
5
+
6
+ library:
7
+ exposed-modules: SumOfMultiples
8
+ source-dirs: src
9
+
10
+ tests:
11
+ test:
12
+ main: Tests.hs
13
+ source-dirs: test
14
+ dependencies:
15
+ - sum-of-multiples
16
+ - hspec
@@ -0,0 +1,18 @@
1
+ name: triangle
2
+
3
+ dependencies:
4
+ - base
5
+
6
+ library:
7
+ exposed-modules: Triangle
8
+ source-dirs: src
9
+ dependencies:
10
+ - containers
11
+
12
+ tests:
13
+ test:
14
+ main: Tests.hs
15
+ source-dirs: test
16
+ dependencies:
17
+ - triangle
18
+ - hspec
@@ -0,0 +1,17 @@
1
+ name: trinary
2
+
3
+ dependencies:
4
+ - base
5
+
6
+ library:
7
+ exposed-modules: Trinary
8
+ source-dirs: src
9
+
10
+ tests:
11
+ test:
12
+ main: Tests.hs
13
+ source-dirs: test
14
+ dependencies:
15
+ - trinary
16
+ - hspec
17
+ - QuickCheck
@@ -7,8 +7,6 @@ library:
7
7
  exposed-modules: WordCount
8
8
  source-dirs: src
9
9
  dependencies:
10
- # - foo # List here the packages you
11
- # - bar # want to use in your solution.
12
10
  - multiset
13
11
  - text
14
12
 
@@ -7,8 +7,6 @@ library:
7
7
  exposed-modules: WordCount
8
8
  source-dirs: src
9
9
  dependencies:
10
- # - foo # List here the packages you
11
- # - bar # want to use in your solution.
12
10
  - split
13
11
 
14
12
  tests:
@@ -0,0 +1,19 @@
1
+ name: wordy
2
+
3
+ dependencies:
4
+ - base
5
+
6
+ library:
7
+ exposed-modules: WordProblem
8
+ source-dirs: src
9
+ dependencies:
10
+ - attoparsec
11
+ - text
12
+
13
+ tests:
14
+ test:
15
+ main: Tests.hs
16
+ source-dirs: test
17
+ dependencies:
18
+ - wordy
19
+ - hspec
@@ -0,0 +1,16 @@
1
+ name: zebra-puzzle
2
+
3
+ dependencies:
4
+ - base
5
+
6
+ library:
7
+ exposed-modules: ZebraPuzzle
8
+ source-dirs: src
9
+
10
+ tests:
11
+ test:
12
+ main: Tests.hs
13
+ source-dirs: test
14
+ dependencies:
15
+ - zebra-puzzle
16
+ - hspec
@@ -0,0 +1,16 @@
1
+ name: zipper
2
+
3
+ dependencies:
4
+ - base
5
+
6
+ library:
7
+ exposed-modules: Zipper
8
+ source-dirs: src
9
+
10
+ tests:
11
+ test:
12
+ main: Tests.hs
13
+ source-dirs: test
14
+ dependencies:
15
+ - zipper
16
+ - hspec
@@ -42,7 +42,8 @@
42
42
  "linked-list",
43
43
  "nth-prime",
44
44
  "pascals-triangle",
45
- "beer-song"
45
+ "beer-song",
46
+ "difference-of-squares"
46
47
  ],
47
48
  "exercises": [
48
49
  {
@@ -239,6 +240,11 @@
239
240
  "slug": "beer-song",
240
241
  "difficulty": 1,
241
242
  "topics": []
243
+ },
244
+ {
245
+ "slug": "difference-of-squares",
246
+ "difficulty": 1,
247
+ "topics": []
242
248
  }
243
249
  ],
244
250
  "deprecated": [
@@ -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,20 @@
1
+ import java.util.stream.IntStream;
2
+
3
+ public final class Difference {
4
+
5
+ public static int computeSquareOfSumTo(final int input) {
6
+ final int sum = input * (input + 1) / 2;
7
+ return (int) Math.pow(sum, 2);
8
+ }
9
+
10
+ public static int computeSumOfSquaresTo(final int input) {
11
+ return IntStream.rangeClosed(1, input)
12
+ .map(i -> (int) Math.pow(i, 2))
13
+ .sum();
14
+ }
15
+
16
+ public static int betweenSquareOfSumAndSumOfSquaresTo(final int input) {
17
+ return computeSquareOfSumTo(input) - computeSumOfSquaresTo(input);
18
+ }
19
+
20
+ }
@@ -0,0 +1,5 @@
1
+ public final class Difference {
2
+
3
+
4
+
5
+ }
@@ -0,0 +1,87 @@
1
+ import org.junit.Ignore;
2
+ import org.junit.Test;
3
+
4
+ import static org.junit.Assert.assertEquals;
5
+
6
+ public final class DifferenceTest {
7
+
8
+ @Test
9
+ public void testSquareOfSum5() {
10
+ final int expected = 225;
11
+ final int actual = Difference.computeSquareOfSumTo(5);
12
+ assertEquals(expected, actual);
13
+ }
14
+
15
+ @Ignore
16
+ @Test
17
+ public void testSquareOfSum10() {
18
+ final int expected = 3025;
19
+ final int actual = Difference.computeSquareOfSumTo(10);
20
+ assertEquals(expected, actual);
21
+ }
22
+
23
+ @Ignore
24
+ @Test
25
+ public void testSquareOfSum100() {
26
+ final int expected = 25502500;
27
+ final int actual = Difference.computeSquareOfSumTo(100);
28
+ assertEquals(expected, actual);
29
+ }
30
+
31
+ @Ignore
32
+ @Test
33
+ public void testSumOfSquares5() {
34
+ final int expected = 55;
35
+ final int actual = Difference.computeSumOfSquaresTo(5);
36
+ assertEquals(expected, actual);
37
+ }
38
+
39
+ @Ignore
40
+ @Test
41
+ public void testSumOfSquares10() {
42
+ final int expected = 385;
43
+ final int actual = Difference.computeSumOfSquaresTo(10);
44
+ assertEquals(expected, actual);
45
+ }
46
+
47
+ @Ignore
48
+ @Test
49
+ public void testSumOfSquares100() {
50
+ final int expected = 338350;
51
+ final int actual = Difference.computeSumOfSquaresTo(100);
52
+ assertEquals(expected, actual);
53
+ }
54
+
55
+ @Ignore
56
+ @Test
57
+ public void testDifferenceOfSquares0() {
58
+ final int expected = 0;
59
+ final int actual = Difference.betweenSquareOfSumAndSumOfSquaresTo(0);
60
+ assertEquals(expected, actual);
61
+ }
62
+
63
+ @Ignore
64
+ @Test
65
+ public void testDifferenceOfSquares5() {
66
+ final int expected = 170;
67
+ final int actual = Difference.betweenSquareOfSumAndSumOfSquaresTo(5);
68
+ assertEquals(expected, actual);
69
+ }
70
+
71
+ @Ignore
72
+ @Test
73
+ public void testDifferenceOfSquares10() {
74
+ final int expected = 2640;
75
+ final int actual = Difference.betweenSquareOfSumAndSumOfSquaresTo(10);
76
+ assertEquals(expected, actual);
77
+ }
78
+
79
+ @Ignore
80
+ @Test
81
+ public void testDifferenceOfSquares100() {
82
+ final int expected = 25164150;
83
+ final int actual = Difference.betweenSquareOfSumAndSumOfSquaresTo(100);
84
+ assertEquals(expected, actual);
85
+ }
86
+
87
+ }
@@ -7,6 +7,7 @@ include 'beer-song'
7
7
  include 'binary'
8
8
  include 'bob'
9
9
  include 'crypto-square'
10
+ include 'difference-of-squares'
10
11
  include 'etl'
11
12
  include 'gigasecond'
12
13
  include 'grade-school'
@@ -46,37 +46,41 @@ Gradle project: [C:\Users\johndoe\exercism\kotlin\etl\build.gradle ](...)
46
46
 
47
47
  ### Get started with the first exercise
48
48
 
49
- 1. In the terminal window, get the first exercise...
49
+ In the terminal window, get the first exercise:
50
50
 
51
- $ exercism fetch kotlin
51
+ $ exercism fetch kotlin
52
52
 
53
- Not Submitted: 1 problem
54
- Kotlin (Etl) /Users/johndoe/exercism/kotlin/etl
53
+ Not Submitted: 1 problem
54
+ Kotlin (Etl) /Users/johndoe/exercism/kotlin/etl
55
55
 
56
- New: 1 problem
57
- Kotlin (Etl) /Users/johndoe/exercism/kotlin/etl
56
+ New: 1 problem
57
+ Kotlin (Etl) /Users/johndoe/exercism/kotlin/etl
58
58
 
59
- unchanged: 0, updated: 0, new: 1
59
+ unchanged: 0, updated: 0, new: 1
60
60
 
61
- 2. In the "Welcome to IntelliJ IDEA" window, click the "Open" option.
61
+ ### Running the Tests
62
62
 
63
- 3. Navigate to the `/Users/johndoe/exercism/kotlin/etl` folder. Make sure you've selected the
63
+ #### Option 1: IntelliJ
64
+
65
+ 1. In the "Welcome to IntelliJ IDEA" window, click the "Open" option.
66
+
67
+ 2. Navigate to the `/Users/johndoe/exercism/kotlin/etl` folder. Make sure you've selected the
64
68
  "etl" folder. Click "OK".
65
69
 
66
- 4. In the "Import Project from Gradle" dialog, check the "auto-import" and "create directories"
70
+ 3. In the "Import Project from Gradle" dialog, check the "auto-import" and "create directories"
67
71
  checkboxes and select "Use customizable gradle wrapper".
68
72
 
69
73
  ![IntelliJ 14 CE -- Gradle import dialog](http://x.exercism.io/v3/tracks/kotlin/docs/img/mac-osx--idea-ce-gradle-import-dialog.png)
70
74
 
71
- 5. Click "OK". IntelliJ will automatically create its project artifacts based on the Gradle project file.
75
+ 4. Click "OK". IntelliJ will automatically create its project artifacts based on the Gradle project file.
72
76
 
73
77
  * After the project has loaded and you've dismissed the "Tip of the Day" dialog, you may see a
74
78
  notice (in the top-right-hand corner), saying, "Unindex remote maven repositories found." you can
75
79
  safely dismiss this notice.
76
80
 
77
- 6. Open the `README.md` file and carefully read the background for the assignment.
81
+ 5. Open the `README.md` file and carefully read the background for the assignment.
78
82
 
79
- 7. Start by running the test suite: In the "Project" view, right-click on the test file
83
+ 6. Start by running the test suite: In the "Project" view, right-click on the test file
80
84
  (`etl\src\test\kotlin\EtlTest`), select "Run", then pick the "EtlTest" that has a JUnit icon to the
81
85
  left of it (red and green arrows), NOT the Gradle icon (circular green).
82
86
  ![Run tests through IDEA JUnit Runner, NOT Gradle](http://x.exercism.io/v3/tracks/kotlin/docs/img/mac-osx--idea-ce-run-unit-tests.png)
@@ -89,3 +93,83 @@ Gradle project: [C:\Users\johndoe\exercism\kotlin\etl\build.gradle ](...)
89
93
  nice list of what needs to be fixed in the "Messages Make" view.
90
94
 
91
95
  ... and away you go!!!
96
+
97
+ #### Option 2: Command Line
98
+
99
+ The Exercism exercises for Kotlin can be built and tested from the command line using [Gradle](https://gradle.org).
100
+
101
+ After [installing Gradle](https://www.jayway.com/2013/05/12/getting-started-with-gradle), you can run the tests for any exercise by running `gradle test`, as long as you're in the same directory as the `build.gradle` file:
102
+
103
+ ```
104
+ $ pwd
105
+ /Users/johndoe/Code/exercism/kotlin/hello-world
106
+
107
+ $ gradle test
108
+ ...
109
+
110
+ :test
111
+
112
+ HelloWorldTest > helloSampleName FAILED
113
+ org.junit.ComparisonFailure at HelloWorldTest.kt:25
114
+
115
+ HelloWorldTest > helloNullName FAILED
116
+ org.junit.ComparisonFailure at HelloWorldTest.kt:20
117
+
118
+ HelloWorldTest > helloBlankName FAILED
119
+ org.junit.ComparisonFailure at HelloWorldTest.kt:13
120
+
121
+ HelloWorldTest > helloNoName FAILED
122
+ org.junit.ComparisonFailure at HelloWorldTest.kt:8
123
+
124
+ HelloWorldTest > helloAnotherSampleName FAILED
125
+ org.junit.ComparisonFailure at HelloWorldTest.kt:30
126
+
127
+ 5 tests completed, 5 failed
128
+ :test FAILED
129
+
130
+ FAILURE: Build failed with an exception.
131
+
132
+ * What went wrong:
133
+ Execution failed for task ':test'.
134
+ > There were failing tests. See the report at: file:///Users/johndoe/Code/exercism/kotlin/hello-world/build/reports/tests/test/index.html
135
+
136
+ * Try:
137
+ Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
138
+
139
+ BUILD FAILED
140
+
141
+ Total time: 1.141 secs
142
+ ```
143
+
144
+ When test cases are failing, you can get more information about the failing tests by including the `test` task's `--info` option:
145
+
146
+ ```
147
+ $ gradle test --info
148
+ ...
149
+
150
+ :test
151
+
152
+ ...
153
+
154
+ HelloWorldTest > helloSampleName FAILED
155
+ org.junit.ComparisonFailure: expected:<Hell[o], Alice!> but was:<Hell[ooo], Alice!>
156
+ at org.junit.Assert.assertEquals(Assert.java:115)
157
+ at kotlin.test.junit.JUnitAsserter.assertEquals(JUnitSupport.kt:23)
158
+ at kotlin.test.AssertionsKt__TestAssertionsKt.assertEquals(TestAssertions.kt:29)
159
+ at kotlin.test.AssertionsKt.assertEquals(Unknown Source)
160
+ at kotlin.test.AssertionsKt__TestAssertionsKt.assertEquals$default(TestAssertions.kt:28)
161
+ at kotlin.test.AssertionsKt.assertEquals$default(Unknown Source)
162
+ at HelloWorldTest.helloSampleName(HelloWorldTest.kt:25)
163
+
164
+ ...
165
+
166
+ 5 tests completed, 5 failed
167
+
168
+ ...
169
+
170
+ BUILD FAILED
171
+
172
+ Total time: 1.162 secs
173
+
174
+ ...
175
+ ```