trackler 2.0.6.13 → 2.0.6.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/common/TOPICS.txt +1 -0
- data/common/exercises/lens-person/metadata.yml +1 -1
- data/lib/trackler/version.rb +1 -1
- data/tracks/csharp/exercises/all-your-base/AllYourBaseTest.cs +2 -1
- data/tracks/csharp/exercises/markdown/Example.cs +2 -2
- data/tracks/csharp/exercises/markdown/Markdown.cs +2 -2
- data/tracks/csharp/exercises/markdown/MarkdownTest.cs +4 -4
- data/tracks/elixir/.travis.yml +6 -1
- data/tracks/go/exercises/queen-attack/example.go +1 -1
- data/tracks/go/exercises/queen-attack/queen_attack_test.go +11 -6
- data/tracks/haskell/exercises/lens-person/examples/success-standard/package.yaml +0 -1
- data/tracks/haskell/exercises/lens-person/examples/success-standard/src/Person.hs +42 -14
- data/tracks/java/config.json +13 -1
- data/tracks/java/exercises/matrix/build.gradle +17 -0
- data/tracks/java/exercises/matrix/src/example/java/Matrix.java +39 -0
- data/tracks/java/exercises/matrix/src/main/java/.keep +0 -0
- data/tracks/java/exercises/matrix/src/test/java/MatrixTest.java +207 -0
- data/tracks/java/exercises/rectangles/build.gradle +17 -0
- data/tracks/java/exercises/rectangles/src/example/java/RectangleCounter.java +115 -0
- data/tracks/java/exercises/rectangles/src/main/java/RectangleCounter.java +5 -0
- data/tracks/java/exercises/rectangles/src/test/java/RectangleCounterTest.java +164 -0
- data/tracks/java/exercises/settings.gradle +2 -1
- data/tracks/julia/.travis.yml +17 -3
- data/tracks/julia/README.md +4 -1
- data/tracks/julia/docs/INSTALLATION.md +5 -0
- data/tracks/julia/docs/LEARNING.md +7 -0
- data/tracks/julia/docs/TESTS.md +5 -0
- data/tracks/julia/runtests.jl +32 -0
- data/tracks/pascal/exercises/hello-world/uTestHelloWorld.pas +27 -23
- data/tracks/python/README.md +1 -1
- metadata +11 -3
- data/tracks/pascal/img/Delphi-icon.png.keep +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b4773a317ee74fec5189add40d22bdb0810d4d5b
|
4
|
+
data.tar.gz: efb405ccd313b9bd85d8e49a64f95e73685465a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df8a85473aed5805295b688533608f1bf7018764f6a030987c4a94805266c2996ea55764a039ae12f8dad321455d085af0ea5fbbf6b45f5e7b2f4756916c8506
|
7
|
+
data.tar.gz: a832b5beb59c5e7f4c2f72b8d6e7b0ddd681cca16fcb814d9372e98f055f36d0a8bba906e86eb97772de95ce7fab6306d8df3fcf11425d4a9b38dc58e356d9fa
|
data/common/TOPICS.txt
CHANGED
data/lib/trackler/version.rb
CHANGED
@@ -131,6 +131,7 @@ public class AllYourBaseTest
|
|
131
131
|
Assert.Throws<ArgumentException>(() => Base.Rebase(inputBase, inputDigits, outputBase));
|
132
132
|
}
|
133
133
|
|
134
|
+
[Ignore("Remove to run test")]
|
134
135
|
[Test]
|
135
136
|
public void Negative_digit()
|
136
137
|
{
|
@@ -155,7 +156,7 @@ public class AllYourBaseTest
|
|
155
156
|
public void First_base_is_one()
|
156
157
|
{
|
157
158
|
const int inputBase = 1;
|
158
|
-
var inputDigits = new
|
159
|
+
var inputDigits = new[] { 1, 0, 1, 0, 1, 0 };
|
159
160
|
const int outputBase = 10;
|
160
161
|
Assert.Throws<ArgumentException>(() => Base.Rebase(inputBase, inputDigits, outputBase));
|
161
162
|
}
|
@@ -14,8 +14,8 @@ public static class Markdown
|
|
14
14
|
private const string ItalicMarkdown = "_";
|
15
15
|
private const string ListItemMarkdown = "*";
|
16
16
|
|
17
|
-
private const string BoldTag = "
|
18
|
-
private const string ItalicTag = "
|
17
|
+
private const string BoldTag = "strong";
|
18
|
+
private const string ItalicTag = "em";
|
19
19
|
private const string ParagraphTag = "p";
|
20
20
|
private const string ListTag = "ul";
|
21
21
|
private const string ListItemTag = "li";
|
@@ -14,9 +14,9 @@ public static class Markdown
|
|
14
14
|
return Regex.Replace(markdown, pattern, replacement);
|
15
15
|
}
|
16
16
|
|
17
|
-
private static string Parse__(string markdown) => Parse(markdown, "__", "
|
17
|
+
private static string Parse__(string markdown) => Parse(markdown, "__", "strong");
|
18
18
|
|
19
|
-
private static string Parse_(string markdown) => Parse(markdown, "_", "
|
19
|
+
private static string Parse_(string markdown) => Parse(markdown, "_", "em");
|
20
20
|
|
21
21
|
private static string ParseText(string markdown, bool list)
|
22
22
|
{
|
@@ -14,7 +14,7 @@ public class MarkdownTest
|
|
14
14
|
public void Parsing_italics()
|
15
15
|
{
|
16
16
|
var input = "_This will be italic_";
|
17
|
-
var expected = "<p><
|
17
|
+
var expected = "<p><em>This will be italic</em></p>";
|
18
18
|
Assert.That(Markdown.Parse(input), Is.EqualTo(expected));
|
19
19
|
}
|
20
20
|
|
@@ -22,7 +22,7 @@ public class MarkdownTest
|
|
22
22
|
public void Parsing_bold_text()
|
23
23
|
{
|
24
24
|
var input = "__This will be bold__";
|
25
|
-
var expected = "<p><
|
25
|
+
var expected = "<p><strong>This will be bold</strong></p>";
|
26
26
|
Assert.That(Markdown.Parse(input), Is.EqualTo(expected));
|
27
27
|
}
|
28
28
|
|
@@ -30,7 +30,7 @@ public class MarkdownTest
|
|
30
30
|
public void Mixed_normal_italics_and_bold_text()
|
31
31
|
{
|
32
32
|
var input = "This will _be_ __mixed__";
|
33
|
-
var expected = "<p>This will <
|
33
|
+
var expected = "<p>This will <em>be</em> <strong>mixed</strong></p>";
|
34
34
|
Assert.That(Markdown.Parse(input), Is.EqualTo(expected));
|
35
35
|
}
|
36
36
|
|
@@ -70,7 +70,7 @@ public class MarkdownTest
|
|
70
70
|
public void With_a_little_bit_of_everything()
|
71
71
|
{
|
72
72
|
var input = "# Header!\n* __Bold Item__\n* _Italic Item_";
|
73
|
-
var expected = "<h1>Header!</h1><ul><li><
|
73
|
+
var expected = "<h1>Header!</h1><ul><li><strong>Bold Item</strong></li><li><em>Italic Item</em></li></ul>";
|
74
74
|
Assert.That(Markdown.Parse(input), Is.EqualTo(expected));
|
75
75
|
}
|
76
76
|
}
|
data/tracks/elixir/.travis.yml
CHANGED
@@ -5,25 +5,30 @@ import "testing"
|
|
5
5
|
// Arguments to CanQueenAttack are in algebraic notation.
|
6
6
|
// See http://en.wikipedia.org/wiki/Algebraic_notation_(chess)
|
7
7
|
|
8
|
-
const targetTestVersion =
|
8
|
+
const targetTestVersion = 2
|
9
9
|
|
10
10
|
var tests = []struct {
|
11
11
|
w, b string
|
12
12
|
attack bool
|
13
13
|
ok bool
|
14
14
|
}{
|
15
|
-
{"b4", "b4", false, false},
|
16
|
-
{"a8", "b9", false, false},
|
15
|
+
{"b4", "b4", false, false}, // same square
|
16
|
+
{"a8", "b9", false, false}, // off board
|
17
|
+
{"a0", "b1", false, false},
|
18
|
+
{"g3", "i5", false, false},
|
17
19
|
{"here", "there", false, false}, // invalid
|
18
20
|
{"", "", false, false},
|
19
21
|
|
20
22
|
{"b3", "d7", false, true}, // no attack
|
21
|
-
{"
|
22
|
-
{"
|
23
|
-
{"
|
23
|
+
{"a1", "f8", false, true},
|
24
|
+
{"b4", "b7", true, true}, // same file
|
25
|
+
{"e4", "b4", true, true}, // same rank
|
26
|
+
{"a1", "f6", true, true}, // common diagonals
|
24
27
|
{"a6", "b7", true, true},
|
25
28
|
{"d1", "f3", true, true},
|
26
29
|
{"f1", "a6", true, true},
|
30
|
+
{"a1", "h8", true, true},
|
31
|
+
{"a8", "h1", true, true},
|
27
32
|
}
|
28
33
|
|
29
34
|
func TestTestVersion(t *testing.T) {
|
@@ -1,9 +1,10 @@
|
|
1
|
-
{-# LANGUAGE
|
1
|
+
{-# LANGUAGE Rank2Types #-}
|
2
2
|
|
3
3
|
module Person where
|
4
4
|
|
5
|
-
import
|
6
|
-
import
|
5
|
+
import Control.Applicative (Const(..), getConst)
|
6
|
+
import Data.Functor.Identity (Identity(..), runIdentity)
|
7
|
+
import Data.Time.Calendar (Day, toGregorian, fromGregorian)
|
7
8
|
|
8
9
|
data Person = Person {
|
9
10
|
_name :: Name,
|
@@ -36,17 +37,44 @@ data Gregorian = Gregorian {
|
|
36
37
|
_day :: Int
|
37
38
|
}
|
38
39
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
makeLenses ''Gregorian
|
40
|
+
type Lens s t a b = forall f. Functor f => (a -> f b) -> s -> f t
|
41
|
+
type Lens' s a = Lens s s a a
|
42
|
+
type Getting s a = (a -> Const a a) -> s -> Const a s
|
43
|
+
type Setting s t a b = (a -> Identity b) -> s -> Identity t
|
44
44
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
45
|
+
lens :: (s -> a) -> (s -> b -> t) -> Lens s t a b
|
46
|
+
lens sa sbt afb s = fmap (sbt s) (afb (sa s))
|
47
|
+
|
48
|
+
view :: Getting s a -> s -> a
|
49
|
+
view l = getConst . l Const
|
50
|
+
|
51
|
+
over :: Setting s t a b -> (a -> b) -> s -> t
|
52
|
+
over l f = runIdentity . l (Identity . f)
|
53
|
+
|
54
|
+
set :: Setting s t a b -> b -> s -> t
|
55
|
+
set l v = over l (const v)
|
56
|
+
|
57
|
+
-- boilerplate lenses:
|
58
|
+
|
59
|
+
born :: Lens' Person Born
|
60
|
+
born = lens _born (\p b -> p { _born = b })
|
61
|
+
|
62
|
+
address :: Lens' Person Address
|
63
|
+
address = lens _address (\p a -> p { _address = a })
|
64
|
+
|
65
|
+
bornAt :: Lens' Born Address
|
66
|
+
bornAt = lens _bornAt (\b a -> b { _bornAt = a })
|
67
|
+
|
68
|
+
bornOn :: Lens' Born Day
|
69
|
+
bornOn = lens _bornOn (\b d -> b { _bornOn = d })
|
70
|
+
|
71
|
+
street :: Lens' Address String
|
72
|
+
street = lens _street (\a s -> a { _street = s })
|
73
|
+
|
74
|
+
month :: Lens' Day Int
|
75
|
+
month = lens getMonth setMonth
|
76
|
+
where getMonth day = let (_, m, _) = toGregorian day in m
|
77
|
+
setMonth day m = let (y, _, d) = toGregorian day in fromGregorian y m d
|
50
78
|
|
51
79
|
bornStreet :: Born -> String
|
52
80
|
bornStreet = view (bornAt . street)
|
@@ -55,7 +83,7 @@ setCurrentStreet :: String -> Person -> Person
|
|
55
83
|
setCurrentStreet = set (address . street)
|
56
84
|
|
57
85
|
setBirthMonth :: Int -> Person -> Person
|
58
|
-
setBirthMonth = set (born . bornOn .
|
86
|
+
setBirthMonth = set (born . bornOn . month)
|
59
87
|
|
60
88
|
renameStreets :: (String -> String) -> Person -> Person
|
61
89
|
renameStreets f = over birthStreet f . over currentStreet f
|
data/tracks/java/config.json
CHANGED
@@ -55,7 +55,9 @@
|
|
55
55
|
"wordy",
|
56
56
|
"palindrome-products",
|
57
57
|
"twelve-days",
|
58
|
-
"sublist"
|
58
|
+
"sublist",
|
59
|
+
"rectangles",
|
60
|
+
"matrix"
|
59
61
|
],
|
60
62
|
"exercises": [
|
61
63
|
{
|
@@ -317,6 +319,16 @@
|
|
317
319
|
"slug": "sublist",
|
318
320
|
"difficulty": 1,
|
319
321
|
"topics": []
|
322
|
+
},
|
323
|
+
{
|
324
|
+
"slug": "rectangles",
|
325
|
+
"difficulty": 1,
|
326
|
+
"topics": []
|
327
|
+
},
|
328
|
+
{
|
329
|
+
"slug": "matrix",
|
330
|
+
"difficulty": 1,
|
331
|
+
"topics": []
|
320
332
|
}
|
321
333
|
],
|
322
334
|
"deprecated": [
|
@@ -0,0 +1,17 @@
|
|
1
|
+
apply plugin: "java"
|
2
|
+
apply plugin: "eclipse"
|
3
|
+
apply plugin: "idea"
|
4
|
+
|
5
|
+
repositories {
|
6
|
+
mavenCentral()
|
7
|
+
}
|
8
|
+
|
9
|
+
dependencies {
|
10
|
+
testCompile "junit:junit:4.12"
|
11
|
+
}
|
12
|
+
test {
|
13
|
+
testLogging {
|
14
|
+
exceptionFormat = 'full'
|
15
|
+
events = ["passed", "failed", "skipped"]
|
16
|
+
}
|
17
|
+
}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
import java.util.regex.Pattern;
|
2
|
+
|
3
|
+
public class Matrix {
|
4
|
+
private int[][] matrix;
|
5
|
+
private static Pattern spacePattern = Pattern.compile(" ");
|
6
|
+
private static Pattern newlinePattern = Pattern.compile("\\n");
|
7
|
+
|
8
|
+
public Matrix(String matrixAsString) {
|
9
|
+
String[] rows = newlinePattern.split(matrixAsString);
|
10
|
+
matrix = new int[rows.length][];
|
11
|
+
for (int i = 0; i < rows.length; i++) {
|
12
|
+
String[] columnValues = spacePattern.split(rows[i]);
|
13
|
+
matrix[i] = new int[columnValues.length];
|
14
|
+
for (int j = 0; j < columnValues.length; j++) {
|
15
|
+
matrix[i][j] = Integer.parseInt(columnValues[j]);
|
16
|
+
}
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
20
|
+
public int[] getRow(int rowNumber) {
|
21
|
+
return matrix[rowNumber];
|
22
|
+
}
|
23
|
+
|
24
|
+
public int[] getColumn(int columnNumber) {
|
25
|
+
int[] column = new int[matrix.length];
|
26
|
+
for(int i = 0; i < matrix.length; i++) {
|
27
|
+
column[i] = matrix[i][columnNumber];
|
28
|
+
}
|
29
|
+
return column;
|
30
|
+
}
|
31
|
+
|
32
|
+
public int getRowsCount() {
|
33
|
+
return matrix.length;
|
34
|
+
}
|
35
|
+
|
36
|
+
public int getColumnsCount() {
|
37
|
+
return matrix[0].length;
|
38
|
+
}
|
39
|
+
}
|
File without changes
|
@@ -0,0 +1,207 @@
|
|
1
|
+
import org.junit.Ignore;
|
2
|
+
import org.junit.Test;
|
3
|
+
import org.junit.experimental.runners.Enclosed;
|
4
|
+
import org.junit.runner.RunWith;
|
5
|
+
import org.junit.runners.Parameterized;
|
6
|
+
|
7
|
+
import java.util.Arrays;
|
8
|
+
import java.util.Collection;
|
9
|
+
|
10
|
+
import static org.junit.Assert.assertArrayEquals;
|
11
|
+
import static org.junit.Assert.assertEquals;
|
12
|
+
|
13
|
+
@RunWith(Enclosed.class)
|
14
|
+
public class MatrixTest {
|
15
|
+
|
16
|
+
@RunWith(Parameterized.class)
|
17
|
+
public static class CountRowsTest {
|
18
|
+
private Matrix matrix;
|
19
|
+
private int numberOfRows;
|
20
|
+
|
21
|
+
@Parameterized.Parameters(name = "{index}: expected matrix constructed with string \n\"{0}\" to have {1} row(s).")
|
22
|
+
public static Collection<Object[]> data() {
|
23
|
+
return Arrays.asList(new Object[][]{
|
24
|
+
{"0", 1},
|
25
|
+
{"0 1", 1},
|
26
|
+
{ "0\n"
|
27
|
+
+ "1", 2},
|
28
|
+
{ "0 1\n"
|
29
|
+
+ "2 3", 2},
|
30
|
+
{ "0 1 2\n"
|
31
|
+
+ "3 4 5\n"
|
32
|
+
+ "6 7 8", 3}
|
33
|
+
});
|
34
|
+
}
|
35
|
+
|
36
|
+
public CountRowsTest(String matrixAsString, int numberOfRows) {
|
37
|
+
this.matrix = new Matrix(matrixAsString);
|
38
|
+
this.numberOfRows = numberOfRows;
|
39
|
+
}
|
40
|
+
|
41
|
+
@Test
|
42
|
+
public void countRowsTest() {
|
43
|
+
assertEquals(numberOfRows, matrix.getRowsCount());
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
@Ignore
|
48
|
+
@RunWith(Parameterized.class)
|
49
|
+
public static class CountColumnsTest {
|
50
|
+
private Matrix matrix;
|
51
|
+
private int numberOfColumns;
|
52
|
+
|
53
|
+
@Parameterized.Parameters(name = "{index}: expected matrix constructed with string \n\"{0}\" to have {1} column(s).")
|
54
|
+
public static Collection<Object[]> data() {
|
55
|
+
return Arrays.asList(new Object[][]{
|
56
|
+
{"0", 1},
|
57
|
+
{"0 1", 2},
|
58
|
+
{ "0\n"
|
59
|
+
+ "1", 1},
|
60
|
+
{ "0 1\n"
|
61
|
+
+ "2 3", 2},
|
62
|
+
{ "0 1 2\n"
|
63
|
+
+ "3 4 5\n"
|
64
|
+
+ "6 7 8", 3}
|
65
|
+
});
|
66
|
+
}
|
67
|
+
|
68
|
+
public CountColumnsTest(String matrixAsString, int numberOfColumns) {
|
69
|
+
this.matrix = new Matrix(matrixAsString);
|
70
|
+
this.numberOfColumns = numberOfColumns;
|
71
|
+
}
|
72
|
+
|
73
|
+
@Test
|
74
|
+
public void countColumnsTest() {
|
75
|
+
assertEquals(numberOfColumns, matrix.getColumnsCount());
|
76
|
+
}
|
77
|
+
}
|
78
|
+
|
79
|
+
@Ignore
|
80
|
+
@RunWith(Parameterized.class)
|
81
|
+
public static class GetFirstRowTest {
|
82
|
+
private Matrix matrix;
|
83
|
+
private int[] firstRow;
|
84
|
+
|
85
|
+
@Parameterized.Parameters(name = "{index}: checking first row of matrix constructed with string \n\"{0}\".")
|
86
|
+
public static Collection<Object[]> data() {
|
87
|
+
return Arrays.asList(new Object[][]{
|
88
|
+
{"0", new int[] {0}},
|
89
|
+
{"0 1", new int[] {0, 1}},
|
90
|
+
{ "0\n"
|
91
|
+
+ "1", new int[] {0}},
|
92
|
+
{ "0 1\n"
|
93
|
+
+ "2 3", new int[] {0, 1}},
|
94
|
+
{ "0 1 2\n"
|
95
|
+
+ "3 4 5\n"
|
96
|
+
+ "6 7 8", new int[] {0, 1, 2}}
|
97
|
+
});
|
98
|
+
}
|
99
|
+
|
100
|
+
public GetFirstRowTest(String matrixAsString, int[] firstRow) {
|
101
|
+
this.matrix = new Matrix(matrixAsString);
|
102
|
+
this.firstRow = firstRow;
|
103
|
+
}
|
104
|
+
|
105
|
+
@Test
|
106
|
+
public void getFirstRowTest() {
|
107
|
+
assertArrayEquals(firstRow, matrix.getRow(0));
|
108
|
+
}
|
109
|
+
}
|
110
|
+
|
111
|
+
@Ignore
|
112
|
+
@RunWith(Parameterized.class)
|
113
|
+
public static class GetLastRowTest {
|
114
|
+
private Matrix matrix;
|
115
|
+
private int[] lastRow;
|
116
|
+
|
117
|
+
@Parameterized.Parameters(name = "{index}: checking last row of matrix constructed with string \n\"{0}\".")
|
118
|
+
public static Collection<Object[]> data() {
|
119
|
+
return Arrays.asList(new Object[][]{
|
120
|
+
{"0", new int[] {0}},
|
121
|
+
{"0 1", new int[] {0, 1}},
|
122
|
+
{ "0\n"
|
123
|
+
+ "1", new int[] {1}},
|
124
|
+
{ "0 1\n"
|
125
|
+
+ "2 3", new int[] {2, 3}},
|
126
|
+
{ "0 1 2\n"
|
127
|
+
+ "3 4 5\n"
|
128
|
+
+ "6 7 8", new int[] {6, 7, 8}}
|
129
|
+
});
|
130
|
+
}
|
131
|
+
|
132
|
+
public GetLastRowTest(String matrixAsString, int[] lastRow) {
|
133
|
+
this.matrix = new Matrix(matrixAsString);
|
134
|
+
this.lastRow = lastRow;
|
135
|
+
}
|
136
|
+
|
137
|
+
@Test
|
138
|
+
public void getLastRowTest() {
|
139
|
+
assertArrayEquals(lastRow, matrix.getRow(matrix.getRowsCount() - 1));
|
140
|
+
}
|
141
|
+
}
|
142
|
+
|
143
|
+
@Ignore
|
144
|
+
@RunWith(Parameterized.class)
|
145
|
+
public static class GetFirstColumnTest {
|
146
|
+
private Matrix matrix;
|
147
|
+
private int[] firstColumn;
|
148
|
+
|
149
|
+
@Parameterized.Parameters(name = "{index}: checking first column of matrix constructed with string \n\"{0}\".")
|
150
|
+
public static Collection<Object[]> data() {
|
151
|
+
return Arrays.asList(new Object[][]{
|
152
|
+
{"0", new int[] {0}},
|
153
|
+
{"0 1", new int[] {0}},
|
154
|
+
{ "0\n"
|
155
|
+
+ "1", new int[] {0, 1}},
|
156
|
+
{ "0 1\n"
|
157
|
+
+ "2 3", new int[] {0, 2}},
|
158
|
+
{ "0 1 2\n"
|
159
|
+
+ "3 4 5\n"
|
160
|
+
+ "6 7 8", new int[] {0, 3, 6}}
|
161
|
+
});
|
162
|
+
}
|
163
|
+
|
164
|
+
public GetFirstColumnTest(String matrixAsString, int[] firstColumn) {
|
165
|
+
this.matrix = new Matrix(matrixAsString);
|
166
|
+
this.firstColumn = firstColumn;
|
167
|
+
}
|
168
|
+
|
169
|
+
@Test
|
170
|
+
public void getFirstColumnTest() {
|
171
|
+
assertArrayEquals(firstColumn, matrix.getColumn(0));
|
172
|
+
}
|
173
|
+
}
|
174
|
+
|
175
|
+
|
176
|
+
@Ignore
|
177
|
+
@RunWith(Parameterized.class)
|
178
|
+
public static class GetLastColumnTest {
|
179
|
+
private Matrix matrix;
|
180
|
+
private int[] lastColumn;
|
181
|
+
|
182
|
+
@Parameterized.Parameters(name = "{index}: checking last column of matrix constructed with string \n\"{0}\".")
|
183
|
+
public static Collection<Object[]> data() {
|
184
|
+
return Arrays.asList(new Object[][]{
|
185
|
+
{"0", new int[] {0}},
|
186
|
+
{"0 1", new int[] {1}},
|
187
|
+
{ "0\n"
|
188
|
+
+ "1", new int[] {0, 1}},
|
189
|
+
{ "0 1\n"
|
190
|
+
+ "2 3", new int[] {1, 3}},
|
191
|
+
{ "0 1 2\n"
|
192
|
+
+ "3 4 5\n"
|
193
|
+
+ "6 7 8", new int[] {2, 5, 8}}
|
194
|
+
});
|
195
|
+
}
|
196
|
+
|
197
|
+
public GetLastColumnTest(String matrixAsString, int[] lastColumn) {
|
198
|
+
this.matrix = new Matrix(matrixAsString);
|
199
|
+
this.lastColumn = lastColumn;
|
200
|
+
}
|
201
|
+
|
202
|
+
@Test
|
203
|
+
public void getLastColumnTest() {
|
204
|
+
assertArrayEquals(lastColumn, matrix.getColumn(matrix.getColumnsCount() - 1));
|
205
|
+
}
|
206
|
+
}
|
207
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
apply plugin: "java"
|
2
|
+
apply plugin: "eclipse"
|
3
|
+
apply plugin: "idea"
|
4
|
+
|
5
|
+
repositories {
|
6
|
+
mavenCentral()
|
7
|
+
}
|
8
|
+
|
9
|
+
dependencies {
|
10
|
+
testCompile "junit:junit:4.12"
|
11
|
+
}
|
12
|
+
test {
|
13
|
+
testLogging {
|
14
|
+
exceptionFormat = 'full'
|
15
|
+
events = ["passed", "failed", "skipped"]
|
16
|
+
}
|
17
|
+
}
|
@@ -0,0 +1,115 @@
|
|
1
|
+
import static java.util.Arrays.copyOfRange;
|
2
|
+
import static java.util.Arrays.stream;
|
3
|
+
|
4
|
+
final class RectangleCounter {
|
5
|
+
|
6
|
+
int countRectangles(final String[] rawGrid) {
|
7
|
+
final int nRows = rawGrid.length;
|
8
|
+
if (nRows == 0) return 0;
|
9
|
+
|
10
|
+
final int nCols = rawGrid[0].length();
|
11
|
+
if (nCols == 0) return 0;
|
12
|
+
|
13
|
+
return new Grid(nRows, nCols, rawGrid).countRectangles();
|
14
|
+
}
|
15
|
+
|
16
|
+
private static final class Grid {
|
17
|
+
|
18
|
+
private enum Entry {
|
19
|
+
CORNER,
|
20
|
+
HLINE,
|
21
|
+
VLINE,
|
22
|
+
SPACE;
|
23
|
+
|
24
|
+
private static Entry fromChar(final char rawGridEntry) {
|
25
|
+
switch (rawGridEntry) {
|
26
|
+
case '+': return CORNER;
|
27
|
+
case '-': return HLINE;
|
28
|
+
case '|': return VLINE;
|
29
|
+
case ' ': return SPACE;
|
30
|
+
default: throw new IllegalStateException("Grid entry " + rawGridEntry + " not recognized.");
|
31
|
+
}
|
32
|
+
}
|
33
|
+
}
|
34
|
+
|
35
|
+
private int nRows, nCols;
|
36
|
+
private final Entry[][] entries;
|
37
|
+
|
38
|
+
private Grid(final int nRows, final int nCols, final String[] rawGrid) {
|
39
|
+
this.nRows = nRows;
|
40
|
+
this.nCols = nCols;
|
41
|
+
this.entries = new Entry[nRows][nCols];
|
42
|
+
|
43
|
+
for (int nRow = 0; nRow < nRows; nRow++) {
|
44
|
+
for (int nCol = 0; nCol < nCols; nCol++) {
|
45
|
+
entries[nRow][nCol] = Entry.fromChar(rawGrid[nRow].charAt(nCol));
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
private int countRectangles() {
|
51
|
+
int result = 0;
|
52
|
+
|
53
|
+
for (int topRow = 0; topRow < nRows - 1; topRow++) {
|
54
|
+
|
55
|
+
for (int leftCol = 0; leftCol < nCols - 1; leftCol++) {
|
56
|
+
|
57
|
+
// Only check rectangles that lie below/to the right of our current coordinate:
|
58
|
+
for (int bottomRow = topRow + 1; bottomRow < nRows; bottomRow++) {
|
59
|
+
|
60
|
+
for (int rightCol = leftCol + 1; rightCol < nCols; rightCol++) {
|
61
|
+
|
62
|
+
if (formsRectangle(topRow, bottomRow, leftCol, rightCol)) {
|
63
|
+
result++;
|
64
|
+
}
|
65
|
+
}
|
66
|
+
}
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
return result;
|
71
|
+
}
|
72
|
+
|
73
|
+
private boolean formsRectangle(
|
74
|
+
final int topRow,
|
75
|
+
final int bottomRow,
|
76
|
+
final int leftCol,
|
77
|
+
final int rightCol) {
|
78
|
+
|
79
|
+
return entries[topRow][leftCol].equals(Entry.CORNER)
|
80
|
+
&& entries[topRow][rightCol].equals(Entry.CORNER)
|
81
|
+
&& entries[bottomRow][leftCol].equals(Entry.CORNER)
|
82
|
+
&& entries[bottomRow][rightCol].equals(Entry.CORNER)
|
83
|
+
&& isHorizontalLineSegment(topRow, leftCol, rightCol)
|
84
|
+
&& isHorizontalLineSegment(bottomRow, leftCol, rightCol)
|
85
|
+
&& isVerticalLineSegment(leftCol, topRow, bottomRow)
|
86
|
+
&& isVerticalLineSegment(rightCol, topRow, bottomRow);
|
87
|
+
}
|
88
|
+
|
89
|
+
private boolean isHorizontalLineSegment(final int row, final int leftCol, final int rightCol) {
|
90
|
+
return stream(copyOfRange(getRow(row), leftCol, rightCol))
|
91
|
+
.allMatch(entry -> entry.equals(Entry.HLINE) || entry.equals(Entry.CORNER));
|
92
|
+
}
|
93
|
+
|
94
|
+
private boolean isVerticalLineSegment(final int col, final int topRow, final int bottomRow) {
|
95
|
+
return stream(copyOfRange(getCol(col), topRow, bottomRow))
|
96
|
+
.allMatch(entry -> entry.equals(Entry.VLINE) || entry.equals(Entry.CORNER));
|
97
|
+
}
|
98
|
+
|
99
|
+
private Entry[] getRow(final int number) {
|
100
|
+
return entries[number];
|
101
|
+
}
|
102
|
+
|
103
|
+
private Entry[] getCol(final int number) {
|
104
|
+
final Entry[] result = new Entry[nRows];
|
105
|
+
|
106
|
+
for (int nRow = 0; nRow < nRows; nRow++) {
|
107
|
+
result[nRow] = entries[nRow][number];
|
108
|
+
}
|
109
|
+
|
110
|
+
return result;
|
111
|
+
}
|
112
|
+
|
113
|
+
}
|
114
|
+
|
115
|
+
}
|
@@ -0,0 +1,164 @@
|
|
1
|
+
import org.junit.Before;
|
2
|
+
import org.junit.Ignore;
|
3
|
+
import org.junit.Test;
|
4
|
+
|
5
|
+
import static org.junit.Assert.assertEquals;
|
6
|
+
|
7
|
+
public final class RectangleCounterTest {
|
8
|
+
|
9
|
+
private RectangleCounter rectangleCounter;
|
10
|
+
|
11
|
+
@Before
|
12
|
+
public void setUp() {
|
13
|
+
rectangleCounter = new RectangleCounter();
|
14
|
+
}
|
15
|
+
|
16
|
+
@Test
|
17
|
+
public void testInputWithNoColumnsContainsNoRectangles() {
|
18
|
+
String[] inputGrid = new String[]{};
|
19
|
+
|
20
|
+
assertEquals(0, rectangleCounter.countRectangles(inputGrid));
|
21
|
+
}
|
22
|
+
|
23
|
+
@Ignore
|
24
|
+
@Test
|
25
|
+
public void testNonTrivialInputWithNoRectangles() {
|
26
|
+
String[] inputGrid = new String[]{" "};
|
27
|
+
|
28
|
+
assertEquals(0, rectangleCounter.countRectangles(inputGrid));
|
29
|
+
}
|
30
|
+
|
31
|
+
@Ignore
|
32
|
+
@Test
|
33
|
+
public void testInputWithOneRectangle() {
|
34
|
+
String[] inputGrid = new String[]{
|
35
|
+
"+-+",
|
36
|
+
"| |",
|
37
|
+
"+-+"
|
38
|
+
};
|
39
|
+
|
40
|
+
assertEquals(1, rectangleCounter.countRectangles(inputGrid));
|
41
|
+
}
|
42
|
+
|
43
|
+
@Ignore
|
44
|
+
@Test
|
45
|
+
public void testInputWithTwoRectanglesWithoutSharedEdges() {
|
46
|
+
String[] inputGrid = new String[]{
|
47
|
+
" +-+",
|
48
|
+
" | |",
|
49
|
+
"+-+-+",
|
50
|
+
"| | ",
|
51
|
+
"+-+ "
|
52
|
+
};
|
53
|
+
|
54
|
+
assertEquals(2, rectangleCounter.countRectangles(inputGrid));
|
55
|
+
}
|
56
|
+
|
57
|
+
@Ignore
|
58
|
+
@Test
|
59
|
+
public void testInputWithFiveRectanglesWithSharedEdges() {
|
60
|
+
String[] inputGrid = new String[]{
|
61
|
+
" +-+",
|
62
|
+
" | |",
|
63
|
+
"+-+-+",
|
64
|
+
"| | |",
|
65
|
+
"+-+-+"
|
66
|
+
};
|
67
|
+
|
68
|
+
assertEquals(5, rectangleCounter.countRectangles(inputGrid));
|
69
|
+
}
|
70
|
+
|
71
|
+
@Ignore
|
72
|
+
@Test
|
73
|
+
public void testThatRectangleOfHeightOneIsCounted() {
|
74
|
+
String[] inputGrid = new String[]{
|
75
|
+
"+--+",
|
76
|
+
"+--+"
|
77
|
+
};
|
78
|
+
|
79
|
+
assertEquals(1, rectangleCounter.countRectangles(inputGrid));
|
80
|
+
}
|
81
|
+
|
82
|
+
@Ignore
|
83
|
+
@Test
|
84
|
+
public void testThatRectangleOfWidthOneIsCounted() {
|
85
|
+
String[] inputGrid = new String[]{
|
86
|
+
"++",
|
87
|
+
"||",
|
88
|
+
"++"
|
89
|
+
};
|
90
|
+
|
91
|
+
assertEquals(1, rectangleCounter.countRectangles(inputGrid));
|
92
|
+
}
|
93
|
+
|
94
|
+
@Ignore
|
95
|
+
@Test
|
96
|
+
public void testThatOneByOneSquareIsCounted() {
|
97
|
+
String[] inputGrid = new String[]{
|
98
|
+
"++",
|
99
|
+
"++"
|
100
|
+
};
|
101
|
+
|
102
|
+
assertEquals(1, rectangleCounter.countRectangles(inputGrid));
|
103
|
+
}
|
104
|
+
|
105
|
+
@Ignore
|
106
|
+
@Test
|
107
|
+
public void testThatIncompleteRectanglesAreNotCounted() {
|
108
|
+
String[] inputGrid = new String[]{
|
109
|
+
" +-+",
|
110
|
+
" |",
|
111
|
+
"+-+-+",
|
112
|
+
"| | -",
|
113
|
+
"+-+-+"
|
114
|
+
};
|
115
|
+
|
116
|
+
assertEquals(1, rectangleCounter.countRectangles(inputGrid));
|
117
|
+
}
|
118
|
+
|
119
|
+
@Ignore
|
120
|
+
@Test
|
121
|
+
public void testThatRectanglesOfDifferentSizesAreAllCounted() {
|
122
|
+
String[] inputGrid = new String[]{
|
123
|
+
"+------+----+",
|
124
|
+
"| | |",
|
125
|
+
"+---+--+ |",
|
126
|
+
"| | |",
|
127
|
+
"+---+-------+"
|
128
|
+
};
|
129
|
+
|
130
|
+
assertEquals(3, rectangleCounter.countRectangles(inputGrid));
|
131
|
+
}
|
132
|
+
|
133
|
+
@Ignore
|
134
|
+
@Test
|
135
|
+
public void testThatIntersectionsWithoutCornerCharacterDoNotCountAsRectangleCorners() {
|
136
|
+
String[] inputGrid = new String[]{
|
137
|
+
"+------+----+",
|
138
|
+
"| | |",
|
139
|
+
"+------+ |",
|
140
|
+
"| | |",
|
141
|
+
"+---+-------+"
|
142
|
+
};
|
143
|
+
|
144
|
+
assertEquals(2, rectangleCounter.countRectangles(inputGrid));
|
145
|
+
}
|
146
|
+
|
147
|
+
@Ignore
|
148
|
+
@Test
|
149
|
+
public void testLargeInputWithManyRectangles() {
|
150
|
+
String[] inputGrid = new String[]{
|
151
|
+
"+---+--+----+",
|
152
|
+
"| +--+----+",
|
153
|
+
"+---+--+ |",
|
154
|
+
"| +--+----+",
|
155
|
+
"+---+--+--+-+",
|
156
|
+
"+---+--+--+-+",
|
157
|
+
"+------+ | |",
|
158
|
+
" +-+"
|
159
|
+
};
|
160
|
+
|
161
|
+
assertEquals(60, rectangleCounter.countRectangles(inputGrid));
|
162
|
+
}
|
163
|
+
|
164
|
+
}
|
@@ -34,6 +34,7 @@ include 'phone-number'
|
|
34
34
|
include 'pig-latin'
|
35
35
|
include 'queen-attack'
|
36
36
|
include 'raindrops'
|
37
|
+
include 'rectangles'
|
37
38
|
include 'rna-transcription'
|
38
39
|
include 'robot-name'
|
39
40
|
include 'robot-simulator'
|
@@ -54,4 +55,4 @@ include 'trinary'
|
|
54
55
|
include 'word-count'
|
55
56
|
include 'wordy'
|
56
57
|
include 'twelve-days'
|
57
|
-
|
58
|
+
include 'matrix'
|
data/tracks/julia/.travis.yml
CHANGED
@@ -1,5 +1,19 @@
|
|
1
|
-
language:
|
1
|
+
language: julia
|
2
|
+
|
3
|
+
os:
|
4
|
+
- linux
|
5
|
+
- osx
|
6
|
+
|
7
|
+
julia:
|
8
|
+
- release
|
9
|
+
- nightly
|
10
|
+
- 0.5
|
11
|
+
|
12
|
+
matrix:
|
13
|
+
allow_failures:
|
14
|
+
- julia: nightly
|
2
15
|
|
3
16
|
script:
|
4
|
-
-
|
5
|
-
- bin/configlet
|
17
|
+
- julia runtests.jl
|
18
|
+
- ./bin/fetch-configlet
|
19
|
+
- ./bin/configlet .
|
data/tracks/julia/README.md
CHANGED
@@ -14,7 +14,7 @@ Please see the [contributing guide](https://github.com/exercism/x-common/blob/ma
|
|
14
14
|
|
15
15
|
A pool of exercises can be found in the [x-Common repo](https://github.com/exercism/x-common).
|
16
16
|
|
17
|
-
Exercises for the Julia track go in the `exercises` directory and should follow the following filename conventions:
|
17
|
+
Exercises for the Julia track go in the `exercises` directory and should follow the following filename conventions:
|
18
18
|
|
19
19
|
`exercises/<slug>/<slug>.jl` Skeleton for the function that is called by the test suite. Provide (abstract) parameter and return types to ensure compatibility with the test suite.
|
20
20
|
|
@@ -25,3 +25,6 @@ Exercises for the Julia track go in the `exercises` directory and should follow
|
|
25
25
|
Replace `<slug>` with the exercise slug of the exercise you're working on.
|
26
26
|
|
27
27
|
See [Issue #2](https://github.com/exercism/xjulia/issues/2) for discussion on the structure.
|
28
|
+
|
29
|
+
### Testing the example solutions
|
30
|
+
Test your example solutions by running `julia runtests.jl` in the project directory. Specify exercise slugs as arguments to run only certain exercises: `julia runtests.jl <slug>`.
|
@@ -0,0 +1,5 @@
|
|
1
|
+
To install Julia on your system follow the instructions on the [Julia Language Downloads page](http://julialang.org/downloads/).
|
2
|
+
|
3
|
+
For a local installation, it is recommended to use [Juno](http://junolab.org/). It's an IDE based on Atom and offers a powerful text editor as well as additional features for developing in Julia. Just follow the instructions on their website.
|
4
|
+
|
5
|
+
A simple way to get started with Julia without the need of a local installation is [JuliaBox](http://junolab.org/), which is an online IDE based on Jupyter notebooks. You just access it from your browser, login and you can start solving exercises.
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Learning Julia From Scratch
|
2
|
+
|
3
|
+
Exercism assumes that you already have some knowledge about the Julia language to the point where you understand the basic concept of a function and know the syntax reasonably well. The Julia language website contains a regularly updated [list of learning resources](http://julialang.org/learning/). This is the go-to place when looking for books and tutorials on Julia.
|
4
|
+
|
5
|
+
For examples on what to do with Julia as well as more specific tutorials, check out [juliabloggers.com](http://www.juliabloggers.com/).
|
6
|
+
|
7
|
+
Please note: Julia is a rather young and still rapidly evolving language and as such, examples from books or tutorials written for older versions of Julia may not work anymore without (small) adjustments.
|
data/tracks/julia/docs/TESTS.md
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
using Base.Test
|
2
|
+
|
3
|
+
for (root, dirs, files) in walkdir("exercises")
|
4
|
+
for exercise in dirs
|
5
|
+
# Allow only testing specified execises
|
6
|
+
if !isempty(ARGS) && !(exercise in ARGS)
|
7
|
+
continue
|
8
|
+
end
|
9
|
+
|
10
|
+
exercise_path = joinpath("exercises", exercise)
|
11
|
+
|
12
|
+
# Create temporary directory
|
13
|
+
temp_path = mktempdir(root)
|
14
|
+
|
15
|
+
# Copy tests & example to the temporary directory
|
16
|
+
cp(joinpath(exercise_path, "example.jl"), joinpath(temp_path, "$exercise.jl"))
|
17
|
+
cp(joinpath(exercise_path, "runtests.jl"), joinpath(temp_path, "runtests.jl"))
|
18
|
+
|
19
|
+
# Run the tests
|
20
|
+
result = @testset "$exercise example" begin
|
21
|
+
include(joinpath(temp_path, "runtests.jl"))
|
22
|
+
end
|
23
|
+
|
24
|
+
# Delete the temporary directory
|
25
|
+
rm(temp_path, recursive=true)
|
26
|
+
|
27
|
+
# Print test output (this is the default behaviour for older versions of Julia)
|
28
|
+
if VERSION > v"0.6.0-dev"
|
29
|
+
Base.Test.print_test_results(result)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -1,3 +1,30 @@
|
|
1
|
+
//*****************************************************************************
|
2
|
+
// You got an error, which is exactly as it should be.
|
3
|
+
// This is the first step in the Test-Driven Development
|
4
|
+
// (TDD) process.
|
5
|
+
//
|
6
|
+
// The most important part of the error is
|
7
|
+
//
|
8
|
+
// "cannot compile"
|
9
|
+
//
|
10
|
+
// It's looking for a file named uHelloWorld.pas that doesn't exist.
|
11
|
+
//
|
12
|
+
// To fix the error, create a unit file named uHelloWorld.pas
|
13
|
+
// in the same directory as the file uTestHelloWorld.pas.
|
14
|
+
//
|
15
|
+
// The beginning of the new unit file should contain a unit statement:
|
16
|
+
//
|
17
|
+
// unit uHelloWorld;
|
18
|
+
//
|
19
|
+
// The new unit should contain Interface, Implementation, and End. statements.
|
20
|
+
//
|
21
|
+
// Hint: Delphi will take care of all this if you instruct it to add a new unit
|
22
|
+
// to your project. Be sure to save the new unit as uHelloWorld.pas before
|
23
|
+
// trying to compile again.
|
24
|
+
//
|
25
|
+
// For more guidance as you work on this exercise, see
|
26
|
+
// GETTING_STARTED.md.
|
27
|
+
//*****************************************************************************
|
1
28
|
unit uTestHelloWorld;
|
2
29
|
|
3
30
|
interface
|
@@ -39,26 +66,3 @@ end;
|
|
39
66
|
initialization
|
40
67
|
TDUnitX.RegisterTestFixture(HelloWorldTest);
|
41
68
|
end.
|
42
|
-
|
43
|
-
(*
|
44
|
-
*****************************************************
|
45
|
-
You got an error, which is exactly as it should be.
|
46
|
-
This is the first step in the Test-Driven Development
|
47
|
-
(TDD) process.
|
48
|
-
|
49
|
-
The most important part of the error is
|
50
|
-
|
51
|
-
"cannot compile"
|
52
|
-
|
53
|
-
It's looking for a file named uHelloWorld.pas that doesn't
|
54
|
-
exist yet.
|
55
|
-
|
56
|
-
To fix the error, create an empty file named uHelloWorld.pas
|
57
|
-
in the same directory as the uTestHelloWorld.pas file.
|
58
|
-
|
59
|
-
Then run the test again.
|
60
|
-
|
61
|
-
For more guidance as you work on this exercise, see
|
62
|
-
GETTING_STARTED.md.
|
63
|
-
*****************************************************
|
64
|
-
*)
|
data/tracks/python/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# xPython
|
2
2
|
|
3
|
-
[![Build Status](https://travis-ci.org/exercism/xpython.
|
3
|
+
[![Build Status](https://travis-ci.org/exercism/xpython.svg?branch=master)](https://travis-ci.org/exercism/xpython) [![Requirements Status](https://requires.io/github/exercism/xpython/requirements.svg?branch=master)](https://requires.io/github/exercism/xpython/requirements/?branch=master)
|
4
4
|
[![Join the chat at https://gitter.im/exercism/xpython](https://badges.gitter.im/exercism/xpython.svg)](https://gitter.im/exercism/xpython?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
5
5
|
|
6
6
|
Exercism exercises in Python
|
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.0.6.
|
4
|
+
version: 2.0.6.14
|
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-01-
|
11
|
+
date: 2017-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|
@@ -3669,6 +3669,10 @@ files:
|
|
3669
3669
|
- tracks/java/exercises/luhn/src/example/java/Luhn.java
|
3670
3670
|
- tracks/java/exercises/luhn/src/main/java/.keep
|
3671
3671
|
- tracks/java/exercises/luhn/src/test/java/LuhnTest.java
|
3672
|
+
- tracks/java/exercises/matrix/build.gradle
|
3673
|
+
- tracks/java/exercises/matrix/src/example/java/Matrix.java
|
3674
|
+
- tracks/java/exercises/matrix/src/main/java/.keep
|
3675
|
+
- tracks/java/exercises/matrix/src/test/java/MatrixTest.java
|
3672
3676
|
- tracks/java/exercises/meetup/build.gradle
|
3673
3677
|
- tracks/java/exercises/meetup/src/example/java/Meetup.java
|
3674
3678
|
- tracks/java/exercises/meetup/src/example/java/MeetupSchedule.java
|
@@ -3728,6 +3732,10 @@ files:
|
|
3728
3732
|
- tracks/java/exercises/raindrops/src/example/java/Raindrops.java
|
3729
3733
|
- tracks/java/exercises/raindrops/src/main/java/.keep
|
3730
3734
|
- tracks/java/exercises/raindrops/src/test/java/RaindropsTest.java
|
3735
|
+
- tracks/java/exercises/rectangles/build.gradle
|
3736
|
+
- tracks/java/exercises/rectangles/src/example/java/RectangleCounter.java
|
3737
|
+
- tracks/java/exercises/rectangles/src/main/java/RectangleCounter.java
|
3738
|
+
- tracks/java/exercises/rectangles/src/test/java/RectangleCounterTest.java
|
3731
3739
|
- tracks/java/exercises/rna-transcription/build.gradle
|
3732
3740
|
- tracks/java/exercises/rna-transcription/src/example/java/RnaTranscription.java
|
3733
3741
|
- tracks/java/exercises/rna-transcription/src/main/java/.keep
|
@@ -3999,6 +4007,7 @@ files:
|
|
3999
4007
|
- tracks/julia/docs/TESTS.md
|
4000
4008
|
- tracks/julia/exercises/.keep
|
4001
4009
|
- tracks/julia/img/.keep
|
4010
|
+
- tracks/julia/runtests.jl
|
4002
4011
|
- tracks/kotlin/.git
|
4003
4012
|
- tracks/kotlin/.gitignore
|
4004
4013
|
- tracks/kotlin/.travis.yml
|
@@ -5199,7 +5208,6 @@ files:
|
|
5199
5208
|
- tracks/pascal/exercises/saddle-points/uSaddlePointsExample.pas
|
5200
5209
|
- tracks/pascal/exercises/saddle-points/uSaddlePointsTests.pas
|
5201
5210
|
- tracks/pascal/img/.keep
|
5202
|
-
- tracks/pascal/img/Delphi-icon.png.keep
|
5203
5211
|
- tracks/pascal/img/icon.png
|
5204
5212
|
- tracks/perl5/.git
|
5205
5213
|
- tracks/perl5/.gitignore
|
Binary file
|