trackler 2.0.3.0 → 2.0.3.1
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/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.
|