trackler 2.2.0.0 → 2.2.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,58 +1,56 @@
1
1
  import SpaceAge from './space-age';
2
2
 
3
3
  describe('Space Age', () => {
4
-
5
4
  test('age in seconds', () => {
6
- let age = new SpaceAge(1000000);
5
+ const age = new SpaceAge(1000000);
7
6
  expect(age.seconds).toEqual(1000000);
8
7
  });
9
8
 
10
9
  xtest('age in earth years', () => {
11
- let age = new SpaceAge(1000000000);
10
+ const age = new SpaceAge(1000000000);
12
11
  expect(age.onEarth()).toEqual(31.69);
13
12
  });
14
13
 
15
14
  xtest('age in mercury years', () => {
16
- let age = new SpaceAge(2134835688);
15
+ const age = new SpaceAge(2134835688);
17
16
  expect(age.onEarth()).toEqual(67.65);
18
17
  expect(age.onMercury()).toEqual(280.88);
19
18
  });
20
19
 
21
20
  xtest('age in venus years', () => {
22
- let age = new SpaceAge(189839836);
21
+ const age = new SpaceAge(189839836);
23
22
  expect(age.onEarth()).toEqual(6.02);
24
23
  expect(age.onVenus()).toEqual(9.78);
25
24
  });
26
25
 
27
26
  xtest('age in mars years', () => {
28
- let age = new SpaceAge(2329871239);
27
+ const age = new SpaceAge(2329871239);
29
28
  expect(age.onEarth()).toEqual(73.83);
30
29
  expect(age.onMars()).toEqual(39.25);
31
30
  });
32
31
 
33
32
  xtest('age in jupiter years', () => {
34
- let age = new SpaceAge(901876382);
33
+ const age = new SpaceAge(901876382);
35
34
  expect(age.onEarth()).toEqual(28.58);
36
35
  expect(age.onJupiter()).toEqual(2.41);
37
36
  });
38
37
 
39
38
  xtest('age in saturn years', () => {
40
- let age = new SpaceAge(3000000000);
39
+ const age = new SpaceAge(3000000000);
41
40
  expect(age.onEarth()).toEqual(95.06);
42
41
  expect(age.onSaturn()).toEqual(3.23);
43
42
  });
44
43
 
45
44
  xtest('age in uranus years', () => {
46
- let age = new SpaceAge(3210123456);
45
+ const age = new SpaceAge(3210123456);
47
46
  expect(age.onEarth()).toEqual(101.72);
48
47
  expect(age.onUranus()).toEqual(1.21);
49
48
  });
50
49
 
51
50
  xtest('age in neptune year', () => {
52
- let age = new SpaceAge(8210123456);
51
+ const age = new SpaceAge(8210123456);
53
52
  expect(age.onEarth()).toEqual(260.16);
54
53
  expect(age.onNeptune()).toEqual(1.58);
55
54
  });
56
-
57
55
  });
58
56
 
@@ -1,5 +1,5 @@
1
1
  const Strain = {
2
- strain : (array, filter, keepMatches) => {
2
+ strain: (array, filter, keepMatches) => {
3
3
  const results = [];
4
4
  for (let i = 0; i < array.length; i++) {
5
5
  const item = array[i];
@@ -10,9 +10,9 @@ const Strain = {
10
10
  return results;
11
11
  },
12
12
 
13
- keep: (array, filter) => Strain.strain(array, filter, true),
14
- discard: (array, filter) => Strain.strain(array, filter, false)
13
+ keep: (array, filter) => Strain.strain(array, filter, true),
14
+ discard: (array, filter) => Strain.strain(array, filter, false),
15
15
 
16
- }
16
+ };
17
17
 
18
18
  export default Strain;
@@ -1,26 +1,25 @@
1
1
  import strain from './strain';
2
2
 
3
3
  describe('strain', () => {
4
-
5
4
  test('keeps on empty array returns empty array', () => {
6
- expect(strain.keep([], (e) => e < 10 )).toEqual([]);
5
+ expect(strain.keep([], e => e < 10)).toEqual([]);
7
6
  });
8
7
 
9
8
  xtest('keeps everything ', () => {
10
- expect(strain.keep([1, 2, 3], (e) => e < 10 )).toEqual([1, 2, 3]);
9
+ expect(strain.keep([1, 2, 3], e => e < 10)).toEqual([1, 2, 3]);
11
10
  });
12
11
 
13
12
  xtest('keeps first and last', () => {
14
- expect(strain.keep([1, 2, 3], (e) => e % 2 === 1 )).toEqual([1, 3]);
13
+ expect(strain.keep([1, 2, 3], e => e % 2 === 1)).toEqual([1, 3]);
15
14
  });
16
15
 
17
16
  xtest('keeps neither first nor last', () => {
18
- expect(strain.keep([1, 2, 3, 4, 5], (e) => e % 2 === 0 )).toEqual([2, 4]);
17
+ expect(strain.keep([1, 2, 3, 4, 5], e => e % 2 === 0)).toEqual([2, 4]);
19
18
  });
20
19
 
21
20
  xtest('keeps strings', () => {
22
21
  const words = 'apple zebra banana zombies cherimoya zelot'.split(' ');
23
- const result = strain.keep(words, word => word.indexOf('z') === 0 );
22
+ const result = strain.keep(words, word => word.indexOf('z') === 0);
24
23
  expect(result).toEqual('zebra zombies zelot'.split(' '));
25
24
  });
26
25
 
@@ -32,32 +31,32 @@ describe('strain', () => {
32
31
  [2, 1, 2],
33
32
  [1, 5, 2],
34
33
  [2, 2, 1],
35
- [1, 2, 5]
34
+ [1, 2, 5],
36
35
  ];
37
- const result = strain.keep(rows, row => row.indexOf(5) > -1 );
36
+ const result = strain.keep(rows, row => row.indexOf(5) > -1);
38
37
  expect(result).toEqual([[5, 5, 5], [5, 1, 2], [1, 5, 2], [1, 2, 5]]);
39
38
  });
40
39
 
41
40
  xtest('empty discard', () => {
42
- expect(strain.discard([], (e) => e < 10 )).toEqual([]);
41
+ expect(strain.discard([], e => e < 10)).toEqual([]);
43
42
  });
44
43
 
45
44
  xtest('discards nothing', () => {
46
- expect(strain.discard([1, 2, 3], (e) => e > 10 )).toEqual([1, 2, 3]);
45
+ expect(strain.discard([1, 2, 3], e => e > 10)).toEqual([1, 2, 3]);
47
46
  });
48
47
 
49
48
  xtest('discards first and last', () => {
50
- expect(strain.discard([1, 2, 3], (e) => e % 2 === 1 )).toEqual([2]);
49
+ expect(strain.discard([1, 2, 3], e => e % 2 === 1)).toEqual([2]);
51
50
  });
52
51
 
53
52
  xtest('discards neither first nor last', () => {
54
- const result = strain.discard([1, 2, 3, 4, 5], (e) => e % 2 === 0 );
53
+ const result = strain.discard([1, 2, 3, 4, 5], e => e % 2 === 0);
55
54
  expect(result).toEqual([1, 3, 5]);
56
55
  });
57
56
 
58
57
  xtest('discards strings', () => {
59
58
  const words = 'apple zebra banana zombies cherimoya zelot'.split(' ');
60
- const result = strain.discard(words, word => word.indexOf('z') === 0 );
59
+ const result = strain.discard(words, word => word.indexOf('z') === 0);
61
60
  expect(result).toEqual('apple banana cherimoya'.split(' '));
62
61
  });
63
62
 
@@ -69,11 +68,10 @@ describe('strain', () => {
69
68
  [2, 1, 2],
70
69
  [1, 5, 2],
71
70
  [2, 2, 1],
72
- [1, 2, 5]
71
+ [1, 2, 5],
73
72
  ];
74
- const result = strain.discard(rows, row => row.indexOf(5) > -1 );
73
+ const result = strain.discard(rows, row => row.indexOf(5) > -1);
75
74
  expect(result).toEqual([[1, 2, 3], [2, 1, 2], [2, 2, 1]]);
76
75
  });
77
-
78
76
  });
79
77
 
@@ -1,10 +1,10 @@
1
1
  const Sum = (factors) => {
2
- let self = this instanceof Sum ? this : Object.getPrototypeOf(Sum);
2
+ const self = this instanceof Sum ? this : Object.getPrototypeOf(Sum);
3
3
  self.factors = factors;
4
4
 
5
- self.to = limit => {
6
- let multiples = {};
7
- self.factors.forEach(factor => {
5
+ self.to = (limit) => {
6
+ const multiples = {};
7
+ self.factors.forEach((factor) => {
8
8
  for (let ii = factor; ii < limit; ii += factor) {
9
9
  multiples[ii] = ii;
10
10
  }
@@ -1,7 +1,6 @@
1
1
  import Triangle from './triangle';
2
2
 
3
3
  describe('Triangle', () => {
4
-
5
4
  test('equilateral triangles have equal sides', () => {
6
5
  const triangle = new Triangle(2, 2, 2);
7
6
  expect(triangle.kind()).toEqual('equilateral');
@@ -72,9 +71,8 @@ describe('Triangle', () => {
72
71
  expect(triangle.kind.bind(triangle)).toThrow();
73
72
  });
74
73
 
75
- xtest('triangles violating triangle inequality are illegal 3', ()=> {
76
- const triangle = new Triangle(10,1,3);
74
+ xtest('triangles violating triangle inequality are illegal 3', () => {
75
+ const triangle = new Triangle(10, 1, 3);
77
76
  expect(triangle.kind.bind(triangle)).toThrow();
78
77
  });
79
-
80
78
  });
@@ -2,11 +2,11 @@ const BASE = 3;
2
2
 
3
3
  export default class Trinary {
4
4
 
5
- constructor (decimal) {
5
+ constructor(decimal) {
6
6
  this.digits = [...decimal].reverse().map(Number);
7
7
  }
8
8
 
9
- toDecimal () {
9
+ toDecimal() {
10
10
  if (this.someDigitIsInvalid()) {
11
11
  return 0;
12
12
  }
@@ -20,7 +20,7 @@ export default class Trinary {
20
20
  return greaterThanBase || notANumber;
21
21
  }
22
22
 
23
- accumulator (decimal, digit, index) {
23
+ accumulator(decimal, digit, index) {
24
24
  return decimal += digit * Math.pow(BASE, index);
25
25
  }
26
26
 
@@ -1,7 +1,6 @@
1
1
  import Trinary from './trinary';
2
2
 
3
3
  describe('Trinary', () => {
4
-
5
4
  test('1 is decimal 1', () => {
6
5
  expect(1).toEqual(new Trinary('1').toDecimal());
7
6
  });
@@ -41,5 +40,4 @@ describe('Trinary', () => {
41
40
  xtest('digits from 3 to 9 are invalid', () => {
42
41
  expect(0).toEqual(new Trinary('123').toDecimal());
43
42
  });
44
-
45
43
  });
@@ -7,8 +7,8 @@ class TwoBucket {
7
7
  }
8
8
 
9
9
  reachedGoal(measurements) {
10
- if(measurements[0] === this.z || measurements[1] === this.z) {
11
- if(measurements[0] === this.z) {
10
+ if (measurements[0] === this.z || measurements[1] === this.z) {
11
+ if (measurements[0] === this.z) {
12
12
  this.goalBucket = 'one';
13
13
  this.otherBucket = measurements[1];
14
14
  } else {
@@ -23,23 +23,24 @@ class TwoBucket {
23
23
  }
24
24
 
25
25
  bigFirst(measurements, moveCount, prBool) {
26
- let j = measurements[0], k = measurements[1];
27
- while(!this.reachedGoal(measurements)) {
28
- if(k > this.x && j === 0 && moveCount === 0) {
26
+ let j = measurements[0],
27
+ k = measurements[1];
28
+ while (!this.reachedGoal(measurements)) {
29
+ if (k > this.x && j === 0 && moveCount === 0) {
29
30
  j = this.x;
30
31
  k = this.y - j;
31
- } else if(j == this.x) {
32
+ } else if (j == this.x) {
32
33
  j = 0;
33
- } else if(k > this.x && j !== 0 || k > this.x && prBool) {
34
- k = k - (this.x-j);
34
+ } else if (k > this.x && j !== 0 || k > this.x && prBool) {
35
+ k -= (this.x - j);
35
36
  j = this.x;
36
- } else if(k > this.x || j == 0) {
37
+ } else if (k > this.x || j == 0) {
37
38
  j = k;
38
- k = k - j;
39
- } else if(k == 0) {
39
+ k -= j;
40
+ } else if (k == 0) {
40
41
  k = this.y;
41
42
  }
42
- measurements = [j,k];
43
+ measurements = [j, k];
43
44
  moveCount++;
44
45
  prBool = !prBool;
45
46
  }
@@ -48,24 +49,25 @@ class TwoBucket {
48
49
  }
49
50
 
50
51
  smallFirst(measurements, moveCount, prBool) {
51
- let j = measurements[0], k = measurements[1];
52
- while(!this.reachedGoal(measurements)) {
53
- if(j === this.x && moveCount === 0) {
52
+ let j = measurements[0],
53
+ k = measurements[1];
54
+ while (!this.reachedGoal(measurements)) {
55
+ if (j === this.x && moveCount === 0) {
54
56
  j = 0;
55
57
  k = this.x;
56
- } else if(j == 0) {
58
+ } else if (j == 0) {
57
59
  j = this.x;
58
- } else if(j == this.x && k < this.y) {
59
- let tempK = k;
60
+ } else if (j == this.x && k < this.y) {
61
+ const tempK = k;
60
62
  k + j > this.y ? k = this.y : k = tempK + j;
61
- tempK + j > this.y ? j = j - (this.y- tempK) : j = 0;
62
- } else if(k === this.y) {
63
+ tempK + j > this.y ? j -= (this.y - tempK) : j = 0;
64
+ } else if (k === this.y) {
63
65
  k = 0;
64
- } else if(k === 0 && j < this.x) {
66
+ } else if (k === 0 && j < this.x) {
65
67
  k = j;
66
68
  j = 0;
67
69
  }
68
- measurements = [j,k];
70
+ measurements = [j, k];
69
71
  moveCount++;
70
72
  prBool = !prBool;
71
73
  }
@@ -74,19 +76,20 @@ class TwoBucket {
74
76
  }
75
77
 
76
78
  moves() {
77
- let j = 0, k = 0; //j will be running val of bucket one, k = running val of bucket two
79
+ let j = 0,
80
+ k = 0; // j will be running val of bucket one, k = running val of bucket two
78
81
  this.starter === 'one' ? j = this.x : k = this.y;
79
- let measurements = [ j, k ];
82
+ const measurements = [j, k];
80
83
  let moveCount = 0;
81
- let prBool = true; // pour / receive boolean - need to pour or receive every other turn
84
+ const prBool = true; // pour / receive boolean - need to pour or receive every other turn
82
85
 
83
- if(this.starter === 'one') {
86
+ if (this.starter === 'one') {
84
87
  moveCount = this.smallFirst(measurements, moveCount, prBool);
85
88
  } else {
86
89
  moveCount = this.bigFirst(measurements, moveCount, prBool);
87
90
  }
88
91
 
89
- return moveCount + 1; //accounts for first move made before loop (and moveCount starts at zero before loop)
92
+ return moveCount + 1; // accounts for first move made before loop (and moveCount starts at zero before loop)
90
93
  }
91
94
 
92
95
  }
@@ -1,18 +1,17 @@
1
1
  import TwoBucket from './two-bucket';
2
2
 
3
3
  describe('TwoBucket', () => {
4
-
5
4
  describe('works for input of 3, 5, 1', () => {
6
5
  const buckOne = 3;
7
6
  const buckTwo = 5;
8
7
  const goal = 1;
9
8
 
10
9
  test('starting with bucket one', () => {
11
- const starterBuck = 'one'; //indicates which bucket to fill first
10
+ const starterBuck = 'one'; // indicates which bucket to fill first
12
11
  const twoBucket = new TwoBucket(buckOne, buckTwo, goal, starterBuck);
13
- expect(twoBucket.moves()).toEqual(4); //includes the first fill
14
- expect(twoBucket.goalBucket).toEqual('one'); //which bucket should end up with the desired # of liters
15
- expect(twoBucket.otherBucket).toEqual(5); //leftover value in the "other" bucket once the goal has been reached
12
+ expect(twoBucket.moves()).toEqual(4); // includes the first fill
13
+ expect(twoBucket.goalBucket).toEqual('one'); // which bucket should end up with the desired # of liters
14
+ expect(twoBucket.otherBucket).toEqual(5); // leftover value in the "other" bucket once the goal has been reached
16
15
  });
17
16
 
18
17
  xtest('starting with bucket two', () => {
@@ -22,7 +21,6 @@ describe('TwoBucket', () => {
22
21
  expect(twoBucket.goalBucket).toEqual('two');
23
22
  expect(twoBucket.otherBucket).toEqual(3);
24
23
  });
25
-
26
24
  });
27
25
 
28
26
  describe('works for input of 7, 11, 2', () => {
@@ -45,7 +43,5 @@ describe('TwoBucket', () => {
45
43
  expect(twoBucket.goalBucket).toEqual('two');
46
44
  expect(twoBucket.otherBucket).toEqual(7);
47
45
  });
48
-
49
46
  });
50
-
51
47
  });
@@ -1,8 +1,8 @@
1
1
  class Words {
2
2
 
3
3
  count(input) {
4
- let counts = {};
5
- let words = input.match(/\S+/g);
4
+ const counts = {};
5
+ const words = input.match(/\S+/g);
6
6
 
7
7
  words.forEach((word) => {
8
8
  const lcWord = word.toLowerCase();
@@ -1,7 +1,7 @@
1
1
  import Words from './word-count';
2
2
 
3
3
  describe('words()', () => {
4
- let words = new Words();
4
+ const words = new Words();
5
5
 
6
6
  test('counts one word', () => {
7
7
  const expectedCounts = { word: 1 };
@@ -59,8 +59,7 @@ describe('words()', () => {
59
59
  });
60
60
 
61
61
  xtest('handles properties that exist on Object’s prototype', () => {
62
- const expectedCounts = { reserved: 1, words : 1, like :1, constructor: 1, and : 1, tostring: 1, 'ok?': 1};
62
+ const expectedCounts = { reserved: 1, words: 1, like: 1, constructor: 1, and: 1, tostring: 1, 'ok?': 1 };
63
63
  expect(words.count('reserved words like constructor and toString ok?')).toEqual(expectedCounts);
64
64
  });
65
-
66
65
  });
@@ -1,6 +1,6 @@
1
1
  const ArgumentError = () => ({
2
- name: "argument error",
3
- message: "oops"
2
+ name: 'argument error',
3
+ message: 'oops',
4
4
  });
5
5
 
6
6
  const re = new RegExp(/(plus|minus|divided by|multiplied by)+/g);
@@ -17,12 +17,12 @@ class Wordy {
17
17
  throw new ArgumentError();
18
18
  }
19
19
  let ii = 1,
20
- jj = 0,
21
- result = +this.numbers[0];
20
+ jj = 0,
21
+ result = +this.numbers[0];
22
22
 
23
23
  while (ii < this.numbers.length + 1) {
24
24
  const op = this.operands[jj++],
25
- b = +this.numbers[ii++] || null;
25
+ b = +this.numbers[ii++] || null;
26
26
  switch (op) {
27
27
  case 'plus' :
28
28
  result += b;
@@ -42,4 +42,4 @@ class Wordy {
42
42
  }
43
43
  }
44
44
 
45
- export { Wordy as WordProblem, ArgumentError as ArgumentError};
45
+ export { Wordy as WordProblem, ArgumentError };
@@ -1,7 +1,6 @@
1
1
  import { WordProblem, ArgumentError } from './wordy';
2
2
 
3
3
  describe('Word Problem', () => {
4
-
5
4
  test('add 1', () => {
6
5
  const question = 'What is 1 plus 1?';
7
6
  expect(new WordProblem(question).answer()).toEqual(2);
@@ -74,16 +73,15 @@ describe('Word Problem', () => {
74
73
 
75
74
  xtest('too advanced', () => {
76
75
  const question = 'What is 53 cubed?';
77
- const problem = new WordProblem(question);
76
+ const problem = new WordProblem(question);
78
77
 
79
78
  expect(problem.answer.bind(problem)).toThrow(new ArgumentError());
80
79
  });
81
80
 
82
81
  xtest('irrelevant', () => {
83
82
  const question = 'Who is the president of the United States?';
84
- const problem = new WordProblem(question);
83
+ const problem = new WordProblem(question);
85
84
 
86
85
  expect(problem.answer.bind(problem)).toThrow(new ArgumentError());
87
86
  });
88
-
89
87
  });
@@ -6,7 +6,10 @@
6
6
  "test_pattern": "TODO",
7
7
  "exercises": [
8
8
  {
9
+ "uuid": "c81c4175-f06b-404d-8c01-c4a6dba661d3",
9
10
  "slug": "hello-world",
11
+ "core": false,
12
+ "unlocked_by": null,
10
13
  "difficulty": 1,
11
14
  "topics": [
12
15
  "word definition",
@@ -14,7 +17,10 @@
14
17
  ]
15
18
  },
16
19
  {
20
+ "uuid": "17fb2814-2164-4933-8f72-adeb9b2b5ccf",
17
21
  "slug": "leap",
22
+ "core": false,
23
+ "unlocked_by": null,
18
24
  "difficulty": 3,
19
25
  "topics": [
20
26
  "quotations",
@@ -24,7 +30,10 @@
24
30
  ]
25
31
  },
26
32
  {
33
+ "uuid": "22c5c529-07bb-4df2-8d2f-e470d1ed48da",
27
34
  "slug": "two-fer",
35
+ "core": false,
36
+ "unlocked_by": null,
28
37
  "difficulty": 2,
29
38
  "topics": [
30
39
  "word definition",
@@ -34,17 +43,17 @@
34
43
  ]
35
44
  },
36
45
  {
46
+ "uuid": "d3afeeb3-8c4e-4a31-81a2-fb039ab3c5af",
37
47
  "slug": "isogram",
48
+ "core": false,
49
+ "unlocked_by": null,
38
50
  "difficulty": 1,
39
51
  "topics": [
40
- "word definition",
41
- "stack effect",
42
- "strings"
52
+ "word definition",
53
+ "stack effect",
54
+ "strings"
43
55
  ]
44
56
  }
45
- ],
46
- "deprecated": [
47
-
48
57
  ],
49
58
  "foregone": [
50
59
 
@@ -12,6 +12,6 @@ install:
12
12
  script:
13
13
  - make test
14
14
  - bin/fetch-configlet
15
- - bin/configlet .
15
+ - bin/configlet lint .
16
16
 
17
17
  sudo: required