trackler 2.0.6.13 → 2.0.6.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
-
[](https://travis-ci.org/exercism/xpython) [](https://requires.io/github/exercism/xpython/requirements/?branch=master)
|
4
4
|
[](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
|