trackler 2.0.5.1 → 2.0.5.2
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/tree-building/description.md +15 -3
- data/lib/trackler/version.rb +1 -1
- data/tracks/ecmascript/exercises/queen-attack/queen-attack.spec.js +1 -1
- data/tracks/elm/.gitignore +1 -0
- data/tracks/elm/.travis.yml +3 -3
- data/tracks/elm/SETUP.md +16 -3
- data/tracks/elm/bin/build.sh +10 -10
- data/tracks/elm/bin/install-elm-format +1 -1
- data/tracks/elm/docs/INSTALLATION.md +2 -2
- data/tracks/elm/docs/TESTS.md +3 -3
- data/tracks/elm/elm-package.json +5 -5
- data/tracks/elm/exercises/accumulate/{Accumulate.example → Accumulate.example.elm} +0 -0
- data/tracks/elm/exercises/accumulate/{AccumulateTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/accumulate/elm-package.json +4 -4
- data/tracks/elm/exercises/accumulate/package.json +13 -0
- data/tracks/elm/exercises/allergies/{Allergies.example → Allergies.example.elm} +2 -2
- data/tracks/elm/exercises/allergies/{AllergiesTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/allergies/elm-package.json +4 -4
- data/tracks/elm/exercises/allergies/package.json +13 -0
- data/tracks/elm/exercises/anagram/{Anagram.example → Anagram.example.elm} +0 -0
- data/tracks/elm/exercises/anagram/{AnagramTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/anagram/elm-package.json +4 -4
- data/tracks/elm/exercises/anagram/package.json +13 -0
- data/tracks/elm/exercises/atbash-cipher/{AtbashCipher.example → AtbashCipher.example.elm} +0 -0
- data/tracks/elm/exercises/atbash-cipher/{AtbashCipherTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/atbash-cipher/elm-package.json +4 -4
- data/tracks/elm/exercises/atbash-cipher/package.json +13 -0
- data/tracks/elm/exercises/bob/{Bob.example → Bob.example.elm} +0 -0
- data/tracks/elm/exercises/bob/{BobTests.elm → Tests.elm} +3 -3
- data/tracks/elm/exercises/bob/elm-package.json +4 -4
- data/tracks/elm/exercises/bob/package.json +13 -0
- data/tracks/elm/exercises/difference-of-squares/{DifferenceOfSquares.example → DifferenceOfSquares.example.elm} +1 -1
- data/tracks/elm/exercises/difference-of-squares/{DifferenceOfSquaresTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/difference-of-squares/elm-package.json +4 -4
- data/tracks/elm/exercises/difference-of-squares/package.json +13 -0
- data/tracks/elm/exercises/gigasecond/{Gigasecond.example → Gigasecond.example.elm} +0 -0
- data/tracks/elm/exercises/gigasecond/{GigasecondTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/gigasecond/elm-package.json +4 -4
- data/tracks/elm/exercises/gigasecond/package.json +13 -0
- data/tracks/elm/exercises/grade-school/{GradeSchool.example → GradeSchool.example.elm} +1 -1
- data/tracks/elm/exercises/grade-school/{GradeSchoolTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/grade-school/elm-package.json +4 -4
- data/tracks/elm/exercises/grade-school/package.json +13 -0
- data/tracks/elm/exercises/hamming/{Hamming.example → Hamming.example.elm} +0 -0
- data/tracks/elm/exercises/hamming/{HammingTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/hamming/elm-package.json +4 -4
- data/tracks/elm/exercises/hamming/package.json +13 -0
- data/tracks/elm/exercises/hello-world/HelloWorld.elm +8 -8
- data/tracks/elm/exercises/hello-world/{HelloWorld.example → HelloWorld.example.elm} +0 -0
- data/tracks/elm/exercises/hello-world/{HelloWorldTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/hello-world/elm-package.json +4 -4
- data/tracks/elm/exercises/hello-world/package.json +13 -0
- data/tracks/elm/exercises/hello-world/yarn.lock +1136 -0
- data/tracks/elm/exercises/largest-series-product/{LargestSeriesProduct.example → LargestSeriesProduct.example.elm} +0 -0
- data/tracks/elm/exercises/largest-series-product/{LargestSeriesProductTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/largest-series-product/elm-package.json +4 -4
- data/tracks/elm/exercises/largest-series-product/package.json +13 -0
- data/tracks/elm/exercises/leap/{Leap.example → Leap.example.elm} +0 -0
- data/tracks/elm/exercises/leap/{LeapTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/leap/elm-package.json +4 -4
- data/tracks/elm/exercises/leap/package.json +13 -0
- data/tracks/elm/exercises/list-ops/{ListOps.example → ListOps.example.elm} +0 -0
- data/tracks/elm/exercises/list-ops/{ListOpsTests.elm → Tests.elm} +14 -14
- data/tracks/elm/exercises/list-ops/elm-package.json +4 -4
- data/tracks/elm/exercises/list-ops/package.json +13 -0
- data/tracks/elm/exercises/nucleotide-count/{NucleotideCount.example → NucleotideCount.example.elm} +0 -0
- data/tracks/elm/exercises/nucleotide-count/{NucleotideCountTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/nucleotide-count/elm-package.json +4 -4
- data/tracks/elm/exercises/nucleotide-count/package.json +13 -0
- data/tracks/elm/exercises/pangram/{Pangram.example → Pangram.example.elm} +0 -0
- data/tracks/elm/exercises/pangram/{PangramTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/pangram/elm-package.json +4 -4
- data/tracks/elm/exercises/pangram/package.json +13 -0
- data/tracks/elm/exercises/phone-number/{PhoneNumber.example → PhoneNumber.example.elm} +0 -0
- data/tracks/elm/exercises/phone-number/{PhoneNumberTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/phone-number/elm-package.json +4 -4
- data/tracks/elm/exercises/phone-number/package.json +13 -0
- data/tracks/elm/exercises/raindrops/{Raindrops.example → Raindrops.example.elm} +0 -0
- data/tracks/elm/exercises/raindrops/{RaindropsTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/raindrops/elm-package.json +4 -4
- data/tracks/elm/exercises/raindrops/package.json +13 -0
- data/tracks/elm/exercises/rna-transcription/{RNATranscription.example → RNATranscription.example.elm} +0 -0
- data/tracks/elm/exercises/rna-transcription/{RNATranscriptionTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/rna-transcription/elm-package.json +4 -4
- data/tracks/elm/exercises/rna-transcription/package.json +13 -0
- data/tracks/elm/exercises/robot-simulator/{RobotSimulator.example → RobotSimulator.example.elm} +0 -0
- data/tracks/elm/exercises/robot-simulator/{RobotSimulatorTests.elm → Tests.elm} +4 -4
- data/tracks/elm/exercises/robot-simulator/elm-package.json +4 -4
- data/tracks/elm/exercises/robot-simulator/package.json +13 -0
- data/tracks/elm/exercises/roman-numerals/{RomanNumerals.example → RomanNumerals.example.elm} +0 -0
- data/tracks/elm/exercises/roman-numerals/{RomanNumeralsTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/roman-numerals/elm-package.json +4 -4
- data/tracks/elm/exercises/roman-numerals/package.json +13 -0
- data/tracks/elm/exercises/run-length-encoding/{RunLengthEncoding.example → RunLengthEncoding.example.elm} +2 -2
- data/tracks/elm/exercises/run-length-encoding/{RunLengthEncodingTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/run-length-encoding/elm-package.json +4 -4
- data/tracks/elm/exercises/run-length-encoding/package.json +13 -0
- data/tracks/elm/exercises/say/{Say.example → Say.example.elm} +0 -0
- data/tracks/elm/exercises/say/{SayTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/say/elm-package.json +4 -4
- data/tracks/elm/exercises/say/package.json +13 -0
- data/tracks/elm/exercises/scrabble-score/{ScrabbleScore.example → ScrabbleScore.example.elm} +0 -0
- data/tracks/elm/exercises/scrabble-score/{ScrabbleScoreTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/scrabble-score/elm-package.json +4 -4
- data/tracks/elm/exercises/scrabble-score/package.json +13 -0
- data/tracks/elm/exercises/series/{Series.example → Series.example.elm} +0 -0
- data/tracks/elm/exercises/series/{SeriesTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/series/elm-package.json +4 -4
- data/tracks/elm/exercises/series/package.json +13 -0
- data/tracks/elm/exercises/space-age/{SpaceAge.example → SpaceAge.example.elm} +0 -0
- data/tracks/elm/exercises/space-age/{SpaceAgeTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/space-age/elm-package.json +4 -4
- data/tracks/elm/exercises/space-age/package.json +13 -0
- data/tracks/elm/exercises/strain/{Strain.example → Strain.example.elm} +0 -0
- data/tracks/elm/exercises/strain/{StrainTests.elm → Tests.elm} +3 -3
- data/tracks/elm/exercises/strain/elm-package.json +4 -4
- data/tracks/elm/exercises/strain/package.json +13 -0
- data/tracks/elm/exercises/sublist/{Sublist.example → Sublist.example.elm} +0 -0
- data/tracks/elm/exercises/sublist/{SublistTests.elm → Tests.elm} +5 -5
- data/tracks/elm/exercises/sublist/elm-package.json +4 -4
- data/tracks/elm/exercises/sublist/package.json +13 -0
- data/tracks/elm/exercises/sum-of-multiples/{SumOfMultiples.example → SumOfMultiples.example.elm} +1 -1
- data/tracks/elm/exercises/sum-of-multiples/{SumOfMultiplesTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/sum-of-multiples/elm-package.json +4 -4
- data/tracks/elm/exercises/sum-of-multiples/package.json +13 -0
- data/tracks/elm/exercises/triangle/{TriangleTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/triangle/{Triangle.example → Triangle.example.elm} +1 -1
- data/tracks/elm/exercises/triangle/elm-package.json +4 -4
- data/tracks/elm/exercises/triangle/package.json +13 -0
- data/tracks/elm/exercises/word-count/{WordCountTests.elm → Tests.elm} +2 -2
- data/tracks/elm/exercises/word-count/{WordCount.example → WordCount.example.elm} +0 -0
- data/tracks/elm/exercises/word-count/elm-package.json +4 -4
- data/tracks/elm/exercises/word-count/package.json +13 -0
- data/tracks/elm/package.json +10 -0
- data/tracks/fsharp/exercises/beer-song/HINTS.md +2 -0
- data/tracks/fsharp/exercises/grade-school/HINTS.md +3 -0
- data/tracks/fsharp/exercises/tree-building/Example.fs +7 -3
- data/tracks/fsharp/exercises/tree-building/TreeBuilding.fs +7 -4
- data/tracks/fsharp/exercises/tree-building/TreeBuildingTest.fs +49 -49
- data/tracks/fsharp/exercises/wordy/HINTS.md +3 -0
- data/tracks/java/config.json +13 -1
- data/tracks/java/exercises/anagram/build.gradle +0 -1
- data/tracks/java/exercises/anagram/src/test/java/AnagramTest.java +17 -13
- data/tracks/java/exercises/etl/build.gradle +0 -2
- data/tracks/java/exercises/grade-school/build.gradle +0 -1
- data/tracks/java/exercises/grade-school/src/test/java/SchoolTest.java +17 -13
- data/tracks/java/exercises/linked-list/build.gradle +0 -1
- data/tracks/java/exercises/linked-list/src/test/java/DequeTest.java +16 -15
- data/tracks/java/exercises/meetup/build.gradle +0 -1
- data/tracks/java/exercises/meetup/src/test/java/MeetupTest.java +96 -95
- data/tracks/java/exercises/nth-prime/build.gradle +0 -1
- data/tracks/java/exercises/nth-prime/src/test/java/PrimeTest.java +6 -5
- data/tracks/java/exercises/palindrome-products/build.gradle +18 -0
- data/tracks/java/exercises/palindrome-products/src/example/java/Palindromes.java +77 -0
- data/tracks/java/exercises/palindrome-products/src/main/java/.keep +0 -0
- data/tracks/java/exercises/palindrome-products/src/test/java/PalindromesTest.java +162 -0
- data/tracks/java/exercises/settings.gradle +2 -0
- data/tracks/java/exercises/sum-of-multiples/src/example/java/SumOfMultiples.java +1 -2
- data/tracks/java/exercises/sum-of-multiples/src/main/java/SumOfMultiples.java +0 -1
- data/tracks/java/exercises/sum-of-multiples/src/test/{SumOfMultiplesTest.java → java/SumOfMultiplesTest.java} +12 -24
- data/tracks/java/exercises/wordy/build.gradle +17 -0
- data/tracks/java/exercises/wordy/src/example/java/WordProblemSolver.java +57 -0
- data/tracks/java/exercises/wordy/src/main/java/WordProblemSolver.java +5 -0
- data/tracks/java/exercises/wordy/src/test/java/WordProblemSolverTest.java +119 -0
- data/tracks/lua/docs/TESTS.md +1 -1
- data/tracks/ruby/lib/generator.rb +17 -8
- data/tracks/ruby/test/fixtures/exercises/alpha/.meta/.version +1 -0
- data/tracks/ruby/test/fixtures/exercises/alpha/alpha_test.rb +1 -0
- data/tracks/ruby/test/fixtures/exercises/alpha/example.rb +5 -0
- data/tracks/ruby/test/fixtures/exercises/alpha/example.tt +1 -0
- data/tracks/ruby/test/fixtures/metadata/exercises/alpha/canonical-data.json +11 -0
- data/tracks/ruby/test/generator_test.rb +54 -1
- data/tracks/swift/docs/TESTS.md +12 -12
- data/tracks/swift/{img/page_assets/001-splash.png → docs/img/tests_001-splash.png} +0 -0
- data/tracks/swift/{img/page_assets/002-templateChooser.png → docs/img/tests_002-templateChooser.png} +0 -0
- data/tracks/swift/{img/page_assets/003-nameProject.jpg → docs/img/tests_003-nameProject.jpg} +0 -0
- data/tracks/swift/{img/page_assets/004-saveProject.jpg → docs/img/tests_004-saveProject.jpg} +0 -0
- data/tracks/swift/{img/page_assets/005-folderLayout.png → docs/img/tests_005-folderLayout.png} +0 -0
- data/tracks/swift/{img/page_assets/006-newProjectInitial.jpg → docs/img/tests_006-newProjectInitial.jpg} +0 -0
- data/tracks/swift/{img/page_assets/007-fileInspectorUpdate.png → docs/img/tests_007-fileInspectorUpdate.png} +0 -0
- data/tracks/swift/{img/page_assets/008-templateChooserSwift.png → docs/img/tests_008-templateChooserSwift.png} +0 -0
- data/tracks/swift/{img/page_assets/009-importTestSource.png → docs/img/tests_009-importTestSource.png} +0 -0
- data/tracks/swift/{img/page_assets/010-testsImportExample.png → docs/img/tests_010-testsImportExample.png} +0 -0
- data/tracks/swift/{img/page_assets/011-finalLayoutExample.png → docs/img/tests_011-finalLayoutExample.png} +0 -0
- metadata +122 -134
- data/tracks/elm/exercises/accumulate/runtests.bat +0 -1
- data/tracks/elm/exercises/accumulate/runtests.sh +0 -2
- data/tracks/elm/exercises/allergies/runtests.bat +0 -1
- data/tracks/elm/exercises/allergies/runtests.sh +0 -2
- data/tracks/elm/exercises/anagram/runtests.bat +0 -1
- data/tracks/elm/exercises/anagram/runtests.sh +0 -2
- data/tracks/elm/exercises/atbash-cipher/runtests.bat +0 -1
- data/tracks/elm/exercises/atbash-cipher/runtests.sh +0 -2
- data/tracks/elm/exercises/bob/runtests.bat +0 -1
- data/tracks/elm/exercises/bob/runtests.sh +0 -2
- data/tracks/elm/exercises/difference-of-squares/runtests.bat +0 -1
- data/tracks/elm/exercises/difference-of-squares/runtests.sh +0 -2
- data/tracks/elm/exercises/gigasecond/runtests.bat +0 -1
- data/tracks/elm/exercises/gigasecond/runtests.sh +0 -2
- data/tracks/elm/exercises/grade-school/runtests.bat +0 -1
- data/tracks/elm/exercises/grade-school/runtests.sh +0 -2
- data/tracks/elm/exercises/hamming/runtests.bat +0 -1
- data/tracks/elm/exercises/hamming/runtests.sh +0 -2
- data/tracks/elm/exercises/hello-world/runtests.bat +0 -1
- data/tracks/elm/exercises/hello-world/runtests.sh +0 -2
- data/tracks/elm/exercises/largest-series-product/runtests.bat +0 -1
- data/tracks/elm/exercises/largest-series-product/runtests.sh +0 -2
- data/tracks/elm/exercises/leap/runtests.bat +0 -1
- data/tracks/elm/exercises/leap/runtests.sh +0 -2
- data/tracks/elm/exercises/list-ops/runtests.bat +0 -1
- data/tracks/elm/exercises/list-ops/runtests.sh +0 -2
- data/tracks/elm/exercises/nucleotide-count/runtests.bat +0 -1
- data/tracks/elm/exercises/nucleotide-count/runtests.sh +0 -2
- data/tracks/elm/exercises/pangram/runtests.bat +0 -1
- data/tracks/elm/exercises/pangram/runtests.sh +0 -2
- data/tracks/elm/exercises/phone-number/runtests.bat +0 -1
- data/tracks/elm/exercises/phone-number/runtests.sh +0 -2
- data/tracks/elm/exercises/raindrops/runtests.bat +0 -1
- data/tracks/elm/exercises/raindrops/runtests.sh +0 -2
- data/tracks/elm/exercises/rna-transcription/runtests.bat +0 -1
- data/tracks/elm/exercises/rna-transcription/runtests.sh +0 -2
- data/tracks/elm/exercises/robot-simulator/runtests.bat +0 -1
- data/tracks/elm/exercises/robot-simulator/runtests.sh +0 -2
- data/tracks/elm/exercises/roman-numerals/runtests.bat +0 -1
- data/tracks/elm/exercises/roman-numerals/runtests.sh +0 -2
- data/tracks/elm/exercises/run-length-encoding/runtests.bat +0 -1
- data/tracks/elm/exercises/run-length-encoding/runtests.sh +0 -2
- data/tracks/elm/exercises/say/runtests.bat +0 -1
- data/tracks/elm/exercises/say/runtests.sh +0 -2
- data/tracks/elm/exercises/scrabble-score/runtests.bat +0 -1
- data/tracks/elm/exercises/scrabble-score/runtests.sh +0 -2
- data/tracks/elm/exercises/series/runtests.bat +0 -1
- data/tracks/elm/exercises/series/runtests.sh +0 -2
- data/tracks/elm/exercises/space-age/runtests.bat +0 -1
- data/tracks/elm/exercises/space-age/runtests.sh +0 -2
- data/tracks/elm/exercises/strain/runtests.bat +0 -1
- data/tracks/elm/exercises/strain/runtests.sh +0 -2
- data/tracks/elm/exercises/sublist/runtests.bat +0 -1
- data/tracks/elm/exercises/sublist/runtests.sh +0 -2
- data/tracks/elm/exercises/sum-of-multiples/runtests.bat +0 -1
- data/tracks/elm/exercises/sum-of-multiples/runtests.sh +0 -2
- data/tracks/elm/exercises/triangle/runtests.bat +0 -1
- data/tracks/elm/exercises/triangle/runtests.sh +0 -2
- data/tracks/elm/exercises/word-count/runtests.bat +0 -1
- data/tracks/elm/exercises/word-count/runtests.sh +0 -2
|
@@ -1,31 +1,32 @@
|
|
|
1
1
|
import org.junit.Test;
|
|
2
2
|
import org.junit.Ignore;
|
|
3
3
|
|
|
4
|
-
import static org.
|
|
4
|
+
import static org.hamcrest.CoreMatchers.*;
|
|
5
|
+
import static org.junit.Assert.*;
|
|
5
6
|
|
|
6
7
|
public class PrimeTest {
|
|
7
8
|
|
|
8
9
|
@Test
|
|
9
10
|
public void testFirstPrime() {
|
|
10
|
-
assertThat(Prime.nth(1)
|
|
11
|
+
assertThat(Prime.nth(1), is(2));
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
@Ignore
|
|
14
15
|
@Test
|
|
15
16
|
public void testSecondPrime() {
|
|
16
|
-
assertThat(Prime.nth(2)
|
|
17
|
+
assertThat(Prime.nth(2), is(3));
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
@Ignore
|
|
20
21
|
@Test
|
|
21
22
|
public void testSixthPrime() {
|
|
22
|
-
assertThat(Prime.nth(6)
|
|
23
|
+
assertThat(Prime.nth(6), is(13));
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
@Ignore
|
|
26
27
|
@Test
|
|
27
28
|
public void testBigPrime() {
|
|
28
|
-
assertThat(Prime.nth(10001)
|
|
29
|
+
assertThat(Prime.nth(10001), is(104743));
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
@Ignore
|
|
@@ -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,77 @@
|
|
|
1
|
+
|
|
2
|
+
import java.util.ArrayList;
|
|
3
|
+
import java.util.Arrays;
|
|
4
|
+
import java.util.Collections;
|
|
5
|
+
import java.util.List;
|
|
6
|
+
import java.util.SortedMap;
|
|
7
|
+
import java.util.TreeMap;
|
|
8
|
+
|
|
9
|
+
public class Palindromes {
|
|
10
|
+
|
|
11
|
+
public static class PalindromeSortedSetBuilder {
|
|
12
|
+
|
|
13
|
+
private int minFactor = 1;
|
|
14
|
+
private int maxFactor = 1;
|
|
15
|
+
|
|
16
|
+
public PalindromeSortedSetBuilder() {
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
public PalindromeSortedSetBuilder withFactorsLessThanOrEqualTo(
|
|
20
|
+
final int maxFactor) {
|
|
21
|
+
this.maxFactor = maxFactor;
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public PalindromeSortedSetBuilder withFactorsGreaterThanOrEqualTo(
|
|
26
|
+
final int minFactor) {
|
|
27
|
+
this.minFactor = minFactor;
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public SortedMap<Long, List<List<Integer>>> build() {
|
|
32
|
+
SortedMap<Long, List<List<Integer>>> palindromes = new TreeMap<>();
|
|
33
|
+
long num;
|
|
34
|
+
List<List<Integer>> factors;
|
|
35
|
+
for (int i = this.maxFactor; i >= this.minFactor; i--) {
|
|
36
|
+
for (int j = this.maxFactor; j >= i; j--) {
|
|
37
|
+
num = i * j;
|
|
38
|
+
if (isPalindrome(num)) {
|
|
39
|
+
factors = palindromes.get(num);
|
|
40
|
+
if (factors == null) {
|
|
41
|
+
factors = new ArrayList<>();
|
|
42
|
+
}
|
|
43
|
+
factors.add(Arrays.asList(i, j));
|
|
44
|
+
palindromes.put(num, factors);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return Collections.unmodifiableSortedMap(palindromes);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// http://stackoverflow.com/questions/23984654/how-to-print-all-palindromes-upto-1000-without-using-any-string-stringbuilder
|
|
52
|
+
private long reverseNumber(long number) {
|
|
53
|
+
if (number < 10l) {
|
|
54
|
+
return number;
|
|
55
|
+
}
|
|
56
|
+
long result = 0;
|
|
57
|
+
long tmp = number;
|
|
58
|
+
while (tmp > 0) {
|
|
59
|
+
result = result * 10 + (tmp % 10);
|
|
60
|
+
tmp /= 10;
|
|
61
|
+
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private boolean isPalindrome(long number) {
|
|
67
|
+
return number == reverseNumber(number);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
private Palindromes() {
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
public static PalindromeSortedSetBuilder getPalindromeSortedListBuilder() {
|
|
75
|
+
return new PalindromeSortedSetBuilder();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
|
|
2
|
+
import java.util.Arrays;
|
|
3
|
+
import java.util.Collections;
|
|
4
|
+
import java.util.List;
|
|
5
|
+
import java.util.SortedMap;
|
|
6
|
+
import java.util.stream.Collectors;
|
|
7
|
+
import static junit.framework.TestCase.assertEquals;
|
|
8
|
+
import static junit.framework.TestCase.assertFalse;
|
|
9
|
+
import static junit.framework.TestCase.assertNotNull;
|
|
10
|
+
import org.junit.Ignore;
|
|
11
|
+
import org.junit.Test;
|
|
12
|
+
|
|
13
|
+
public class PalindromesTest {
|
|
14
|
+
|
|
15
|
+
@Test
|
|
16
|
+
public void largestPalindromeFromSingleDigitFactors() {
|
|
17
|
+
final List<List<Integer>> expected = Collections.unmodifiableList(
|
|
18
|
+
Arrays.asList(
|
|
19
|
+
Arrays.asList(1, 9),
|
|
20
|
+
Arrays.asList(3, 3)
|
|
21
|
+
)
|
|
22
|
+
);
|
|
23
|
+
final long expectedValue = 9l;
|
|
24
|
+
|
|
25
|
+
final SortedMap<Long, List<List<Integer>>> palindromes
|
|
26
|
+
= Palindromes.getPalindromeSortedListBuilder()
|
|
27
|
+
.withFactorsLessThanOrEqualTo(9).build();
|
|
28
|
+
|
|
29
|
+
assertNotNull(palindromes);
|
|
30
|
+
assertFalse(palindromes.isEmpty());
|
|
31
|
+
|
|
32
|
+
long actualValue = palindromes.lastKey();
|
|
33
|
+
assertEquals(expectedValue, actualValue);
|
|
34
|
+
|
|
35
|
+
List<List<Integer>> actual = palindromes
|
|
36
|
+
.get(palindromes.lastKey())
|
|
37
|
+
.stream()
|
|
38
|
+
.sorted((a, b) -> Integer.compare(a.get(0), b.get(0)))
|
|
39
|
+
.collect(Collectors.toList());
|
|
40
|
+
assertEquals(expected, actual);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@Test
|
|
44
|
+
@Ignore
|
|
45
|
+
public void largestPalindromeFromDoubleDigitFactors() {
|
|
46
|
+
final List<List<Integer>> expected = Collections.unmodifiableList(
|
|
47
|
+
Arrays.asList(
|
|
48
|
+
Arrays.asList(91, 99)
|
|
49
|
+
)
|
|
50
|
+
);
|
|
51
|
+
final long expectedValue = 9009l;
|
|
52
|
+
|
|
53
|
+
final SortedMap<Long, List<List<Integer>>> palindromes
|
|
54
|
+
= Palindromes.getPalindromeSortedListBuilder()
|
|
55
|
+
.withFactorsLessThanOrEqualTo(99)
|
|
56
|
+
.withFactorsGreaterThanOrEqualTo(10)
|
|
57
|
+
.build();
|
|
58
|
+
|
|
59
|
+
assertNotNull(palindromes);
|
|
60
|
+
assertFalse(palindromes.isEmpty());
|
|
61
|
+
|
|
62
|
+
long actualValue = palindromes.lastKey();
|
|
63
|
+
assertEquals(expectedValue, actualValue);
|
|
64
|
+
|
|
65
|
+
List<List<Integer>> actual = palindromes
|
|
66
|
+
.get(palindromes.lastKey())
|
|
67
|
+
.stream()
|
|
68
|
+
.sorted((a, b) -> Integer.compare(a.get(0), b.get(0)))
|
|
69
|
+
.collect(Collectors.toList());
|
|
70
|
+
assertEquals(expected, actual);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
@Test
|
|
74
|
+
@Ignore
|
|
75
|
+
public void smallestPalindromeFromDoubleDigitFactors() {
|
|
76
|
+
final List<List<Integer>> expected = Collections.unmodifiableList(
|
|
77
|
+
Arrays.asList(
|
|
78
|
+
Arrays.asList(11, 11)
|
|
79
|
+
)
|
|
80
|
+
);
|
|
81
|
+
final long expectedValue = 121l;
|
|
82
|
+
|
|
83
|
+
final SortedMap<Long, List<List<Integer>>> palindromes
|
|
84
|
+
= Palindromes.getPalindromeSortedListBuilder()
|
|
85
|
+
.withFactorsLessThanOrEqualTo(99)
|
|
86
|
+
.withFactorsGreaterThanOrEqualTo(10)
|
|
87
|
+
.build();
|
|
88
|
+
|
|
89
|
+
assertNotNull(palindromes);
|
|
90
|
+
assertFalse(palindromes.isEmpty());
|
|
91
|
+
|
|
92
|
+
long actualValue = palindromes.firstKey();
|
|
93
|
+
assertEquals(expectedValue, actualValue);
|
|
94
|
+
|
|
95
|
+
List<List<Integer>> actual = palindromes
|
|
96
|
+
.get(palindromes.firstKey())
|
|
97
|
+
.stream()
|
|
98
|
+
.sorted((a, b) -> Integer.compare(a.get(0), b.get(0)))
|
|
99
|
+
.collect(Collectors.toList());
|
|
100
|
+
assertEquals(expected, actual);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
@Test
|
|
104
|
+
@Ignore
|
|
105
|
+
public void largestPalindromeFromTripleDigitFactors() {
|
|
106
|
+
final List<List<Integer>> expected = Collections.unmodifiableList(
|
|
107
|
+
Arrays.asList(
|
|
108
|
+
Arrays.asList(913, 993)
|
|
109
|
+
)
|
|
110
|
+
);
|
|
111
|
+
final long expectedValue = 906609l;
|
|
112
|
+
|
|
113
|
+
final SortedMap<Long, List<List<Integer>>> palindromes
|
|
114
|
+
= Palindromes.getPalindromeSortedListBuilder()
|
|
115
|
+
.withFactorsLessThanOrEqualTo(999)
|
|
116
|
+
.withFactorsGreaterThanOrEqualTo(100)
|
|
117
|
+
.build();
|
|
118
|
+
|
|
119
|
+
assertNotNull(palindromes);
|
|
120
|
+
assertFalse(palindromes.isEmpty());
|
|
121
|
+
|
|
122
|
+
long actualValue = palindromes.lastKey();
|
|
123
|
+
assertEquals(expectedValue, actualValue);
|
|
124
|
+
|
|
125
|
+
List<List<Integer>> actual = palindromes
|
|
126
|
+
.get(palindromes.lastKey())
|
|
127
|
+
.stream()
|
|
128
|
+
.sorted((a, b) -> Integer.compare(a.get(0), b.get(0)))
|
|
129
|
+
.collect(Collectors.toList());
|
|
130
|
+
assertEquals(expected, actual);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
@Test
|
|
134
|
+
@Ignore
|
|
135
|
+
public void smallestPalindromeFromTripleDigitFactors() {
|
|
136
|
+
final List<List<Integer>> expected = Collections.unmodifiableList(
|
|
137
|
+
Arrays.asList(
|
|
138
|
+
Arrays.asList(101, 101)
|
|
139
|
+
)
|
|
140
|
+
);
|
|
141
|
+
final long expectedValue = 10201l;
|
|
142
|
+
|
|
143
|
+
final SortedMap<Long, List<List<Integer>>> palindromes
|
|
144
|
+
= Palindromes.getPalindromeSortedListBuilder()
|
|
145
|
+
.withFactorsLessThanOrEqualTo(999)
|
|
146
|
+
.withFactorsGreaterThanOrEqualTo(100)
|
|
147
|
+
.build();
|
|
148
|
+
|
|
149
|
+
assertNotNull(palindromes);
|
|
150
|
+
assertFalse(palindromes.isEmpty());
|
|
151
|
+
|
|
152
|
+
long actualValue = palindromes.firstKey();
|
|
153
|
+
assertEquals(expectedValue, actualValue);
|
|
154
|
+
|
|
155
|
+
List<List<Integer>> actual = palindromes
|
|
156
|
+
.get(palindromes.firstKey())
|
|
157
|
+
.stream()
|
|
158
|
+
.sorted((a, b) -> Integer.compare(a.get(0), b.get(0)))
|
|
159
|
+
.collect(Collectors.toList());
|
|
160
|
+
assertEquals(expected, actual);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
@@ -25,6 +25,7 @@ include 'meetup'
|
|
|
25
25
|
include 'nth-prime'
|
|
26
26
|
include 'nucleotide-count'
|
|
27
27
|
include 'octal'
|
|
28
|
+
include 'palindrome-products'
|
|
28
29
|
include 'pangram'
|
|
29
30
|
include 'pascals-triangle'
|
|
30
31
|
include 'phone-number'
|
|
@@ -48,3 +49,4 @@ include 'strain'
|
|
|
48
49
|
include 'triangle'
|
|
49
50
|
include 'trinary'
|
|
50
51
|
include 'word-count'
|
|
52
|
+
include 'wordy'
|
|
@@ -9,12 +9,11 @@ public class SumOfMultiplesTest {
|
|
|
9
9
|
@Test
|
|
10
10
|
public void testSumOfMultiplesOf3and4UpToOne() {
|
|
11
11
|
|
|
12
|
-
SumOfMultiples mySum = new SumOfMultiples();
|
|
13
12
|
int[] set = {
|
|
14
13
|
3,
|
|
15
14
|
5
|
|
16
15
|
};
|
|
17
|
-
int output =
|
|
16
|
+
int output = SumOfMultiples.sum(1, set);
|
|
18
17
|
assertEquals(0, output);
|
|
19
18
|
|
|
20
19
|
}
|
|
@@ -24,12 +23,11 @@ public class SumOfMultiplesTest {
|
|
|
24
23
|
@Ignore
|
|
25
24
|
public void testSumOfMultiplesOf3and5UpToFour() {
|
|
26
25
|
|
|
27
|
-
SumOfMultiples mySum = new SumOfMultiples();
|
|
28
26
|
int[] set = {
|
|
29
27
|
3,
|
|
30
28
|
5
|
|
31
29
|
};
|
|
32
|
-
int output =
|
|
30
|
+
int output = SumOfMultiples.sum(4, set);
|
|
33
31
|
assertEquals(3, output);
|
|
34
32
|
|
|
35
33
|
}
|
|
@@ -39,12 +37,11 @@ public class SumOfMultiplesTest {
|
|
|
39
37
|
@Ignore
|
|
40
38
|
public void testSumOfMultiplesOf3and5UpToTen() {
|
|
41
39
|
|
|
42
|
-
SumOfMultiples mySum = new SumOfMultiples();
|
|
43
40
|
int[] set = {
|
|
44
41
|
3,
|
|
45
42
|
5
|
|
46
43
|
};
|
|
47
|
-
int output =
|
|
44
|
+
int output = SumOfMultiples.sum(10, set);
|
|
48
45
|
assertEquals(23, output);
|
|
49
46
|
|
|
50
47
|
}
|
|
@@ -54,12 +51,11 @@ public class SumOfMultiplesTest {
|
|
|
54
51
|
@Ignore
|
|
55
52
|
public void testSumOfMultiplesOf3and5UpToOneHundred() {
|
|
56
53
|
|
|
57
|
-
SumOfMultiples mySum = new SumOfMultiples();
|
|
58
54
|
int[] set = {
|
|
59
55
|
3,
|
|
60
56
|
5
|
|
61
57
|
};
|
|
62
|
-
int output =
|
|
58
|
+
int output = SumOfMultiples.sum(100, set);
|
|
63
59
|
assertEquals(2318, output);
|
|
64
60
|
|
|
65
61
|
}
|
|
@@ -69,12 +65,11 @@ public class SumOfMultiplesTest {
|
|
|
69
65
|
@Ignore
|
|
70
66
|
public void testSumOfMultiplesOf3and5UpToOneThousand() {
|
|
71
67
|
|
|
72
|
-
SumOfMultiples mySum = new SumOfMultiples();
|
|
73
68
|
int[] set = {
|
|
74
69
|
3,
|
|
75
70
|
5
|
|
76
71
|
};
|
|
77
|
-
int output =
|
|
72
|
+
int output = SumOfMultiples.sum(1000, set);
|
|
78
73
|
assertEquals(233168, output);
|
|
79
74
|
|
|
80
75
|
}
|
|
@@ -84,13 +79,12 @@ public class SumOfMultiplesTest {
|
|
|
84
79
|
@Ignore
|
|
85
80
|
public void testSumOfMultiplesOf7and13and17UpToTwenty() {
|
|
86
81
|
|
|
87
|
-
SumOfMultiples mySum = new SumOfMultiples();
|
|
88
82
|
int[] set = {
|
|
89
83
|
7,
|
|
90
84
|
13,
|
|
91
85
|
17
|
|
92
86
|
};
|
|
93
|
-
int output =
|
|
87
|
+
int output = SumOfMultiples.sum(20, set);
|
|
94
88
|
assertEquals(51, output);
|
|
95
89
|
|
|
96
90
|
}
|
|
@@ -100,12 +94,11 @@ public class SumOfMultiplesTest {
|
|
|
100
94
|
@Ignore
|
|
101
95
|
public void testSumOfMultiplesOf4and6UpToFifteen() {
|
|
102
96
|
|
|
103
|
-
SumOfMultiples mySum = new SumOfMultiples();
|
|
104
97
|
int[] set = {
|
|
105
98
|
4,
|
|
106
99
|
6
|
|
107
100
|
};
|
|
108
|
-
int output =
|
|
101
|
+
int output = SumOfMultiples.sum(15, set);
|
|
109
102
|
assertEquals(30, output);
|
|
110
103
|
|
|
111
104
|
}
|
|
@@ -115,13 +108,12 @@ public class SumOfMultiplesTest {
|
|
|
115
108
|
@Ignore
|
|
116
109
|
public void testSumOfMultiplesOf5and6and8UpToOneHundredFifty() {
|
|
117
110
|
|
|
118
|
-
SumOfMultiples mySum = new SumOfMultiples();
|
|
119
111
|
int[] set = {
|
|
120
112
|
5,
|
|
121
113
|
6,
|
|
122
114
|
8
|
|
123
115
|
};
|
|
124
|
-
int output =
|
|
116
|
+
int output = SumOfMultiples.sum(150, set);
|
|
125
117
|
assertEquals(4419, output);
|
|
126
118
|
|
|
127
119
|
}
|
|
@@ -131,12 +123,11 @@ public class SumOfMultiplesTest {
|
|
|
131
123
|
@Ignore
|
|
132
124
|
public void testSumOfMultiplesOf5and25UpToTwoHundredSeventyFive() {
|
|
133
125
|
|
|
134
|
-
SumOfMultiples mySum = new SumOfMultiples();
|
|
135
126
|
int[] set = {
|
|
136
127
|
5,
|
|
137
128
|
25
|
|
138
129
|
};
|
|
139
|
-
int output =
|
|
130
|
+
int output = SumOfMultiples.sum(51, set);
|
|
140
131
|
assertEquals(275, output);
|
|
141
132
|
|
|
142
133
|
}
|
|
@@ -146,12 +137,11 @@ public class SumOfMultiplesTest {
|
|
|
146
137
|
@Ignore
|
|
147
138
|
public void testSumOfMultiplesOf43and47UpToTenThousand() {
|
|
148
139
|
|
|
149
|
-
SumOfMultiples mySum = new SumOfMultiples();
|
|
150
140
|
int[] set = {
|
|
151
141
|
43,
|
|
152
142
|
47
|
|
153
143
|
};
|
|
154
|
-
int output =
|
|
144
|
+
int output = SumOfMultiples.sum(10000, set);
|
|
155
145
|
assertEquals(2203160, output);
|
|
156
146
|
|
|
157
147
|
}
|
|
@@ -161,11 +151,10 @@ public class SumOfMultiplesTest {
|
|
|
161
151
|
@Ignore
|
|
162
152
|
public void testSumOfMultiplesOfOneUpToOneHundred() {
|
|
163
153
|
|
|
164
|
-
SumOfMultiples mySum = new SumOfMultiples();
|
|
165
154
|
int[] set = {
|
|
166
155
|
1
|
|
167
156
|
};
|
|
168
|
-
int output =
|
|
157
|
+
int output = SumOfMultiples.sum(100, set);
|
|
169
158
|
assertEquals(4950, output);
|
|
170
159
|
|
|
171
160
|
}
|
|
@@ -175,9 +164,8 @@ public class SumOfMultiplesTest {
|
|
|
175
164
|
@Ignore
|
|
176
165
|
public void testSumOfMultiplesOfNoneUpToTenThousand() {
|
|
177
166
|
|
|
178
|
-
SumOfMultiples mySum = new SumOfMultiples();
|
|
179
167
|
int[] set = {};
|
|
180
|
-
int output =
|
|
168
|
+
int output = SumOfMultiples.sum(10000, set);
|
|
181
169
|
assertEquals(0, output);
|
|
182
170
|
|
|
183
171
|
}
|