trackler 2.2.1.69 → 2.2.1.70

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/isbn-verifier/description.md +25 -20
  4. data/tracks/c/bin/run-tests +1 -2
  5. data/tracks/c/exercises/acronym/makefile +10 -0
  6. data/tracks/c/exercises/all-your-base/makefile +10 -0
  7. data/tracks/c/exercises/allergies/makefile +10 -0
  8. data/tracks/c/exercises/anagram/makefile +9 -0
  9. data/tracks/c/exercises/atbash-cipher/makefile +9 -0
  10. data/tracks/c/exercises/beer-song/makefile +9 -0
  11. data/tracks/c/exercises/binary/makefile +9 -0
  12. data/tracks/c/exercises/binary-search/makefile +9 -0
  13. data/tracks/c/exercises/bob/makefile +9 -0
  14. data/tracks/c/exercises/clock/makefile +9 -0
  15. data/tracks/c/exercises/collatz-conjecture/makefile +10 -0
  16. data/tracks/c/exercises/difference-of-squares/makefile +9 -0
  17. data/tracks/c/exercises/gigasecond/makefile +9 -0
  18. data/tracks/c/exercises/grains/makefile +9 -0
  19. data/tracks/c/exercises/hamming/makefile +9 -0
  20. data/tracks/c/exercises/isogram/makefile +10 -0
  21. data/tracks/c/exercises/largest-series-product/makefile +9 -0
  22. data/tracks/c/exercises/leap/makefile +9 -0
  23. data/tracks/c/exercises/meetup/makefile +10 -0
  24. data/tracks/c/exercises/nth-prime/makefile +9 -0
  25. data/tracks/c/exercises/nucleotide-count/makefile +10 -0
  26. data/tracks/c/exercises/palindrome-products/makefile +9 -0
  27. data/tracks/c/exercises/pangram/makefile +9 -0
  28. data/tracks/c/exercises/pascals-triangle/makefile +9 -0
  29. data/tracks/c/exercises/perfect-numbers/makefile +8 -0
  30. data/tracks/c/exercises/phone-number/makefile +9 -0
  31. data/tracks/c/exercises/queen-attack/makefile +10 -0
  32. data/tracks/c/exercises/raindrops/makefile +9 -0
  33. data/tracks/c/exercises/react/makefile +9 -0
  34. data/tracks/c/exercises/rna-transcription/makefile +10 -0
  35. data/tracks/c/exercises/robot-simulator/makefile +9 -0
  36. data/tracks/c/exercises/roman-numerals/makefile +9 -0
  37. data/tracks/c/exercises/scrabble-score/makefile +9 -0
  38. data/tracks/c/exercises/series/makefile +9 -0
  39. data/tracks/c/exercises/sieve/makefile +10 -0
  40. data/tracks/c/exercises/space-age/makefile +9 -0
  41. data/tracks/c/exercises/sublist/makefile +10 -0
  42. data/tracks/c/exercises/sum-of-multiples/makefile +10 -0
  43. data/tracks/c/exercises/triangle/makefile +9 -0
  44. data/tracks/c/exercises/word-count/makefile +9 -0
  45. data/tracks/delphi/config.json +10 -0
  46. data/tracks/delphi/exercises/reverse-string/README.md +34 -0
  47. data/tracks/delphi/exercises/reverse-string/ReverseString.dpr +60 -0
  48. data/tracks/delphi/exercises/reverse-string/uReverseStringExample.pas +18 -0
  49. data/tracks/delphi/exercises/reverse-string/uReverseStringTests.pas +69 -0
  50. data/tracks/fsharp/exercises/forth/Example.fs +29 -25
  51. data/tracks/fsharp/exercises/forth/ForthTest.fs +190 -74
  52. data/tracks/fsharp/exercises/markdown/MarkdownTest.fs +6 -3
  53. data/tracks/fsharp/generators/Exercise.fs +4 -4
  54. data/tracks/fsharp/generators/Generators.fs +29 -1
  55. data/tracks/java/exercises/allergies/.meta/src/reference/java/Allergen.java +2 -2
  56. data/tracks/java/exercises/allergies/.meta/src/reference/java/Allergies.java +4 -4
  57. data/tracks/java/exercises/allergies/src/main/java/Allergen.java +2 -2
  58. data/tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java +5 -5
  59. data/tracks/java/exercises/bob/.meta/src/reference/java/Bob.java +8 -5
  60. data/tracks/java/exercises/kindergarten-garden/src/main/java/KindergartenGarden.java +17 -0
  61. data/tracks/java/exercises/nth-prime/src/main/java/PrimeCalculator.java +7 -0
  62. data/tracks/java/exercises/rotational-cipher/src/main/java/RotationalCipher.java +11 -0
  63. data/tracks/javascript/config.json +15 -0
  64. data/tracks/javascript/exercises/connect/README.md +59 -0
  65. data/tracks/javascript/exercises/connect/connect.spec.js +108 -0
  66. data/tracks/javascript/exercises/connect/example.js +105 -0
  67. data/tracks/kotlin/README.md +1 -1
  68. data/tracks/kotlin/exercises/hello-world/TUTORIAL.md +2 -2
  69. metadata +12 -6
  70. data/tracks/java/exercises/book-store/.meta/src/reference/java/.keep +0 -0
  71. data/tracks/java/exercises/nth-prime/src/main/java/.keep +0 -0
  72. data/tracks/java/exercises/rotational-cipher/src/main/java/.keep +0 -0
  73. data/tracks/javascript/package-lock.json +0 -1895
@@ -0,0 +1,108 @@
1
+ var Board = require('./connect');
2
+
3
+ describe('Judging a game of connect', function () {
4
+ it('an empty board has no winner', function () {
5
+ var board = [
6
+ '. . . . .',
7
+ ' . . . . .',
8
+ ' . . . . .',
9
+ ' . . . . .',
10
+ ' . . . . .'
11
+ ];
12
+ expect(new Board(board).winner()).toEqual('');
13
+ });
14
+
15
+ xit('X can win on a 1x1 board', function () {
16
+ var board = [
17
+ 'X'
18
+ ];
19
+ expect(new Board(board).winner()).toEqual('X');
20
+ });
21
+
22
+ xit('O can win on a 1x1 board', function () {
23
+ var board = [
24
+ 'O'
25
+ ];
26
+ expect(new Board(board).winner()).toEqual('O');
27
+ });
28
+
29
+ xit('only edges does not make a winner', function () {
30
+ var board = [
31
+ 'O O O X',
32
+ ' X . . X',
33
+ ' X . . X',
34
+ ' X O O O'
35
+ ];
36
+ expect(new Board(board).winner()).toEqual('');
37
+ });
38
+
39
+ xit('illegal diagonal does not make a winner', function () {
40
+ var board = [
41
+ 'X O . .',
42
+ ' O X X X',
43
+ ' O X O .',
44
+ ' . O X .',
45
+ ' X X O O'
46
+ ];
47
+ expect(new Board(board).winner()).toEqual('');
48
+ });
49
+
50
+ xit('nobody wins crossing adjacent angles', function () {
51
+ var board = [
52
+ 'X . . .',
53
+ ' . X O .',
54
+ ' O . X O',
55
+ ' . O . X',
56
+ ' . . O .'
57
+ ];
58
+ expect(new Board(board).winner()).toEqual('');
59
+ });
60
+
61
+ xit('X wins crossing from left to right', function () {
62
+ var board = [
63
+ '. O . .',
64
+ ' O X X X',
65
+ ' O X O .',
66
+ ' X X O X',
67
+ ' . O X .'
68
+ ];
69
+ expect(new Board(board).winner()).toEqual('X');
70
+ });
71
+
72
+ xit('O wins crossing from top to bottom', function () {
73
+ var board = [
74
+ '. O . .',
75
+ ' O X X X',
76
+ ' O O O .',
77
+ ' X X O X',
78
+ ' . O X .'
79
+ ];
80
+ expect(new Board(board).winner()).toEqual('O');
81
+ });
82
+
83
+ xit('X wins using a convoluted path', function () {
84
+ var board = [
85
+ '. X X . .',
86
+ ' X . X . X',
87
+ ' . X . X .',
88
+ ' . X X . .',
89
+ ' O O O O O'
90
+ ];
91
+ expect(new Board(board).winner()).toEqual('X');
92
+ });
93
+
94
+ xit('X wins using a spiral path', function () {
95
+ var board = [
96
+ 'O X X X X X X X X',
97
+ ' O X O O O O O O O',
98
+ ' O X O X X X X X O',
99
+ ' O X O X O O O X O',
100
+ ' O X O X X X O X O',
101
+ ' O X O O O X O X O',
102
+ ' O X X X X X O X O',
103
+ ' O O O O O O O X O',
104
+ ' X X X X X X X X O'
105
+ ];
106
+ expect(new Board(board).winner()).toEqual('X');
107
+ });
108
+ });
@@ -0,0 +1,105 @@
1
+ /**
2
+ * "Player O" plays from top to bottom, "Player X" plays from left to right.
3
+ * @param {string[]} initBoard - The starting state of the board
4
+ * @returns {Object} - The board business object
5
+ */
6
+ var Board = function (initBoard) {
7
+ this.board = initBoard.slice();
8
+ };
9
+
10
+ Board.prototype.winner = function () {
11
+ var players = ['X', 'O'];
12
+ for (var i = 0; i < players.length; i++) {
13
+ if (this.checkWin(players[i])) {
14
+ return players[i];
15
+ }
16
+ }
17
+ return '';
18
+ };
19
+
20
+ Board.prototype.checkWin = function (player) {
21
+ var positions = this.startPositions(player);
22
+ for (var i = 0; i < positions.length; i++) {
23
+ if (this.search(positions[i], player, [])) {
24
+ return true;
25
+ }
26
+ }
27
+ return false;
28
+ };
29
+
30
+ Board.prototype.search = function (pos, XorO, isChecked) {
31
+ var self = this;
32
+ if (!this.containsPiece(pos, XorO)) {
33
+ return false;
34
+ }
35
+ if (this.winningSpot(pos, XorO)) {
36
+ return true;
37
+ }
38
+ var checked = isChecked.slice(0);
39
+ checked.push(pos);
40
+
41
+ var matches = this.neighbors(pos)
42
+ .filter(function (cell) {
43
+ return self.containsPiece(cell, XorO) &&
44
+ checked.filter(
45
+ function (spot) {
46
+ return locationMatch(spot, cell);
47
+ }
48
+ ).length === 0;
49
+ });
50
+
51
+ function locationMatch(spot, cell) {
52
+ return spot.x === cell.x && spot.y === cell.y;
53
+ }
54
+
55
+ if (matches.length === 0) {
56
+ return false;
57
+ }
58
+
59
+ return matches
60
+ .filter(
61
+ function (spot) {
62
+ return self.search(spot, XorO, checked);
63
+ }
64
+ ).length > 0;
65
+ };
66
+
67
+ Board.prototype.neighbors = function (cell) {
68
+ return [
69
+ {x: cell.x, y: cell.y + 2},
70
+ {x: cell.x, y: cell.y - 2},
71
+
72
+ {x: cell.x + 1, y: cell.y + 1},
73
+ {x: cell.x - 1, y: cell.y + 1},
74
+
75
+ {x: cell.x + 1, y: cell.y - 1},
76
+ {x: cell.x - 1, y: cell.y - 1}
77
+ ];
78
+ };
79
+
80
+ Board.prototype.startPositions = function (XorO) {
81
+ var self = this;
82
+ return XorO === 'X' ?
83
+ this.board
84
+ .map(function (pos, i) {
85
+ return {x: i, y: i};
86
+ }) :
87
+ Array.prototype
88
+ .map
89
+ .call(self.board[0], function (pos, i) {
90
+ return {x: 0, y: i};
91
+ });
92
+ };
93
+
94
+ Board.prototype.winningSpot = function (cell, XorO) {
95
+ return XorO === 'X' ?
96
+ cell.y === this.board[0].length - 1 + cell.x :
97
+ cell.x === this.board.length - 1;
98
+ };
99
+
100
+ Board.prototype.containsPiece = function (cell, XorO) {
101
+ return this.board[cell.x] && this.board[cell.x][cell.y] === XorO;
102
+ };
103
+
104
+
105
+ module.exports = Board;
@@ -31,7 +31,7 @@ To submit a fix for an existing exercise or port an exercise to Kotlin with the
31
31
 
32
32
  1. **Ensure you have the basic Java tooling installed:** JDK 1.8+, an editor and Gradle 2.x.
33
33
 
34
- (see [exercism.io: Installing Kotlin](http://exercism.io/languages/kotlin/installing))
34
+ (see [exercism.io: Installing Kotlin](http://exercism.io/languages/kotlin/installation))
35
35
  - **Setup a branch on a fork of [exercism/kotlin](https://github.com/exercism/kotlin) on your computer.**
36
36
 
37
37
  Use those instructions (in conjunction with the [Git Basics doc](https://github.com/exercism/docs/blob/master/contributing/git-basics.md)) to:
@@ -19,7 +19,7 @@ Each exercise comes with a set of tests. The first pass through the
19
19
  exercise is about getting all of the tests to pass, one at a time.
20
20
 
21
21
  If you have not installed the Java Development Kit and Gradle, you must do
22
- so now. For help with this, see: http://exercism.io/languages/kotlin/installing
22
+ so now. For help with this, see: http://exercism.io/languages/kotlin/installation
23
23
 
24
24
  ----
25
25
 
@@ -260,7 +260,7 @@ use the capitalized form on the person's name, regardless of the case they
260
260
  used.
261
261
 
262
262
  In that situation, you'd:
263
-
263
+
264
264
  1. add a new test setting up that new expectation,
265
265
  2. implement that in the code (the same process we just went through
266
266
  together, above).
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trackler
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1.69
4
+ version: 2.2.1.70
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Owen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-21 00:00:00.000000000 Z
11
+ date: 2017-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -3310,6 +3310,10 @@ files:
3310
3310
  - tracks/delphi/exercises/raindrops/raindrops.dpr
3311
3311
  - tracks/delphi/exercises/raindrops/uRaindropsExample.pas
3312
3312
  - tracks/delphi/exercises/raindrops/uRaindropsTest.pas
3313
+ - tracks/delphi/exercises/reverse-string/README.md
3314
+ - tracks/delphi/exercises/reverse-string/ReverseString.dpr
3315
+ - tracks/delphi/exercises/reverse-string/uReverseStringExample.pas
3316
+ - tracks/delphi/exercises/reverse-string/uReverseStringTests.pas
3313
3317
  - tracks/delphi/exercises/rna-transcription/README.md
3314
3318
  - tracks/delphi/exercises/rna-transcription/RnaTranscription.dpr
3315
3319
  - tracks/delphi/exercises/rna-transcription/uRnaTranscriptionExample.pas
@@ -7057,7 +7061,6 @@ files:
7057
7061
  - tracks/java/exercises/bob/build.gradle
7058
7062
  - tracks/java/exercises/bob/src/main/java/.keep
7059
7063
  - tracks/java/exercises/bob/src/test/java/BobTest.java
7060
- - tracks/java/exercises/book-store/.meta/src/reference/java/.keep
7061
7064
  - tracks/java/exercises/book-store/.meta/src/reference/java/BookStore.java
7062
7065
  - tracks/java/exercises/book-store/README.md
7063
7066
  - tracks/java/exercises/book-store/build.gradle
@@ -7205,6 +7208,7 @@ files:
7205
7208
  - tracks/java/exercises/kindergarten-garden/.meta/src/reference/java/Plant.java
7206
7209
  - tracks/java/exercises/kindergarten-garden/README.md
7207
7210
  - tracks/java/exercises/kindergarten-garden/build.gradle
7211
+ - tracks/java/exercises/kindergarten-garden/src/main/java/KindergartenGarden.java
7208
7212
  - tracks/java/exercises/kindergarten-garden/src/main/java/Plant.java
7209
7213
  - tracks/java/exercises/kindergarten-garden/src/test/java/KindergartenGardenTest.java
7210
7214
  - tracks/java/exercises/largest-series-product/.meta/src/reference/java/LargestSeriesProductCalculator.java
@@ -7250,7 +7254,7 @@ files:
7250
7254
  - tracks/java/exercises/nth-prime/.meta/src/reference/java/PrimeCalculator.java
7251
7255
  - tracks/java/exercises/nth-prime/README.md
7252
7256
  - tracks/java/exercises/nth-prime/build.gradle
7253
- - tracks/java/exercises/nth-prime/src/main/java/.keep
7257
+ - tracks/java/exercises/nth-prime/src/main/java/PrimeCalculator.java
7254
7258
  - tracks/java/exercises/nth-prime/src/test/java/PrimeCalculatorTest.java
7255
7259
  - tracks/java/exercises/nucleotide-count/.meta/src/reference/java/NucleotideCounter.java
7256
7260
  - tracks/java/exercises/nucleotide-count/README.md
@@ -7373,7 +7377,7 @@ files:
7373
7377
  - tracks/java/exercises/rotational-cipher/.meta/src/reference/java/RotationalCipher.java
7374
7378
  - tracks/java/exercises/rotational-cipher/README.md
7375
7379
  - tracks/java/exercises/rotational-cipher/build.gradle
7376
- - tracks/java/exercises/rotational-cipher/src/main/java/.keep
7380
+ - tracks/java/exercises/rotational-cipher/src/main/java/RotationalCipher.java
7377
7381
  - tracks/java/exercises/rotational-cipher/src/test/java/RotationalCipherTest.java
7378
7382
  - tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
7379
7383
  - tracks/java/exercises/run-length-encoding/README.md
@@ -7598,6 +7602,9 @@ files:
7598
7602
  - tracks/javascript/exercises/collatz-conjecture/README.md
7599
7603
  - tracks/javascript/exercises/collatz-conjecture/collatz-conjecture.spec.js
7600
7604
  - tracks/javascript/exercises/collatz-conjecture/example.js
7605
+ - tracks/javascript/exercises/connect/README.md
7606
+ - tracks/javascript/exercises/connect/connect.spec.js
7607
+ - tracks/javascript/exercises/connect/example.js
7601
7608
  - tracks/javascript/exercises/crypto-square/README.md
7602
7609
  - tracks/javascript/exercises/crypto-square/crypto-square.spec.js
7603
7610
  - tracks/javascript/exercises/crypto-square/example.js
@@ -7807,7 +7814,6 @@ files:
7807
7814
  - tracks/javascript/exercises/zipper/example.js
7808
7815
  - tracks/javascript/exercises/zipper/zipper.spec.js
7809
7816
  - tracks/javascript/img/icon.png
7810
- - tracks/javascript/package-lock.json
7811
7817
  - tracks/javascript/package.json
7812
7818
  - tracks/julia/.git
7813
7819
  - tracks/julia/.gitignore
File without changes