trackler 2.0.6.22 → 2.0.6.23
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/exercises/book-store/canonical-data.json +61 -80
- data/common/exercises/etl/canonical-data.json +69 -0
- data/lib/trackler/version.rb +1 -1
- data/tracks/go/config.json +10 -4
- data/tracks/java/config.json +13 -1
- data/tracks/java/exercises/diamond/build.gradle +17 -0
- data/tracks/java/exercises/diamond/src/example/java/DiamondPrinter.java +41 -0
- data/tracks/java/exercises/diamond/src/main/java/DiamondPrinter.java +5 -0
- data/tracks/java/exercises/diamond/src/test/java/DiamondPrinterTest.java +111 -0
- data/tracks/java/exercises/grade-school/src/example/java/School.java +20 -19
- data/tracks/java/exercises/grade-school/src/test/java/SchoolTest.java +53 -20
- data/tracks/java/exercises/secret-handshake/build.gradle +17 -0
- data/tracks/java/exercises/secret-handshake/src/example/java/HandshakeCalculator.java +29 -0
- data/tracks/java/exercises/secret-handshake/src/example/java/Signal.java +1 -0
- data/tracks/java/exercises/secret-handshake/src/main/java/HandshakeCalculator.java +5 -0
- data/tracks/java/exercises/secret-handshake/src/main/java/Signal.java +5 -0
- data/tracks/java/exercises/secret-handshake/src/test/java/HandshakeCalculatorTest.java +106 -0
- data/tracks/java/exercises/settings.gradle +2 -0
- data/tracks/julia/config.json +42 -0
- data/tracks/julia/exercises/bob/bob.jl +3 -0
- data/tracks/julia/exercises/bob/example.jl +30 -0
- data/tracks/julia/exercises/bob/runtests.jl +70 -0
- data/tracks/julia/exercises/difference-of-squares/difference-of-squares.jl +14 -0
- data/tracks/julia/exercises/difference-of-squares/example.jl +9 -0
- data/tracks/julia/exercises/difference-of-squares/runtests.jl +22 -0
- data/tracks/julia/exercises/hamming/example.jl +5 -0
- data/tracks/julia/exercises/hamming/hamming.jl +3 -0
- data/tracks/julia/exercises/hamming/runtests.jl +42 -0
- data/tracks/julia/exercises/hello-world/example.jl +3 -0
- data/tracks/julia/exercises/hello-world/hello-world.jl +3 -0
- data/tracks/julia/exercises/hello-world/runtests.jl +12 -0
- data/tracks/julia/exercises/word-count/example.jl +9 -0
- data/tracks/julia/exercises/word-count/runtests.jl +47 -0
- data/tracks/julia/exercises/word-count/word-count.jl +3 -0
- data/tracks/objective-c/config.json +10 -0
- data/tracks/objective-c/exercises/flatten-array/FlattenArrayExample.h +6 -0
- data/tracks/objective-c/exercises/flatten-array/FlattenArrayExample.m +48 -0
- data/tracks/objective-c/exercises/flatten-array/FlattenArrayTest.m +110 -0
- data/tracks/objective-c/xcodeProject/ObjectiveC.xcodeproj/project.pbxproj +33 -0
- data/tracks/ocaml/config.json +5 -0
- data/tracks/ocaml/exercises/pangram/.merlin +3 -0
- data/tracks/ocaml/exercises/pangram/Makefile +11 -0
- data/tracks/ocaml/exercises/pangram/example.ml +9 -0
- data/tracks/ocaml/exercises/pangram/pangram.mli +1 -0
- data/tracks/ocaml/exercises/pangram/test.ml +29 -0
- data/tracks/ocaml/tools/test-generator/templates/pangram/template.ml +15 -0
- data/tracks/pascal/config.json +8 -0
- data/tracks/pascal/docs/INSTALLATION.md +3 -3
- data/tracks/pascal/docs/img/07delphiclicklibrarypathbuttonLogo.png +0 -0
- data/tracks/pascal/exercises/grains/GrainsTests.dpr +60 -0
- data/tracks/pascal/exercises/grains/uGrainsExample.pas +33 -0
- data/tracks/pascal/exercises/grains/uGrainsTests.pas +149 -0
- data/tracks/perl6/SETUP.md +8 -2
- metadata +41 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9cf87d7b9dd56a6a58b3c1d87d9a23ef21f730d8
|
4
|
+
data.tar.gz: eb35ab1854d690d7fc64b61977fe31f29d3735c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa2bf7b5e78b0ae76d088865728a0703ff112c64841abcc5eb621e9bfc76b367ff3c247d27788c990034c6e9af98a64d7cb2862c4c2a881189b41d909bb6c6b3
|
7
|
+
data.tar.gz: 967886a22857e8f2e2bebb00ffd20a2ed6102c649a66f9e555a76524dbaf63371fd83239697bee6866cc0fd69858bd7f66c644e5e006cb2d72a672df800685b7
|
@@ -1,106 +1,87 @@
|
|
1
1
|
{
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
2
|
+
"book-store": {
|
3
|
+
"description": [
|
4
|
+
"Calculate lowest price for a shopping basket containing ",
|
5
|
+
"books only from a single series. There is no ",
|
6
|
+
"discount advantage for having more than one copy of ",
|
7
|
+
"any single book in a grouping."
|
8
|
+
],
|
9
|
+
"total": {
|
10
|
+
"description": "returns the total basket price after applying best discount",
|
11
|
+
"cases": [
|
10
12
|
{
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
"description": "Only a single book",
|
14
|
+
"basket": [1],
|
15
|
+
"targetgrouping": [[1]],
|
16
|
+
"expected": 8.00
|
15
17
|
},
|
16
18
|
{
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
"description": "Two of the same book",
|
20
|
+
"basket": [2,2],
|
21
|
+
"targetgrouping": [[2],[2]],
|
22
|
+
"expected": 16.00
|
21
23
|
},
|
22
24
|
{
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
"description": "Empty basket",
|
26
|
+
"basket": [],
|
27
|
+
"targetgrouping": [],
|
28
|
+
"expected": 0.00
|
27
29
|
},
|
28
30
|
{
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
31
|
+
"description": "Two different books",
|
32
|
+
"basket": [1,2],
|
33
|
+
"targetgrouping": [[1,2]],
|
34
|
+
"expected": 15.20
|
33
35
|
},
|
34
36
|
{
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
37
|
+
"description": "Three different books",
|
38
|
+
"basket": [1,2,3],
|
39
|
+
"targetgrouping": [[1,2,3]],
|
40
|
+
"expected": 21.60
|
39
41
|
},
|
40
42
|
{
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
43
|
+
"description": "Four different books",
|
44
|
+
"basket": [1,2,3,4],
|
45
|
+
"targetgrouping": [[1,2,3,4]],
|
46
|
+
"expected": 25.60
|
45
47
|
},
|
46
48
|
{
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
49
|
+
"description": "Five different books",
|
50
|
+
"basket": [1,2,3,4,5],
|
51
|
+
"targetgrouping": [[1,2,3,4,5]],
|
52
|
+
"expected": 30.00
|
51
53
|
},
|
52
54
|
{
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
"attention to this particular target grouping, it ",
|
58
|
-
"is not intuitive, but does grant the largest ",
|
59
|
-
"discount."
|
60
|
-
],
|
61
|
-
"basket": [1, 1, 2, 2, 3, 3, 4, 5],
|
62
|
-
"targetgrouping": [[1, 2, 3, 4], [1, 2, 3, 5]],
|
63
|
-
"expected": 51.20
|
55
|
+
"description": "Two each of first 3 books and 1 copy each of rest",
|
56
|
+
"basket": [1,1,2,2,3,3,4,5],
|
57
|
+
"targetgrouping": [[1,2,3,4],[1,2,3,5]],
|
58
|
+
"expected": 51.20
|
64
59
|
},
|
65
60
|
{
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
],
|
71
|
-
"basket": [1, 1, 2, 2, 3, 3, 4, 4, 5],
|
72
|
-
"targetgrouping": [[1, 2, 3, 4, 5], [1, 2, 3, 4]],
|
73
|
-
"expected": 55.60
|
61
|
+
"description": "Two each of first 4 books and 1 copy each of rest",
|
62
|
+
"basket": [1,1,2,2,3,3,4,4,5],
|
63
|
+
"targetgrouping": [[1,2,3,4,5],[1,2,3,4]],
|
64
|
+
"expected": 55.60
|
74
65
|
},
|
75
66
|
{
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
"basket": [1, 1, 2, 2, 3, 3, 4, 4, 5, 5],
|
81
|
-
"targetgrouping": [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]],
|
82
|
-
"expected": 60.00
|
67
|
+
"description": "Two copies of each book",
|
68
|
+
"basket": [1,1,2,2,3,3,4,4,5,5],
|
69
|
+
"targetgrouping": [[1,2,3,4,5],[1,2,3,4,5]],
|
70
|
+
"expected": 60.00
|
83
71
|
},
|
84
72
|
{
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
],
|
90
|
-
"basket": [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 1],
|
91
|
-
"targetgrouping": [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1]],
|
92
|
-
"expected": 68.00
|
73
|
+
"description": "Three copies of first book and 2 each of remaining",
|
74
|
+
"basket": [1,1,2,2,3,3,4,4,5,5,1],
|
75
|
+
"targetgrouping": [[1,2,3,4,5],[1,2,3,4,5],[1]],
|
76
|
+
"expected": 68.00
|
93
77
|
},
|
94
78
|
{
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
],
|
100
|
-
"basket": [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 1, 2],
|
101
|
-
"targetgrouping": [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2]],
|
102
|
-
"expected": 75.20
|
79
|
+
"description": "Three each of first 2 books and 2 each of remaining books",
|
80
|
+
"basket": [1,1,2,2,3,3,4,4,5,5,1,2],
|
81
|
+
"targetgrouping": [[1,2,3,4,5],[1,2,3,4,5],[1,2]],
|
82
|
+
"expected": 75.20
|
103
83
|
}
|
104
|
-
|
105
|
-
}
|
84
|
+
]
|
85
|
+
}
|
86
|
+
}
|
106
87
|
}
|
@@ -0,0 +1,69 @@
|
|
1
|
+
{
|
2
|
+
"transform": {
|
3
|
+
"#": [
|
4
|
+
"Note: The expected input data for these tests should have",
|
5
|
+
"integer keys (not stringified numbers as shown in the JSON below",
|
6
|
+
"Unless the language prohibits that, please implement these tests",
|
7
|
+
"such that keys are integers. e.g. in JavaScript, it might look ",
|
8
|
+
"like `transform( { 1: ['A'] } );`"
|
9
|
+
],
|
10
|
+
"description": "transforms the a set of scrabble data previously indexed by the tile score to a set of data indexed by the tile letter",
|
11
|
+
"cases": [
|
12
|
+
{
|
13
|
+
"description": "a single letter",
|
14
|
+
"input": {
|
15
|
+
"1": ["A"]
|
16
|
+
},
|
17
|
+
"expected": {
|
18
|
+
"a" : 1
|
19
|
+
}
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"description": "single score with multiple letters",
|
23
|
+
"input": {
|
24
|
+
"1": ["A", "E", "I", "O", "U" ]
|
25
|
+
},
|
26
|
+
"expected": {
|
27
|
+
"a" : 1,
|
28
|
+
"e" : 1,
|
29
|
+
"i" : 1,
|
30
|
+
"o" : 1,
|
31
|
+
"u" : 1
|
32
|
+
}
|
33
|
+
},
|
34
|
+
{
|
35
|
+
"description": "multiple scores with multiple letters",
|
36
|
+
"input": {
|
37
|
+
"1": ["A", "E"],
|
38
|
+
"2": ["D", "G"]
|
39
|
+
},
|
40
|
+
"expected": {
|
41
|
+
"a" : 1,
|
42
|
+
"e" : 1,
|
43
|
+
"d" : 2,
|
44
|
+
"g" : 2
|
45
|
+
}
|
46
|
+
},
|
47
|
+
{
|
48
|
+
"description": "multiple scores with differing numbers of letters",
|
49
|
+
"input": {
|
50
|
+
"1": [ "A", "E", "I", "O", "U", "L", "N", "R", "S", "T" ],
|
51
|
+
"2": [ "D", "G" ],
|
52
|
+
"3": [ "B", "C", "M", "P" ],
|
53
|
+
"4": [ "F", "H", "V", "W", "Y" ],
|
54
|
+
"5": [ "K" ],
|
55
|
+
"8": [ "J", "X" ],
|
56
|
+
"10": [ "Q", "Z" ]
|
57
|
+
},
|
58
|
+
"expected": {
|
59
|
+
"a": 1, "b": 3, "c": 3, "d": 2, "e": 1,
|
60
|
+
"f": 4, "g": 2, "h": 4, "i": 1, "j": 8,
|
61
|
+
"k": 5, "l": 1, "m": 3, "n": 1, "o": 1,
|
62
|
+
"p": 3, "q": 10, "r": 1, "s": 1, "t": 1,
|
63
|
+
"u": 1, "v": 4, "w": 4, "x": 8, "y": 4,
|
64
|
+
"z": 10
|
65
|
+
}
|
66
|
+
}
|
67
|
+
]
|
68
|
+
}
|
69
|
+
}
|
data/lib/trackler/version.rb
CHANGED
data/tracks/go/config.json
CHANGED
@@ -90,14 +90,20 @@
|
|
90
90
|
]
|
91
91
|
},
|
92
92
|
{
|
93
|
-
"difficulty":
|
93
|
+
"difficulty": 2,
|
94
94
|
"slug": "pangram",
|
95
|
-
"topics": [
|
95
|
+
"topics": [
|
96
|
+
"Control-flow (loops)",
|
97
|
+
"Strings"
|
98
|
+
]
|
96
99
|
},
|
97
100
|
{
|
98
|
-
"difficulty":
|
101
|
+
"difficulty": 2,
|
99
102
|
"slug": "bob",
|
100
|
-
"topics": [
|
103
|
+
"topics": [
|
104
|
+
"Control-flow (conditionals)",
|
105
|
+
"Strings"
|
106
|
+
]
|
101
107
|
},
|
102
108
|
{
|
103
109
|
"difficulty": 1,
|
data/tracks/java/config.json
CHANGED
@@ -57,7 +57,9 @@
|
|
57
57
|
"twelve-days",
|
58
58
|
"sublist",
|
59
59
|
"rectangles",
|
60
|
-
"matrix"
|
60
|
+
"matrix",
|
61
|
+
"diamond",
|
62
|
+
"secret-handshake"
|
61
63
|
],
|
62
64
|
"exercises": [
|
63
65
|
{
|
@@ -329,6 +331,16 @@
|
|
329
331
|
"slug": "matrix",
|
330
332
|
"difficulty": 1,
|
331
333
|
"topics": []
|
334
|
+
},
|
335
|
+
{
|
336
|
+
"slug": "diamond",
|
337
|
+
"difficulty": 1,
|
338
|
+
"topics": []
|
339
|
+
},
|
340
|
+
{
|
341
|
+
"slug": "secret-handshake",
|
342
|
+
"difficulty": 1,
|
343
|
+
"topics": []
|
332
344
|
}
|
333
345
|
],
|
334
346
|
"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,41 @@
|
|
1
|
+
import java.util.ArrayList;
|
2
|
+
import java.util.Collections;
|
3
|
+
import java.util.List;
|
4
|
+
|
5
|
+
final class DiamondPrinter {
|
6
|
+
|
7
|
+
private static final int A_INT = (int) 'A';
|
8
|
+
|
9
|
+
private static String blank(final int length) {
|
10
|
+
return String.join("", Collections.nCopies(length, " "));
|
11
|
+
}
|
12
|
+
|
13
|
+
private static String reverse(final String string) {
|
14
|
+
return new StringBuilder(string).reverse().toString();
|
15
|
+
}
|
16
|
+
|
17
|
+
List<String> printToList(final char chr) {
|
18
|
+
final int nRows = 2 * ((int) chr - A_INT) + 1;
|
19
|
+
|
20
|
+
final List<String> topRows = new ArrayList<>();
|
21
|
+
|
22
|
+
// Populate the top rows.
|
23
|
+
for (int nRow = 0; nRow < (nRows + 1) / 2; nRow++) {
|
24
|
+
final char rowChr = (char) (A_INT + nRow);
|
25
|
+
|
26
|
+
final String leftHalfOfRow = blank((nRows - 1) / 2 - nRow) + rowChr + blank(nRow);
|
27
|
+
final String rightHalfOfRow = reverse(leftHalfOfRow.substring(0, leftHalfOfRow.length() - 1));
|
28
|
+
final String fullRow = leftHalfOfRow + rightHalfOfRow;
|
29
|
+
|
30
|
+
topRows.add(fullRow);
|
31
|
+
}
|
32
|
+
|
33
|
+
// Populate the bottom rows by 'reflecting' the top rows.
|
34
|
+
for (int nRow = (nRows - 1) / 2 - 1; nRow >= 0; nRow--) {
|
35
|
+
topRows.add(topRows.get(nRow));
|
36
|
+
}
|
37
|
+
|
38
|
+
return topRows;
|
39
|
+
}
|
40
|
+
|
41
|
+
}
|
@@ -0,0 +1,111 @@
|
|
1
|
+
import org.junit.Ignore;
|
2
|
+
import org.junit.Test;
|
3
|
+
|
4
|
+
import java.util.List;
|
5
|
+
|
6
|
+
import static java.util.Arrays.asList;
|
7
|
+
import static java.util.Collections.singletonList;
|
8
|
+
import static org.hamcrest.CoreMatchers.is;
|
9
|
+
import static org.junit.Assert.assertThat;
|
10
|
+
|
11
|
+
public final class DiamondPrinterTest {
|
12
|
+
|
13
|
+
@Test
|
14
|
+
public void testOneByOneDiamond() {
|
15
|
+
List<String> output = new DiamondPrinter().printToList('A');
|
16
|
+
assertThat(output, is(singletonList("A")));
|
17
|
+
}
|
18
|
+
|
19
|
+
@Ignore
|
20
|
+
@Test
|
21
|
+
public void testTwoByTwoDiamond() {
|
22
|
+
List<String> output = new DiamondPrinter().printToList('B');
|
23
|
+
assertThat(output, is(asList(" A ",
|
24
|
+
"B B",
|
25
|
+
" A ")));
|
26
|
+
}
|
27
|
+
|
28
|
+
@Ignore
|
29
|
+
@Test
|
30
|
+
public void testThreeByThreeDiamond() {
|
31
|
+
List<String> output = new DiamondPrinter().printToList('C');
|
32
|
+
assertThat(output, is(asList(" A ",
|
33
|
+
" B B ",
|
34
|
+
"C C",
|
35
|
+
" B B ",
|
36
|
+
" A ")));
|
37
|
+
}
|
38
|
+
|
39
|
+
@Ignore
|
40
|
+
@Test
|
41
|
+
public void testFiveByFiveDiamond() {
|
42
|
+
List<String> output = new DiamondPrinter().printToList('E');
|
43
|
+
assertThat(output, is(asList(" A ",
|
44
|
+
" B B ",
|
45
|
+
" C C ",
|
46
|
+
" D D ",
|
47
|
+
"E E",
|
48
|
+
" D D ",
|
49
|
+
" C C ",
|
50
|
+
" B B ",
|
51
|
+
" A ")));
|
52
|
+
}
|
53
|
+
|
54
|
+
@Ignore
|
55
|
+
@Test
|
56
|
+
public void testFullDiamond() {
|
57
|
+
List<String> output = new DiamondPrinter().printToList('Z');
|
58
|
+
assertThat(output, is(asList(" A ",
|
59
|
+
" B B ",
|
60
|
+
" C C ",
|
61
|
+
" D D ",
|
62
|
+
" E E ",
|
63
|
+
" F F ",
|
64
|
+
" G G ",
|
65
|
+
" H H ",
|
66
|
+
" I I ",
|
67
|
+
" J J ",
|
68
|
+
" K K ",
|
69
|
+
" L L ",
|
70
|
+
" M M ",
|
71
|
+
" N N ",
|
72
|
+
" O O ",
|
73
|
+
" P P ",
|
74
|
+
" Q Q ",
|
75
|
+
" R R ",
|
76
|
+
" S S ",
|
77
|
+
" T T ",
|
78
|
+
" U U ",
|
79
|
+
" V V ",
|
80
|
+
" W W ",
|
81
|
+
" X X ",
|
82
|
+
" Y Y ",
|
83
|
+
"Z Z",
|
84
|
+
" Y Y ",
|
85
|
+
" X X ",
|
86
|
+
" W W ",
|
87
|
+
" V V ",
|
88
|
+
" U U ",
|
89
|
+
" T T ",
|
90
|
+
" S S ",
|
91
|
+
" R R ",
|
92
|
+
" Q Q ",
|
93
|
+
" P P ",
|
94
|
+
" O O ",
|
95
|
+
" N N ",
|
96
|
+
" M M ",
|
97
|
+
" L L ",
|
98
|
+
" K K ",
|
99
|
+
" J J ",
|
100
|
+
" I I ",
|
101
|
+
" H H ",
|
102
|
+
" G G ",
|
103
|
+
" F F ",
|
104
|
+
" E E ",
|
105
|
+
" D D ",
|
106
|
+
" C C ",
|
107
|
+
" B B ",
|
108
|
+
" A ")));
|
109
|
+
}
|
110
|
+
|
111
|
+
}
|