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.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/problem-specifications/exercises/isbn-verifier/description.md +25 -20
- data/tracks/c/bin/run-tests +1 -2
- data/tracks/c/exercises/acronym/makefile +10 -0
- data/tracks/c/exercises/all-your-base/makefile +10 -0
- data/tracks/c/exercises/allergies/makefile +10 -0
- data/tracks/c/exercises/anagram/makefile +9 -0
- data/tracks/c/exercises/atbash-cipher/makefile +9 -0
- data/tracks/c/exercises/beer-song/makefile +9 -0
- data/tracks/c/exercises/binary/makefile +9 -0
- data/tracks/c/exercises/binary-search/makefile +9 -0
- data/tracks/c/exercises/bob/makefile +9 -0
- data/tracks/c/exercises/clock/makefile +9 -0
- data/tracks/c/exercises/collatz-conjecture/makefile +10 -0
- data/tracks/c/exercises/difference-of-squares/makefile +9 -0
- data/tracks/c/exercises/gigasecond/makefile +9 -0
- data/tracks/c/exercises/grains/makefile +9 -0
- data/tracks/c/exercises/hamming/makefile +9 -0
- data/tracks/c/exercises/isogram/makefile +10 -0
- data/tracks/c/exercises/largest-series-product/makefile +9 -0
- data/tracks/c/exercises/leap/makefile +9 -0
- data/tracks/c/exercises/meetup/makefile +10 -0
- data/tracks/c/exercises/nth-prime/makefile +9 -0
- data/tracks/c/exercises/nucleotide-count/makefile +10 -0
- data/tracks/c/exercises/palindrome-products/makefile +9 -0
- data/tracks/c/exercises/pangram/makefile +9 -0
- data/tracks/c/exercises/pascals-triangle/makefile +9 -0
- data/tracks/c/exercises/perfect-numbers/makefile +8 -0
- data/tracks/c/exercises/phone-number/makefile +9 -0
- data/tracks/c/exercises/queen-attack/makefile +10 -0
- data/tracks/c/exercises/raindrops/makefile +9 -0
- data/tracks/c/exercises/react/makefile +9 -0
- data/tracks/c/exercises/rna-transcription/makefile +10 -0
- data/tracks/c/exercises/robot-simulator/makefile +9 -0
- data/tracks/c/exercises/roman-numerals/makefile +9 -0
- data/tracks/c/exercises/scrabble-score/makefile +9 -0
- data/tracks/c/exercises/series/makefile +9 -0
- data/tracks/c/exercises/sieve/makefile +10 -0
- data/tracks/c/exercises/space-age/makefile +9 -0
- data/tracks/c/exercises/sublist/makefile +10 -0
- data/tracks/c/exercises/sum-of-multiples/makefile +10 -0
- data/tracks/c/exercises/triangle/makefile +9 -0
- data/tracks/c/exercises/word-count/makefile +9 -0
- data/tracks/delphi/config.json +10 -0
- data/tracks/delphi/exercises/reverse-string/README.md +34 -0
- data/tracks/delphi/exercises/reverse-string/ReverseString.dpr +60 -0
- data/tracks/delphi/exercises/reverse-string/uReverseStringExample.pas +18 -0
- data/tracks/delphi/exercises/reverse-string/uReverseStringTests.pas +69 -0
- data/tracks/fsharp/exercises/forth/Example.fs +29 -25
- data/tracks/fsharp/exercises/forth/ForthTest.fs +190 -74
- data/tracks/fsharp/exercises/markdown/MarkdownTest.fs +6 -3
- data/tracks/fsharp/generators/Exercise.fs +4 -4
- data/tracks/fsharp/generators/Generators.fs +29 -1
- data/tracks/java/exercises/allergies/.meta/src/reference/java/Allergen.java +2 -2
- data/tracks/java/exercises/allergies/.meta/src/reference/java/Allergies.java +4 -4
- data/tracks/java/exercises/allergies/src/main/java/Allergen.java +2 -2
- data/tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java +5 -5
- data/tracks/java/exercises/bob/.meta/src/reference/java/Bob.java +8 -5
- data/tracks/java/exercises/kindergarten-garden/src/main/java/KindergartenGarden.java +17 -0
- data/tracks/java/exercises/nth-prime/src/main/java/PrimeCalculator.java +7 -0
- data/tracks/java/exercises/rotational-cipher/src/main/java/RotationalCipher.java +11 -0
- data/tracks/javascript/config.json +15 -0
- data/tracks/javascript/exercises/connect/README.md +59 -0
- data/tracks/javascript/exercises/connect/connect.spec.js +108 -0
- data/tracks/javascript/exercises/connect/example.js +105 -0
- data/tracks/kotlin/README.md +1 -1
- data/tracks/kotlin/exercises/hello-world/TUTORIAL.md +2 -2
- metadata +12 -6
- data/tracks/java/exercises/book-store/.meta/src/reference/java/.keep +0 -0
- data/tracks/java/exercises/nth-prime/src/main/java/.keep +0 -0
- data/tracks/java/exercises/rotational-cipher/src/main/java/.keep +0 -0
- 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;
|
data/tracks/kotlin/README.md
CHANGED
@@ -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/
|
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/
|
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.
|
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-
|
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
|
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
|
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
|
File without changes
|
File without changes
|