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
@@ -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