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,136 +1,136 @@
1
1
  import Robot from './robot-simulator';
2
2
 
3
- describe('Robot', function() {
4
- let robot = new Robot();
3
+ describe('Robot', () => {
4
+ const robot = new Robot();
5
5
 
6
- test('robot bearing', function() {
7
- const directions = [ 'east', 'west', 'north', 'south' ];
6
+ test('robot bearing', () => {
7
+ const directions = ['east', 'west', 'north', 'south'];
8
8
 
9
- directions.forEach(currentDirection => {
9
+ directions.forEach((currentDirection) => {
10
10
  robot.orient(currentDirection);
11
11
  expect(robot.bearing).toEqual(currentDirection);
12
12
  });
13
13
  });
14
14
 
15
- xtest('invalid robot bearing', function() {
15
+ xtest('invalid robot bearing', () => {
16
16
  try {
17
17
  robot.orient('crood');
18
- } catch(exception) {
18
+ } catch (exception) {
19
19
  expect(exception).toEqual('Invalid Robot Bearing');
20
20
  }
21
21
  });
22
22
 
23
- xtest('turn right from north', function() {
23
+ xtest('turn right from north', () => {
24
24
  robot.orient('north');
25
25
  robot.turnRight();
26
26
  expect(robot.bearing).toEqual('east');
27
27
  });
28
28
 
29
- xtest('turn right from east', function() {
29
+ xtest('turn right from east', () => {
30
30
  robot.orient('east');
31
31
  robot.turnRight();
32
32
  expect(robot.bearing).toEqual('south');
33
33
  });
34
34
 
35
- xtest('turn right from south', function() {
35
+ xtest('turn right from south', () => {
36
36
  robot.orient('south');
37
37
  robot.turnRight();
38
38
  expect(robot.bearing).toEqual('west');
39
39
  });
40
40
 
41
- xtest('turn right from west', function() {
41
+ xtest('turn right from west', () => {
42
42
  robot.orient('west');
43
43
  robot.turnRight();
44
44
  expect(robot.bearing).toEqual('north');
45
45
  });
46
46
 
47
- xtest('turn left from north', function() {
47
+ xtest('turn left from north', () => {
48
48
  robot.orient('north');
49
49
  robot.turnLeft();
50
50
  expect(robot.bearing).toEqual('west');
51
51
  });
52
52
 
53
- xtest('turn left from east', function() {
53
+ xtest('turn left from east', () => {
54
54
  robot.orient('east');
55
55
  robot.turnLeft();
56
56
  expect(robot.bearing).toEqual('north');
57
57
  });
58
58
 
59
- xtest('turn left from south', function() {
59
+ xtest('turn left from south', () => {
60
60
  robot.orient('south');
61
61
  robot.turnLeft();
62
62
  expect(robot.bearing).toEqual('east');
63
63
  });
64
64
 
65
- xtest('turn left from west', function() {
65
+ xtest('turn left from west', () => {
66
66
  robot.orient('west');
67
67
  robot.turnLeft();
68
68
  expect(robot.bearing).toEqual('south');
69
69
  });
70
70
 
71
- xtest('robot coordinates', function() {
71
+ xtest('robot coordinates', () => {
72
72
  robot.at(3, 0);
73
73
  expect(robot.coordinates).toEqual([3, 0]);
74
74
  });
75
75
 
76
- xtest('other robot coordinates', function() {
76
+ xtest('other robot coordinates', () => {
77
77
  robot.at(-2, 5);
78
78
  expect(robot.coordinates).toEqual([-2, 5]);
79
79
  });
80
80
 
81
- xtest('advance when facing north', function() {
81
+ xtest('advance when facing north', () => {
82
82
  robot.at(0, 0);
83
83
  robot.orient('north');
84
84
  robot.advance();
85
85
  expect(robot.coordinates).toEqual([0, 1]);
86
86
  });
87
87
 
88
- xtest('advance when facing east', function() {
88
+ xtest('advance when facing east', () => {
89
89
  robot.at(0, 0);
90
90
  robot.orient('east');
91
91
  robot.advance();
92
92
  expect(robot.coordinates).toEqual([1, 0]);
93
93
  });
94
94
 
95
- xtest('advance when facing south', function() {
95
+ xtest('advance when facing south', () => {
96
96
  robot.at(0, 0);
97
97
  robot.orient('south');
98
98
  robot.advance();
99
99
  expect(robot.coordinates).toEqual([0, -1]);
100
100
  });
101
101
 
102
- xtest('advance when facing west', function() {
102
+ xtest('advance when facing west', () => {
103
103
  robot.at(0, 0);
104
104
  robot.orient('west');
105
105
  robot.advance();
106
106
  expect(robot.coordinates).toEqual([-1, 0]);
107
107
  });
108
108
 
109
- xtest('instructions for turning left', function() {
110
- expect(robot.instructions('L')).toEqual([ 'turnLeft' ]);
109
+ xtest('instructions for turning left', () => {
110
+ expect(robot.instructions('L')).toEqual(['turnLeft']);
111
111
  });
112
112
 
113
- xtest('instructions for turning right', function() {
114
- expect(robot.instructions('R')).toEqual([ 'turnRight' ]);
113
+ xtest('instructions for turning right', () => {
114
+ expect(robot.instructions('R')).toEqual(['turnRight']);
115
115
  });
116
116
 
117
- xtest('instructions for advancing', function() {
118
- expect(robot.instructions('A')).toEqual([ 'advance' ]);
117
+ xtest('instructions for advancing', () => {
118
+ expect(robot.instructions('A')).toEqual(['advance']);
119
119
  });
120
120
 
121
- xtest('series of instructions', function() {
121
+ xtest('series of instructions', () => {
122
122
  expect(robot.instructions('RAAL'))
123
- .toEqual([ 'turnRight', 'advance', 'advance', 'turnLeft' ]);
123
+ .toEqual(['turnRight', 'advance', 'advance', 'turnLeft']);
124
124
  });
125
125
 
126
- xtest('instruct robot', function() {
126
+ xtest('instruct robot', () => {
127
127
  robot.place({ x: -2, y: 1, direction: 'east' });
128
128
  robot.evaluate('RLAALAL');
129
129
  expect(robot.coordinates).toEqual([0, 2]);
130
130
  expect(robot.bearing).toEqual('west');
131
131
  });
132
132
 
133
- xtest('instruct many robots', function() {
133
+ xtest('instruct many robots', () => {
134
134
  const robot1 = new Robot();
135
135
  const robot2 = new Robot();
136
136
  const robot3 = new Robot();
@@ -150,5 +150,4 @@ describe('Robot', function() {
150
150
  expect(robot3.coordinates).toEqual([11, 5]);
151
151
  expect(robot3.bearing).toEqual('north');
152
152
  });
153
-
154
153
  });
@@ -1,25 +1,25 @@
1
1
  function toRoman(number) {
2
2
  let result = '';
3
3
  const mappings = [
4
- { arabic: 1000, roman: 'M' },
5
- { arabic: 900, roman: 'CM' },
6
- { arabic: 500, roman: 'D' },
7
- { arabic: 400, roman: 'CD' },
8
- { arabic: 100, roman: 'C' },
9
- { arabic: 90, roman: 'XC' },
10
- { arabic: 50, roman: 'L' },
11
- { arabic: 40, roman: 'XL' },
12
- { arabic: 10, roman: 'X' },
13
- { arabic: 9, roman: 'IX' },
14
- { arabic: 5, roman: 'V' },
15
- { arabic: 4, roman: 'IV' },
16
- { arabic: 1, roman: 'I' }
4
+ { arabic: 1000, roman: 'M' },
5
+ { arabic: 900, roman: 'CM' },
6
+ { arabic: 500, roman: 'D' },
7
+ { arabic: 400, roman: 'CD' },
8
+ { arabic: 100, roman: 'C' },
9
+ { arabic: 90, roman: 'XC' },
10
+ { arabic: 50, roman: 'L' },
11
+ { arabic: 40, roman: 'XL' },
12
+ { arabic: 10, roman: 'X' },
13
+ { arabic: 9, roman: 'IX' },
14
+ { arabic: 5, roman: 'V' },
15
+ { arabic: 4, roman: 'IV' },
16
+ { arabic: 1, roman: 'I' },
17
17
  ];
18
18
 
19
- mappings.forEach(mapping => {
19
+ mappings.forEach((mapping) => {
20
20
  while (number >= mapping.arabic) {
21
- result = result + mapping.roman;
22
- number = number - mapping.arabic;
21
+ result += mapping.roman;
22
+ number -= mapping.arabic;
23
23
  }
24
24
  });
25
25
 
@@ -3,7 +3,7 @@ import Matrix from './saddle-points';
3
3
  describe('Matrix', () => {
4
4
  test('extracts a row', () => {
5
5
  const matrix = new Matrix('1 2\n10 20');
6
- expect(matrix.rows[0]).toEqual([1,2]);
6
+ expect(matrix.rows[0]).toEqual([1, 2]);
7
7
  });
8
8
 
9
9
  xtest('extracts other row', () => {
@@ -28,12 +28,12 @@ describe('Matrix', () => {
28
28
 
29
29
  xtest('a saddle point', () => {
30
30
  const matrix = new Matrix('1 2\n3 4');
31
- expect(matrix.saddlePoints).toEqual([[0,1]]);
31
+ expect(matrix.saddlePoints).toEqual([[0, 1]]);
32
32
  });
33
33
 
34
34
  xtest('another saddle point', () => {
35
35
  const matrix = new Matrix('18 3 39 19 91\n38 10 8 77 320\n3 4 8 6 7');
36
- expect(matrix.saddlePoints).toEqual([[2,2]]);
36
+ expect(matrix.saddlePoints).toEqual([[2, 2]]);
37
37
  });
38
38
 
39
39
  xtest('multiple saddle points', () => {
@@ -1,14 +1,14 @@
1
1
  const smallNumbers = {
2
- 0: 'zero',
3
- 1: 'one',
4
- 2: 'two',
5
- 3: 'three',
6
- 4: 'four',
7
- 5: 'five',
8
- 6: 'six',
9
- 7: 'seven',
10
- 8: 'eight',
11
- 9: 'nine',
2
+ 0: 'zero',
3
+ 1: 'one',
4
+ 2: 'two',
5
+ 3: 'three',
6
+ 4: 'four',
7
+ 5: 'five',
8
+ 6: 'six',
9
+ 7: 'seven',
10
+ 8: 'eight',
11
+ 9: 'nine',
12
12
  10: 'ten',
13
13
  11: 'eleven',
14
14
  12: 'twelve',
@@ -18,7 +18,7 @@ const smallNumbers = {
18
18
  16: 'sixteen',
19
19
  17: 'seventeen',
20
20
  18: 'eighteen',
21
- 19: 'nineteen'
21
+ 19: 'nineteen',
22
22
  };
23
23
 
24
24
  const decades = {
@@ -29,31 +29,32 @@ const decades = {
29
29
  60: 'sixty',
30
30
  70: 'seventy',
31
31
  80: 'eighty',
32
- 90: 'ninety'
32
+ 90: 'ninety',
33
33
  };
34
34
 
35
35
  const bigNumbers = {
36
- 1000: 'thousand',
37
- 1000000: 'million',
38
- 1000000000: 'billion'
36
+ 1000: 'thousand',
37
+ 1000000: 'million',
38
+ 1000000000: 'billion',
39
39
  };
40
40
 
41
41
  function bigPart(number) {
42
- let factor, result = '';
42
+ let factor,
43
+ result = '';
43
44
  for (let bigNumber = 1000000000; bigNumber >= 1000; bigNumber /= 1000) {
44
45
  if (number.current >= bigNumber) {
45
46
  factor = Math.floor(number.current / bigNumber);
46
- result += threeDigit(factor) + ' ' + bigNumbers[bigNumber] + ' ';
47
- number.current = number.current - factor * bigNumber;
47
+ result += `${threeDigit(factor)} ${bigNumbers[bigNumber]} `;
48
+ number.current -= factor * bigNumber;
48
49
  }
49
50
  }
50
51
  return result;
51
52
  }
52
53
 
53
- const sayDecade = n => {
54
+ const sayDecade = (n) => {
54
55
  for (let decade = 90; decade >= 20; decade -= 10) {
55
56
  if (n >= decade) {
56
- return decades[decade] + '-' + smallNumbers[n - decade];
57
+ return `${decades[decade]}-${smallNumbers[n - decade]}`;
57
58
  }
58
59
  }
59
60
  };
@@ -61,19 +62,18 @@ const sayDecade = n => {
61
62
  const twoDigit = n => n < 20 ? smallNumbers[n] : sayDecade(n);
62
63
 
63
64
  const threeDigit = n => n < 100 ? twoDigit(n)
64
- : smallNumbers[Math.floor(n / 100)] + ' hundred ' + twoDigit(n % 100);
65
+ : `${smallNumbers[Math.floor(n / 100)]} hundred ${twoDigit(n % 100)}`;
65
66
 
66
67
  export default class Say {
67
68
  inEnglish(n) {
68
69
  let result;
69
- const number = {current: n};
70
+ const number = { current: n };
70
71
 
71
- if (0 <= n && n < 1000000000000) {
72
+ if (n >= 0 && n < 1000000000000) {
72
73
  result = bigPart(number);
73
74
  result += threeDigit(number.current);
74
75
  return result.replace(/.zero/, '');
75
- } else {
76
- throw new Error('Number must be between 0 and 999,999,999,999.');
77
76
  }
77
+ throw new Error('Number must be between 0 and 999,999,999,999.');
78
78
  }
79
79
  }
@@ -65,14 +65,13 @@ describe('say', () => {
65
65
 
66
66
  xtest('raises an error below zero', () => {
67
67
  expect(() => {
68
- say.inEnglish(-1)
68
+ say.inEnglish(-1);
69
69
  }).toThrow(new Error('Number must be between 0 and 999,999,999,999.'));
70
70
  });
71
71
 
72
72
  xtest('raises an error above 999,999,999,999', () => {
73
73
  expect(() => {
74
- say.inEnglish(1000000000000)
74
+ say.inEnglish(1000000000000);
75
75
  }).toThrow(new Error('Number must be between 0 and 999,999,999,999.'));
76
76
  });
77
-
78
77
  });
@@ -1,17 +1,35 @@
1
1
  const letterScores = {
2
- a : 1, e : 1, i : 1, o : 1,
3
- u : 1, l : 1, n : 1, r : 1,
4
- s : 1, t : 1, d : 2, g : 2,
5
- b : 3, c : 3, m : 3, p : 3,
6
- f : 4, h : 4, v : 4, w : 4,
7
- y : 4, k : 5, j : 8, x : 8,
8
- q : 10, z : 10
2
+ a: 1,
3
+ e: 1,
4
+ i: 1,
5
+ o: 1,
6
+ u: 1,
7
+ l: 1,
8
+ n: 1,
9
+ r: 1,
10
+ s: 1,
11
+ t: 1,
12
+ d: 2,
13
+ g: 2,
14
+ b: 3,
15
+ c: 3,
16
+ m: 3,
17
+ p: 3,
18
+ f: 4,
19
+ h: 4,
20
+ v: 4,
21
+ w: 4,
22
+ y: 4,
23
+ k: 5,
24
+ j: 8,
25
+ x: 8,
26
+ q: 10,
27
+ z: 10,
9
28
  };
10
29
 
11
- const letterScore = (letter) => letterScores[letter] || 0;
30
+ const letterScore = letter => letterScores[letter] || 0;
12
31
 
13
32
  export default (word) => {
14
-
15
33
  word = word ? word.toLowerCase() : '';
16
34
 
17
35
  let sum = 0;
@@ -1,16 +1,15 @@
1
1
  import score from './scrabble-score';
2
2
 
3
- describe('Scrabble', function() {
4
- test('scores an empty word as zero',() => expect(score('')).toEqual(0));
3
+ describe('Scrabble', () => {
4
+ test('scores an empty word as zero', () => expect(score('')).toEqual(0));
5
5
 
6
- xtest('scores a null as zero',() => expect(score(null)).toEqual(0));
6
+ xtest('scores a null as zero', () => expect(score(null)).toEqual(0));
7
7
 
8
- xtest('scores a very short word',() => expect(score('a')).toEqual(1));
8
+ xtest('scores a very short word', () => expect(score('a')).toEqual(1));
9
9
 
10
10
  xtest('scores the word by the number of letters', () => expect(score('street')).toEqual(6));
11
11
 
12
- xtest('scores more complicated words with more',() => expect(score('quirky')).toEqual(22));
13
-
14
- xtest('scores case insensitive words',() => expect(score('OXYPHENBUTAZONE')).toEqual(41));
12
+ xtest('scores more complicated words with more', () => expect(score('quirky')).toEqual(22));
15
13
 
14
+ xtest('scores case insensitive words', () => expect(score('OXYPHENBUTAZONE')).toEqual(41));
16
15
  });
@@ -1,5 +1,5 @@
1
1
  export default function (handshake) {
2
- const HANDSHAKE_COMMANDS = [ 'wink', 'double blink', 'close your eyes', 'jump', 'REVERSE' ]
2
+ const HANDSHAKE_COMMANDS = ['wink', 'double blink', 'close your eyes', 'jump', 'REVERSE'];
3
3
 
4
4
  if (typeof handshake !== 'number') {
5
5
  throw new Error('Handshake must be a number');
@@ -12,7 +12,7 @@ export default function (handshake) {
12
12
 
13
13
  for (let i = 0; i < HANDSHAKE_COMMANDS.length; i++) {
14
14
  const currentCommand = HANDSHAKE_COMMANDS[i];
15
- const handshakeHasCommand = handshake & Math.pow(2,i);
15
+ const handshakeHasCommand = handshake & Math.pow(2, i);
16
16
 
17
17
  if (handshakeHasCommand) {
18
18
  if (currentCommand === 'REVERSE') {
@@ -27,5 +27,4 @@ export default function (handshake) {
27
27
  };
28
28
 
29
29
  this.shakeWith = this.calculateHandshake(handshake);
30
-
31
30
  }
@@ -1,7 +1,6 @@
1
1
  import SecretHandshake from './secret-handshake';
2
2
 
3
3
  describe('Secret Handshake', () => {
4
-
5
4
  test('binary 1 (hexadecimal 0x01) is a wink', () => {
6
5
  const handshake = new SecretHandshake(0x01);
7
6
  expect(handshake.commands()).toEqual(['wink']);
@@ -24,23 +23,22 @@ describe('Secret Handshake', () => {
24
23
 
25
24
  xtest('binary 11 (hexadecimal 0x03) is wink and double blink', () => {
26
25
  const handshake = new SecretHandshake(0x03);
27
- expect(handshake.commands()).toEqual(['wink','double blink']);
26
+ expect(handshake.commands()).toEqual(['wink', 'double blink']);
28
27
  });
29
28
 
30
29
  xtest('binary 10011 (hexadecimal 0x13) is double blink and wink', () => {
31
30
  const handshake = new SecretHandshake(0x13);
32
- expect(handshake.commands()).toEqual(['double blink','wink']);
31
+ expect(handshake.commands()).toEqual(['double blink', 'wink']);
33
32
  });
34
33
 
35
34
  xtest('binary 11111 (hexadecimal 0x1F) is jump, close your eyes, double blink, and wink', () => {
36
35
  const handshake = new SecretHandshake(0x1F);
37
- expect(handshake.commands()).toEqual(['jump','close your eyes','double blink','wink']);
36
+ expect(handshake.commands()).toEqual(['jump', 'close your eyes', 'double blink', 'wink']);
38
37
  });
39
38
 
40
39
  xtest('text is an invalid secret handshake', () => {
41
40
  expect(() => new SecretHandshake('piggies'))
42
41
  .toThrow(new Error('Handshake must be a number'));
43
42
  });
44
-
45
43
  });
46
44
 
@@ -1,7 +1,6 @@
1
1
  import Series from './series';
2
2
 
3
3
  describe('Series', () => {
4
-
5
4
  test('has digits (short)', () => {
6
5
  expect(new Series('01234').digits).toEqual([0, 1, 2, 3, 4]);
7
6
  });
@@ -52,9 +51,8 @@ describe('Series', () => {
52
51
  });
53
52
 
54
53
  xtest('throws an error if not enough digits to slice', () => {
55
- expect( () => {
54
+ expect(() => {
56
55
  new Series('01032987583').slices(12);
57
56
  }).toThrow(new Error('Slice size is too big.'));
58
57
  });
59
-
60
58
  });
@@ -1,7 +1,7 @@
1
1
  function newArrayWithRange(first, last) {
2
2
  let i;
3
3
  const array = [];
4
- for ( i = first; i <= last; i++ ) {
4
+ for (i = first; i <= last; i++) {
5
5
  array.push(i);
6
6
  }
7
7
  return array;
@@ -12,7 +12,8 @@ function indivisibleBy(value) {
12
12
  }
13
13
 
14
14
  function sieve(n) {
15
- let prime, possibilities;
15
+ let prime,
16
+ possibilities;
16
17
  const primes = [];
17
18
 
18
19
  possibilities = newArrayWithRange(2, n);
@@ -20,7 +21,7 @@ function sieve(n) {
20
21
  do {
21
22
  prime = possibilities.shift();
22
23
  primes.push(prime);
23
- possibilities = possibilities.filter( indivisibleBy, prime );
24
+ possibilities = possibilities.filter(indivisibleBy, prime);
24
25
  } while (possibilities.length > 0);
25
26
 
26
27
  return primes;
@@ -1,7 +1,6 @@
1
1
  import Sieve from './sieve';
2
2
 
3
3
  describe('Sieve', () => {
4
-
5
4
  test('finds primes up to 10', () => {
6
5
  expect(new Sieve(10).primes).toEqual([2, 3, 5, 7]);
7
6
  });
@@ -13,5 +12,4 @@ describe('Sieve', () => {
13
12
  xtest('finds primes up to 1000', () => {
14
13
  expect(new Sieve(1000).primes).toEqual([2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]);
15
14
  });
16
-
17
15
  });
@@ -1,7 +1,7 @@
1
1
  const ALPHA = 'abcdefghijklmnopqrstuvwxyz';
2
2
 
3
3
  function generateKey() {
4
- return Array.apply(null, Array(100))
4
+ return Array(...Array(100))
5
5
  .map(() => ALPHA[Math.floor(Math.random() * ALPHA.length)])
6
6
  .join('');
7
7
  }
@@ -18,20 +18,19 @@ function xCode(key, inText, sign) {
18
18
  const mod = (n, m) => (n % m + m) % m;
19
19
 
20
20
  export default function (key) {
21
-
22
21
  if (typeof key === 'undefined') {
23
22
  key = generateKey();
24
- } else if (key.length === 0 || key.match(/[^a-z]/, "g")) {
25
- throw new Error("Bad key");
23
+ } else if (key.length === 0 || key.match(/[^a-z]/, 'g')) {
24
+ throw new Error('Bad key');
26
25
  }
27
26
 
28
27
  return {
29
- key: key,
30
- encode: function (plainText) {
28
+ key,
29
+ encode(plainText) {
31
30
  return xCode(this.key, plainText, 1);
32
31
  },
33
- decode: function (encodedText) {
32
+ decode(encodedText) {
34
33
  return xCode(this.key, encodedText, -1);
35
- }
36
- }
34
+ },
35
+ };
37
36
  }
@@ -1,6 +1,6 @@
1
1
  import Cipher from './simple-cipher';
2
2
 
3
- describe('Random key cipher', () => {
3
+ describe('Random key cipher', () => {
4
4
  const cipher = new Cipher();
5
5
 
6
6
  test('has a key made of letters', () => {
@@ -26,19 +26,19 @@ describe('Random key cipher', () => {
26
26
 
27
27
  describe('Incorrect key cipher', () => {
28
28
  xtest('throws an error with an all caps key', () => {
29
- expect( () => {
29
+ expect(() => {
30
30
  new Cipher('ABCDEF');
31
31
  }).toThrow(new Error('Bad key'));
32
32
  });
33
33
 
34
34
  xtest('throws an error with a numeric key', () => {
35
- expect( () => {
35
+ expect(() => {
36
36
  new Cipher('12345');
37
37
  }).toThrow(new Error('Bad key'));
38
38
  });
39
39
 
40
40
  xtest('throws an error with an empty key', () => {
41
- expect( () => {
41
+ expect(() => {
42
42
  new Cipher('');
43
43
  }).toThrow(new Error('Bad key'));
44
44
  });
@@ -6,7 +6,7 @@ const EARTH_TO_OTHER_PLANETS = {
6
6
  jupiter: 11.862615,
7
7
  saturn: 29.447498,
8
8
  uranus: 84.016846,
9
- neptune: 164.79132
9
+ neptune: 164.79132,
10
10
  };
11
11
 
12
12
  class SpaceAge {