trackler 2.0.3.0 → 2.0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/fixtures/common/exercises/no-metadata/description.md +1 -0
- data/lib/trackler/problem.rb +12 -0
- data/lib/trackler/problems.rb +8 -12
- data/lib/trackler/version.rb +1 -1
- data/tracks/bash/README.md +2 -0
- data/tracks/c/config.json +9 -2
- data/tracks/c/exercises/sieve/makefile +15 -0
- data/tracks/c/exercises/sieve/src/example.c +50 -0
- data/tracks/c/exercises/sieve/src/sieve.h +10 -0
- data/tracks/c/exercises/sieve/test/test_sieve.c +113 -0
- data/tracks/c/exercises/sieve/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/sieve/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/sieve/test/vendor/unity_internals.h +701 -0
- data/tracks/coffeescript/.travis.yml +1 -0
- data/tracks/coldfusion/.travis.yml +1 -0
- data/tracks/crystal/Makefile +18 -15
- data/tracks/crystal/README.md +5 -5
- data/tracks/crystal/config.json +6 -0
- data/tracks/crystal/exercises/acronym/src/acronym.cr +1 -0
- data/tracks/crystal/exercises/anagram/src/anagram.cr +1 -0
- data/tracks/crystal/exercises/atbash-cipher/src/atbash_cipher.cr +1 -0
- data/tracks/crystal/exercises/binary/src/binary.cr +1 -0
- data/tracks/crystal/exercises/bob/src/bob.cr +1 -0
- data/tracks/crystal/exercises/bracket-push/src/bracket_push.cr +1 -0
- data/tracks/crystal/exercises/difference-of-squares/spec/difference_of_squares_spec.cr +44 -0
- data/tracks/crystal/exercises/difference-of-squares/src/example.cr +15 -0
- data/tracks/crystal/exercises/forth/src/forth.cr +1 -0
- data/tracks/crystal/exercises/gigasecond/src/gigasecond.cr +1 -0
- data/tracks/crystal/exercises/hamming/src/hamming.cr +1 -0
- data/tracks/crystal/exercises/hello-world/src/hello_world.cr +1 -0
- data/tracks/crystal/exercises/largest-series-product/src/largest_series_product.cr +1 -0
- data/tracks/crystal/exercises/leap/src/leap.cr +1 -0
- data/tracks/crystal/exercises/pangram/src/pangram.cr +1 -0
- data/tracks/crystal/exercises/raindrops/src/raindrops.cr +1 -0
- data/tracks/crystal/exercises/react/src/react.cr +1 -0
- data/tracks/crystal/exercises/rna-transcription/src/rna_transcription.cr +1 -0
- data/tracks/crystal/exercises/roman-numerals/src/roman_numerals.cr +1 -0
- data/tracks/crystal/exercises/sieve/src/sieve.cr +1 -0
- data/tracks/crystal/src/generator/exercises/difference_of_squares.cr +39 -0
- data/tracks/go/exercises/allergies/allergies_test.go +2 -2
- data/tracks/go/exercises/anagram/anagram_test.go +3 -3
- data/tracks/go/exercises/grade-school/grade_school_test.go +3 -3
- data/tracks/go/exercises/secret-handshake/secret_handshake_test.go +1 -1
- data/tracks/java/config.json +13 -1
- data/tracks/java/exercises/binary-search-tree/build.gradle +18 -0
- data/tracks/java/exercises/binary-search-tree/src/example/java/BST.java +122 -0
- data/tracks/java/exercises/binary-search-tree/src/main/java/.keep +0 -0
- data/tracks/java/exercises/binary-search-tree/src/test/java/.keep +0 -0
- data/tracks/java/exercises/binary-search-tree/src/test/java/BSTTest.java +163 -0
- data/tracks/java/exercises/pythagorean-triplet/build.gradle +18 -0
- data/tracks/java/exercises/pythagorean-triplet/src/example/java/PythagoreanTriplet.java +117 -0
- data/tracks/java/exercises/pythagorean-triplet/src/main/java/PythagoreanTriplet.java +3 -0
- data/tracks/java/exercises/pythagorean-triplet/src/test/java/PythagoreanTripletTest.java +95 -0
- data/tracks/java/exercises/settings.gradle +2 -0
- data/tracks/julia/README.md +16 -0
- data/tracks/perl5/README.md +2 -0
- data/tracks/perl6/README.md +2 -1
- data/tracks/php/config.json +5 -0
- data/tracks/php/exercises/sieve/example.php +29 -0
- data/tracks/php/exercises/sieve/sieve_test.php +201 -0
- data/tracks/pony/.travis.yml +1 -0
- data/tracks/python/exercises/anagram/anagram_test.py +1 -0
- data/tracks/python/exercises/beer-song/beer_song_test.py +1 -0
- data/tracks/python/exercises/binary-search/binary_search_test.py +1 -0
- data/tracks/python/exercises/binary/binary_test.py +1 -0
- data/tracks/python/exercises/bob/bob_test.py +1 -0
- data/tracks/python/exercises/clock/clock_test.py +1 -0
- data/tracks/python/exercises/etl/etl_test.py +1 -0
- data/tracks/python/exercises/gigasecond/gigasecond_test.py +1 -0
- data/tracks/python/exercises/grains/grains_test.py +1 -0
- data/tracks/python/exercises/leap/leap_test.py +1 -0
- data/tracks/python/exercises/meetup/meetup_test.py +1 -0
- data/tracks/python/exercises/nucleotide-count/nucleotide_count_test.py +1 -0
- data/tracks/python/exercises/ocr-numbers/example.py +1 -0
- data/tracks/python/exercises/ocr-numbers/ocr_test.py +1 -0
- data/tracks/python/exercises/perfect-numbers/perfect_numbers_test.py +1 -0
- data/tracks/python/exercises/phone-number/phone_number_test.py +1 -0
- data/tracks/python/exercises/pig-latin/pig_latin_test.py +1 -0
- data/tracks/python/exercises/point-mutations/point_mutations_test.py +1 -0
- data/tracks/python/exercises/poker/poker_test.py +1 -0
- data/tracks/python/exercises/prime-factors/prime_factors_test.py +1 -0
- data/tracks/python/exercises/pythagorean-triplet/example.py +2 -3
- data/tracks/python/exercises/rail-fence-cipher/rail_fence_cipher_test.py +1 -0
- data/tracks/python/exercises/raindrops/raindrops_test.py +1 -0
- data/tracks/python/exercises/rectangles/rectangles_count_test.py +1 -0
- data/tracks/python/exercises/robot-simulator/robot_simulator_test.py +1 -0
- data/tracks/python/exercises/roman-numerals/roman_numerals_test.py +1 -0
- data/tracks/python/exercises/run-length-encoding/run_length_test.py +1 -0
- data/tracks/python/exercises/say/say_test.py +1 -0
- data/tracks/python/exercises/scrabble-score/scrabble_score_test.py +1 -0
- data/tracks/python/exercises/sieve/sieve_test.py +1 -0
- data/tracks/python/exercises/space-age/space_age_test.py +1 -0
- data/tracks/python/exercises/triangle/triangle_test.py +1 -0
- data/tracks/python/exercises/word-count/word_count_test.py +1 -0
- data/tracks/python/requirements-travis.txt +1 -1
- data/tracks/ruby/docs/24pullrequests.md +21 -0
- data/tracks/ruby/exercises/bowling/.version +1 -1
- data/tracks/ruby/exercises/bowling/bowling_test.rb +44 -15
- data/tracks/ruby/exercises/bowling/example.rb +10 -5
- data/tracks/ruby/exercises/bowling/example.tt +4 -2
- data/tracks/ruby/lib/bowling_cases.rb +1 -1
- data/tracks/scala/exercises/bank-account/HINTS.md +11 -0
- data/tracks/scala/exercises/bank-account/example.scala +2 -4
- data/tracks/scala/exercises/bank-account/src/main/scala/BankAccount.scala +13 -0
- data/tracks/scala/exercises/bank-account/src/test/scala/BankAccountTest.scala +5 -5
- data/tracks/scala/exercises/hamming/HINTS.md +57 -0
- data/tracks/scala/exercises/hello-world/HINTS.md +8 -0
- data/tracks/scala/exercises/nucleotide-count/HINTS.md +61 -0
- metadata +48 -2
File without changes
|
File without changes
|
@@ -0,0 +1,163 @@
|
|
1
|
+
|
2
|
+
import java.util.Arrays;
|
3
|
+
import java.util.Collections;
|
4
|
+
import java.util.List;
|
5
|
+
import static org.junit.Assert.assertEquals;
|
6
|
+
import static org.junit.Assert.assertNotNull;
|
7
|
+
import org.junit.Ignore;
|
8
|
+
import org.junit.Test;
|
9
|
+
|
10
|
+
public class BSTTest {
|
11
|
+
|
12
|
+
@Test
|
13
|
+
public void dataIsRetained() {
|
14
|
+
BST<Integer> sut = new BST();
|
15
|
+
final int actual = 4;
|
16
|
+
sut.insert(actual);
|
17
|
+
final BST.Node<Integer> root = sut.getRoot();
|
18
|
+
assertNotNull(root);
|
19
|
+
final int expected = root.getData();
|
20
|
+
assertEquals(expected, actual);
|
21
|
+
}
|
22
|
+
|
23
|
+
@Test
|
24
|
+
@Ignore
|
25
|
+
public void insertsLess() {
|
26
|
+
BST<Integer> sut = new BST();
|
27
|
+
final int expectedRoot = 4;
|
28
|
+
final int expectedLeft = 2;
|
29
|
+
|
30
|
+
sut.insert(expectedRoot);
|
31
|
+
sut.insert(expectedLeft);
|
32
|
+
|
33
|
+
final BST.Node<Integer> root = sut.getRoot();
|
34
|
+
assertNotNull(root);
|
35
|
+
final BST.Node<Integer> left = root.getLeft();
|
36
|
+
assertNotNull(left);
|
37
|
+
|
38
|
+
final int actualRoot = root.getData();
|
39
|
+
final int actualLeft = left.getData();
|
40
|
+
assertEquals(expectedLeft, actualLeft);
|
41
|
+
assertEquals(expectedRoot, actualRoot);
|
42
|
+
}
|
43
|
+
|
44
|
+
@Test
|
45
|
+
@Ignore
|
46
|
+
public void insertsSame() {
|
47
|
+
BST<Integer> sut = new BST();
|
48
|
+
final int expectedRoot = 4;
|
49
|
+
final int expectedLeft = 4;
|
50
|
+
|
51
|
+
sut.insert(expectedRoot);
|
52
|
+
sut.insert(expectedLeft);
|
53
|
+
|
54
|
+
final BST.Node<Integer> root = sut.getRoot();
|
55
|
+
assertNotNull(root);
|
56
|
+
final BST.Node<Integer> left = root.getLeft();
|
57
|
+
assertNotNull(left);
|
58
|
+
|
59
|
+
final int actualRoot = root.getData();
|
60
|
+
final int actualLeft = left.getData();
|
61
|
+
assertEquals(expectedLeft, actualLeft);
|
62
|
+
assertEquals(expectedRoot, actualRoot);
|
63
|
+
}
|
64
|
+
|
65
|
+
@Test
|
66
|
+
@Ignore
|
67
|
+
public void insertsRight() {
|
68
|
+
BST<Integer> sut = new BST();
|
69
|
+
final int expectedRoot = 4;
|
70
|
+
final int expectedRight = 5;
|
71
|
+
|
72
|
+
sut.insert(expectedRoot);
|
73
|
+
sut.insert(expectedRight);
|
74
|
+
|
75
|
+
final BST.Node<Integer> root = sut.getRoot();
|
76
|
+
assertNotNull(root);
|
77
|
+
final BST.Node<Integer> right = root.getRight();
|
78
|
+
assertNotNull(right);
|
79
|
+
|
80
|
+
final int actualRoot = root.getData();
|
81
|
+
final int actualRight = right.getData();
|
82
|
+
assertEquals(expectedRight, actualRight);
|
83
|
+
assertEquals(expectedRoot, actualRoot);
|
84
|
+
}
|
85
|
+
|
86
|
+
@Test
|
87
|
+
@Ignore
|
88
|
+
public void createsComplexTree() {
|
89
|
+
BST<Integer> sut = new BST<>();
|
90
|
+
List<Integer> expected = Collections.unmodifiableList(
|
91
|
+
Arrays.asList(4, 2, 6, 1, 3, 5, 7)
|
92
|
+
);
|
93
|
+
|
94
|
+
List<Integer> treeData = Collections.unmodifiableList(
|
95
|
+
Arrays.asList(4, 2, 6, 1, 3, 7, 5)
|
96
|
+
);
|
97
|
+
treeData.forEach(value -> sut.insert(value));
|
98
|
+
|
99
|
+
List<Integer> actual = sut.getAsLevelOrderList();
|
100
|
+
assertEquals(expected, actual);
|
101
|
+
}
|
102
|
+
|
103
|
+
@Test
|
104
|
+
@Ignore
|
105
|
+
public void sortsSingleElement() {
|
106
|
+
BST<Integer> sut = new BST<>();
|
107
|
+
List<Integer> expected = Collections.unmodifiableList(
|
108
|
+
Arrays.asList(4)
|
109
|
+
);
|
110
|
+
|
111
|
+
sut.insert(4);
|
112
|
+
|
113
|
+
List<Integer> actual = sut.getAsSortedList();
|
114
|
+
assertEquals(expected, actual);
|
115
|
+
}
|
116
|
+
|
117
|
+
@Test
|
118
|
+
@Ignore
|
119
|
+
public void sortsCollectionOfTwoIfSecondInsertedIsSmallerThanFirst() {
|
120
|
+
BST<Integer> sut = new BST<>();
|
121
|
+
List<Integer> expected = Collections.unmodifiableList(
|
122
|
+
Arrays.asList(2, 4)
|
123
|
+
);
|
124
|
+
|
125
|
+
sut.insert(4);
|
126
|
+
sut.insert(2);
|
127
|
+
|
128
|
+
List<Integer> actual = sut.getAsSortedList();
|
129
|
+
assertEquals(expected, actual);
|
130
|
+
}
|
131
|
+
|
132
|
+
@Test
|
133
|
+
@Ignore
|
134
|
+
public void sortsCollectionOfTwoIfSecondInsertedIsBiggerThanFirst() {
|
135
|
+
BST<Integer> sut = new BST<>();
|
136
|
+
List<Integer> expected = Collections.unmodifiableList(
|
137
|
+
Arrays.asList(4, 5)
|
138
|
+
);
|
139
|
+
|
140
|
+
sut.insert(4);
|
141
|
+
sut.insert(5);
|
142
|
+
|
143
|
+
List<Integer> actual = sut.getAsSortedList();
|
144
|
+
assertEquals(expected, actual);
|
145
|
+
}
|
146
|
+
|
147
|
+
@Test
|
148
|
+
@Ignore
|
149
|
+
public void iteratesOverComplexTree() {
|
150
|
+
BST<Integer> sut = new BST<>();
|
151
|
+
List<Integer> expected = Collections.unmodifiableList(
|
152
|
+
Arrays.asList(1, 2, 3, 4, 5, 6, 7)
|
153
|
+
);
|
154
|
+
|
155
|
+
List<Integer> treeData = Collections.unmodifiableList(
|
156
|
+
Arrays.asList(4, 2, 1, 3, 6, 7, 5)
|
157
|
+
);
|
158
|
+
treeData.forEach(value -> sut.insert(value));
|
159
|
+
|
160
|
+
List<Integer> actual = sut.getAsSortedList();
|
161
|
+
assertEquals(expected, actual);
|
162
|
+
}
|
163
|
+
}
|
@@ -0,0 +1,18 @@
|
|
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
|
+
|
13
|
+
test {
|
14
|
+
testLogging {
|
15
|
+
exceptionFormat = 'full'
|
16
|
+
events = ["passed", "failed", "skipped"]
|
17
|
+
}
|
18
|
+
}
|
@@ -0,0 +1,117 @@
|
|
1
|
+
|
2
|
+
import java.util.ArrayList;
|
3
|
+
import java.util.List;
|
4
|
+
import java.util.Objects;
|
5
|
+
import java.util.stream.Collectors;
|
6
|
+
|
7
|
+
public class PythagoreanTriplet {
|
8
|
+
|
9
|
+
private int a;
|
10
|
+
private int b;
|
11
|
+
private int c;
|
12
|
+
|
13
|
+
public PythagoreanTriplet(final int a, final int b, final int c) {
|
14
|
+
this.a = a;
|
15
|
+
this.b = b;
|
16
|
+
this.c = c;
|
17
|
+
}
|
18
|
+
|
19
|
+
public static TripletListBuilder makeTripletsList() {
|
20
|
+
return new TripletListBuilder();
|
21
|
+
}
|
22
|
+
|
23
|
+
public int calculateSum() {
|
24
|
+
return this.a + this.b + this.c;
|
25
|
+
}
|
26
|
+
|
27
|
+
public long calculateProduct() {
|
28
|
+
return this.a * this.b * this.c;
|
29
|
+
}
|
30
|
+
|
31
|
+
public boolean isPythagorean() {
|
32
|
+
return this.a * this.a + this.b * this.b == this.c * this.c;
|
33
|
+
}
|
34
|
+
|
35
|
+
@Override
|
36
|
+
public int hashCode() {
|
37
|
+
return Objects.hash(a, b, c);
|
38
|
+
}
|
39
|
+
|
40
|
+
@Override
|
41
|
+
public boolean equals(Object obj) {
|
42
|
+
if (this == obj) {
|
43
|
+
return true;
|
44
|
+
}
|
45
|
+
if (obj == null) {
|
46
|
+
return false;
|
47
|
+
}
|
48
|
+
if (getClass() != obj.getClass()) {
|
49
|
+
return false;
|
50
|
+
}
|
51
|
+
final PythagoreanTriplet other = (PythagoreanTriplet) obj;
|
52
|
+
if (this.a != other.a) {
|
53
|
+
return false;
|
54
|
+
}
|
55
|
+
if (this.b != other.b) {
|
56
|
+
return false;
|
57
|
+
}
|
58
|
+
if (this.c != other.c) {
|
59
|
+
return false;
|
60
|
+
}
|
61
|
+
return true;
|
62
|
+
}
|
63
|
+
|
64
|
+
public static class TripletListBuilder {
|
65
|
+
|
66
|
+
private static final int MAX_FACTOR_DEFAULT_VALUE = 0;
|
67
|
+
private static final int SUM_DEFAULT_VALUE = -1;
|
68
|
+
|
69
|
+
private int maxFactor = MAX_FACTOR_DEFAULT_VALUE;
|
70
|
+
private int minFactor = 1;
|
71
|
+
private int sum = SUM_DEFAULT_VALUE;
|
72
|
+
|
73
|
+
public TripletListBuilder() {
|
74
|
+
}
|
75
|
+
|
76
|
+
public TripletListBuilder withFactorsLessThanOrEqualTo(
|
77
|
+
final int maxFactor) {
|
78
|
+
this.maxFactor = maxFactor;
|
79
|
+
return this;
|
80
|
+
}
|
81
|
+
|
82
|
+
public TripletListBuilder withFactorsGreaterThanOrEqualTo(
|
83
|
+
final int minFactor) {
|
84
|
+
this.minFactor = minFactor;
|
85
|
+
return this;
|
86
|
+
}
|
87
|
+
|
88
|
+
public TripletListBuilder thatSumTo(final int sum) {
|
89
|
+
this.sum = sum;
|
90
|
+
return this;
|
91
|
+
}
|
92
|
+
|
93
|
+
public List<PythagoreanTriplet> build() {
|
94
|
+
List<PythagoreanTriplet> triplets = new ArrayList<>();
|
95
|
+
if (this.maxFactor == MAX_FACTOR_DEFAULT_VALUE) {
|
96
|
+
return triplets;
|
97
|
+
}
|
98
|
+
double sqrt;
|
99
|
+
int floor;
|
100
|
+
for (int n = minFactor; n < maxFactor; n++) {
|
101
|
+
for (int m = n + 1; m < maxFactor; m++) {
|
102
|
+
sqrt = Math.sqrt(n * n + m * m);
|
103
|
+
floor = (int) Math.floor(sqrt);
|
104
|
+
if (sqrt == floor) {
|
105
|
+
triplets.add(new PythagoreanTriplet(m, n, floor));
|
106
|
+
}
|
107
|
+
}
|
108
|
+
}
|
109
|
+
if (sum != SUM_DEFAULT_VALUE) {
|
110
|
+
return triplets.stream()
|
111
|
+
.filter(t -> t.calculateSum() == sum)
|
112
|
+
.collect(Collectors.toList());
|
113
|
+
}
|
114
|
+
return triplets;
|
115
|
+
}
|
116
|
+
}
|
117
|
+
}
|
@@ -0,0 +1,95 @@
|
|
1
|
+
|
2
|
+
import java.util.Arrays;
|
3
|
+
import java.util.HashMap;
|
4
|
+
import java.util.List;
|
5
|
+
import java.util.Map;
|
6
|
+
import java.util.stream.Collectors;
|
7
|
+
import static org.junit.Assert.assertEquals;
|
8
|
+
import static org.junit.Assert.assertFalse;
|
9
|
+
import static org.junit.Assert.assertTrue;
|
10
|
+
import org.junit.Test;
|
11
|
+
import org.junit.Ignore;
|
12
|
+
|
13
|
+
public class PythagoreanTripletTest {
|
14
|
+
|
15
|
+
@Test
|
16
|
+
public void shouldCalculateSum() {
|
17
|
+
PythagoreanTriplet sut = new PythagoreanTriplet(3, 4, 5);
|
18
|
+
final int expected = 12;
|
19
|
+
final int actual = sut.calculateSum();
|
20
|
+
assertEquals(expected, actual);
|
21
|
+
}
|
22
|
+
|
23
|
+
@Test
|
24
|
+
@Ignore
|
25
|
+
public void shouldCalculateProduct() {
|
26
|
+
PythagoreanTriplet sut = new PythagoreanTriplet(3, 4, 5);
|
27
|
+
final long expected = 60l;
|
28
|
+
final long actual = sut.calculateProduct();
|
29
|
+
assertEquals(expected, actual);
|
30
|
+
}
|
31
|
+
|
32
|
+
@Test
|
33
|
+
@Ignore
|
34
|
+
public void testIsPythagoreanOK() {
|
35
|
+
PythagoreanTriplet sut = new PythagoreanTriplet(3, 4, 5);
|
36
|
+
assertTrue(sut.isPythagorean());
|
37
|
+
}
|
38
|
+
|
39
|
+
@Test
|
40
|
+
@Ignore
|
41
|
+
public void testIsPythagoreanFail() {
|
42
|
+
PythagoreanTriplet sut = new PythagoreanTriplet(5, 6, 7);
|
43
|
+
assertFalse(sut.isPythagorean());
|
44
|
+
}
|
45
|
+
|
46
|
+
@Test
|
47
|
+
@Ignore
|
48
|
+
public void shouldMakeTripletsUpToTen() {
|
49
|
+
final List<Long> actual
|
50
|
+
= PythagoreanTriplet
|
51
|
+
.makeTripletsList()
|
52
|
+
.withFactorsLessThanOrEqualTo(10)
|
53
|
+
.build()
|
54
|
+
.stream()
|
55
|
+
.map(t -> t.calculateProduct())
|
56
|
+
.sorted()
|
57
|
+
.collect(Collectors.toList());
|
58
|
+
final List<Long> expected = Arrays.asList(60l, 480l);
|
59
|
+
assertEquals(expected, actual);
|
60
|
+
}
|
61
|
+
|
62
|
+
@Test
|
63
|
+
@Ignore
|
64
|
+
public void shouldMakeTripletsElevenToTwenty() {
|
65
|
+
final List<Long> actual
|
66
|
+
= PythagoreanTriplet
|
67
|
+
.makeTripletsList()
|
68
|
+
.withFactorsGreaterThanOrEqualTo(11)
|
69
|
+
.withFactorsLessThanOrEqualTo(20)
|
70
|
+
.build()
|
71
|
+
.stream()
|
72
|
+
.map(t -> t.calculateProduct())
|
73
|
+
.sorted((p1, p2) -> Double.compare(p1, p2))
|
74
|
+
.collect(Collectors.toList());
|
75
|
+
final List<Long> expected = Arrays.asList(3840l);
|
76
|
+
assertEquals(expected, actual);
|
77
|
+
}
|
78
|
+
|
79
|
+
@Test
|
80
|
+
@Ignore
|
81
|
+
public void shouldMakeTripletsAndFilterOnSum() {
|
82
|
+
final List<Long> actual
|
83
|
+
= PythagoreanTriplet
|
84
|
+
.makeTripletsList()
|
85
|
+
.withFactorsLessThanOrEqualTo(100)
|
86
|
+
.thatSumTo(180)
|
87
|
+
.build()
|
88
|
+
.stream()
|
89
|
+
.map(t -> t.calculateProduct())
|
90
|
+
.sorted((p1, p2) -> Double.compare(p1, p2))
|
91
|
+
.collect(Collectors.toList());
|
92
|
+
final List<Long> expected = Arrays.asList(118080l, 168480l, 202500l);
|
93
|
+
assertEquals(expected, actual);
|
94
|
+
}
|
95
|
+
}
|
@@ -5,6 +5,7 @@ include 'anagram'
|
|
5
5
|
include 'atbash-cipher'
|
6
6
|
include 'beer-song'
|
7
7
|
include 'binary'
|
8
|
+
include 'binary-search-tree'
|
8
9
|
include 'bob'
|
9
10
|
include 'bracket-push'
|
10
11
|
include 'crypto-square'
|
@@ -34,6 +35,7 @@ include 'robot-name'
|
|
34
35
|
include 'robot-simulator'
|
35
36
|
include 'roman-numerals'
|
36
37
|
include 'prime-factors'
|
38
|
+
include 'pythagorean-triplet'
|
37
39
|
include 'scrabble-score'
|
38
40
|
include 'series'
|
39
41
|
include 'sieve'
|
data/tracks/julia/README.md
CHANGED
@@ -9,3 +9,19 @@ _Document how to contribute to the Julia track._
|
|
9
9
|
## Contributing Guide
|
10
10
|
|
11
11
|
Please see the [contributing guide](https://github.com/exercism/x-common/blob/master/CONTRIBUTING.md).
|
12
|
+
|
13
|
+
## Working on the Exercises
|
14
|
+
|
15
|
+
A pool of exercises can be found in the [x-Common repo](https://github.com/exercism/x-common).
|
16
|
+
|
17
|
+
Exercises for the Julia track go in the `exercises` directory and should follow the following filename conventions:
|
18
|
+
|
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
|
+
|
21
|
+
`exercises/<slug>/runtests.jl` Test suite for the exercise. Group related tests using [testsets](http://docs.julialang.org/en/release-0.5/stdlib/test/#working-with-test-sets).
|
22
|
+
|
23
|
+
`exercises/<slug>/example.jl` Example solution for the exercise. It should follow the [Julia Style Guide](http://docs.julialang.org/en/release-0.5/manual/style-guide/).
|
24
|
+
|
25
|
+
Replace `<slug>` with the exercise slug of the exercise you're working on.
|
26
|
+
|
27
|
+
See [Issue #2](https://github.com/exercism/xjulia/issues/2) for discussion on the structure.
|