trackler 2.0.8.22 → 2.0.8.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/csharp/exercises/accumulate/HINTS.md +1 -2
  4. data/tracks/csharp/exercises/nth-prime/HINTS.md +7 -0
  5. data/tracks/csharp/exercises/proverb/HINTS.md +3 -0
  6. data/tracks/go/exercises/trinary/trinary_test.go +1 -1
  7. data/tracks/go/exercises/twelve-days/twelve_days_test.go +6 -6
  8. data/tracks/java/.Rhistory +0 -0
  9. data/tracks/java/config.json +12 -0
  10. data/tracks/java/exercises/book-store/build.gradle +17 -0
  11. data/tracks/java/exercises/book-store/src/example/java/.keep +0 -0
  12. data/tracks/java/exercises/book-store/src/example/java/Bookstore.java +61 -0
  13. data/tracks/java/exercises/book-store/src/main/java/.keep +0 -0
  14. data/tracks/java/exercises/book-store/src/test/java/.keep +0 -0
  15. data/tracks/java/exercises/book-store/src/test/java/BookstoreTest.java +117 -0
  16. data/tracks/java/exercises/hamming/src/example/java/Hamming.java +11 -2
  17. data/tracks/java/exercises/hamming/src/test/java/HammingTest.java +9 -10
  18. data/tracks/java/exercises/isogram/build.gradle +17 -0
  19. data/tracks/java/exercises/isogram/src/example/java/IsogramChecker.java +34 -0
  20. data/tracks/java/exercises/isogram/src/main/java/.keep +0 -0
  21. data/tracks/java/exercises/isogram/src/test/java/IsogramTest.java +80 -0
  22. data/tracks/java/exercises/raindrops/src/example/java/{Raindrops.java → RaindropConverter.java} +2 -2
  23. data/tracks/java/exercises/raindrops/src/test/java/{RaindropsTest.java → RaindropConverterTest.java} +3 -3
  24. data/tracks/java/exercises/settings.gradle +2 -0
  25. data/tracks/ocaml/.vscode/launch.json +13 -0
  26. data/tracks/ocaml/config.json +5 -0
  27. data/tracks/ocaml/exercises/beer-song/test.ml +15 -7
  28. data/tracks/ocaml/exercises/phone-number/test.ml +2 -2
  29. data/tracks/ocaml/exercises/prime-factors/test.ml +20 -16
  30. data/tracks/ocaml/exercises/roman-numerals/test.ml +40 -22
  31. data/tracks/ocaml/exercises/run-length-encoding/test.ml +6 -4
  32. data/tracks/ocaml/exercises/space-age/test.ml +20 -35
  33. data/tracks/ocaml/exercises/triangle/.merlin +5 -0
  34. data/tracks/ocaml/exercises/triangle/Makefile +11 -0
  35. data/tracks/ocaml/exercises/triangle/example.ml +17 -0
  36. data/tracks/ocaml/exercises/triangle/test.ml +48 -0
  37. data/tracks/ocaml/exercises/triangle/triangle.mli +5 -0
  38. data/tracks/ocaml/tools/test-generator/.merlin +0 -1
  39. data/tracks/ocaml/tools/test-generator/Makefile +3 -0
  40. data/tracks/ocaml/tools/test-generator/src/codegen.ml +1 -1
  41. data/tracks/ocaml/tools/test-generator/src/controller.ml +22 -10
  42. data/tracks/ocaml/tools/test-generator/src/debug.ml +12 -0
  43. data/tracks/ocaml/tools/test-generator/src/special_cases.ml +8 -0
  44. data/tracks/ocaml/tools/test-generator/src/template.ml +91 -41
  45. data/tracks/ocaml/tools/test-generator/src/test_gen.ml +2 -1
  46. data/tracks/ocaml/tools/test-generator/templates/atbash-cipher/template.ml +11 -3
  47. data/tracks/ocaml/tools/test-generator/templates/beer-song/template.ml +13 -3
  48. data/tracks/ocaml/tools/test-generator/templates/difference-of-squares/template.ml +17 -3
  49. data/tracks/ocaml/tools/test-generator/templates/prime-factors/template.ml +25 -0
  50. data/tracks/ocaml/tools/test-generator/templates/roman-numerals/template.ml +15 -0
  51. data/tracks/ocaml/tools/test-generator/templates/run-length-encoding/template.ml +19 -3
  52. data/tracks/ocaml/tools/test-generator/templates/space-age/template.ml +19 -0
  53. data/tracks/ocaml/tools/test-generator/templates/triangle/template.ml +33 -0
  54. data/tracks/ocaml/tools/test-generator/test/template_test.ml +8 -7
  55. data/tracks/powershell/exercises/hamming/hamming.tests.ps1 +4 -4
  56. metadata +28 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 28265fe418af7d9c5995b20eb82d68a92ddf07b2
4
- data.tar.gz: cd16284994158ed45cf56925c5565d87d5868ffc
3
+ metadata.gz: 9a1f212f5e5a8fe0bd77c82df4bb702031173e6a
4
+ data.tar.gz: f69ad361660445af45147b30a15af3bb30028a46
5
5
  SHA512:
6
- metadata.gz: a5dc72ae892154a72cc837452319410d2e29ce9b5713323cb0e6ac9c3116e41b815bb34d2f541f246a0a92c213b4e39f94c2d5517d0c8f970d6ee5d9871be2e1
7
- data.tar.gz: 56866b238c8d404534442171cd70ab349349f79a380dcae93f1cc498ed9e3d9faad92907fc7acabdd759d165bb31da0ef4f231b554d108188d9df0c4f4d740de
6
+ metadata.gz: b0c6afffb4a75f583baf4673a4b88c6b8f27ec0d9c91732abdd13823ac97e1663c24b14b891477fddc97e273997a09df02ec50590909400960a0e8a6f9aebc6e
7
+ data.tar.gz: ca2bbf86a9563cb67f6577505b5e7a7bce225cbdc6edb380cd7595b9a868e5661384ffbec352580083aa0b67564e329195a8612d74a47084e47b46fe5d6b6f23
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.0.8.22"
2
+ VERSION = "2.0.8.23"
3
3
  end
@@ -1,3 +1,2 @@
1
1
  ## Hints
2
- This exercise requires you to write an extension method. For more information, see [this page]
3
- (https://msdn.microsoft.com/en-us//library/bb383977.aspx).
2
+ This exercise requires you to write an extension method. For more information, see [this page](https://msdn.microsoft.com/en-us//library/bb383977.aspx).
@@ -0,0 +1,7 @@
1
+ ## Hints
2
+
3
+ For this exercise the following C# feature comes in handy:
4
+ Enumerables are evaluated lazily. They allow you to work with an infinite sequence of values.
5
+ See [this article](https://blogs.msdn.microsoft.com/pedram/2007/06/02/lazy-evaluation-in-c/).
6
+
7
+ Note: to help speedup calculation, you should not check numbers which you know beforehand will never be prime. For more information, see the [Sieve of Eratosthenes](https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes).
@@ -0,0 +1,3 @@
1
+ ## HINTS
2
+
3
+ Try to capture the structure of the song in your code, where you build up the song by composing its parts.
@@ -22,7 +22,7 @@ var tests = []struct {
22
22
 
23
23
  func TestTestVersion(t *testing.T) {
24
24
  if testVersion != targetTestVersion {
25
- t.Errorf("Found testVersion = %v, want %v.", testVersion, targetTestVersion)
25
+ t.Fatalf("Found testVersion = %v, want %v.", testVersion, targetTestVersion)
26
26
  }
27
27
  }
28
28
 
@@ -52,6 +52,12 @@ func diff(got, want string) string {
52
52
  }
53
53
  }
54
54
 
55
+ func TestTestVersion(t *testing.T) {
56
+ if testVersion != targetTestVersion {
57
+ t.Fatalf("Found testVersion = %v, want %v.", testVersion, targetTestVersion)
58
+ }
59
+ }
60
+
55
61
  func TestSong(t *testing.T) {
56
62
  var expected = ""
57
63
  for _, test := range testCases {
@@ -71,9 +77,3 @@ func TestVerse(t *testing.T) {
71
77
  }
72
78
  }
73
79
  }
74
-
75
- func TestTestVersion(t *testing.T) {
76
- if testVersion != targetTestVersion {
77
- t.Errorf("Found testVersion = %v, want %v.", testVersion, targetTestVersion)
78
- }
79
- }
File without changes
@@ -3,6 +3,7 @@
3
3
  "language": "Java",
4
4
  "repository": "https://github.com/exercism/xjava",
5
5
  "active": true,
6
+
6
7
  "exercises": [
7
8
  {
8
9
  "slug": "hello-world",
@@ -313,6 +314,16 @@
313
314
  "slug": "ocr-numbers",
314
315
  "difficulty": 1,
315
316
  "topics": []
317
+ },
318
+ {
319
+ "slug": "isogram",
320
+ "difficulty": 1,
321
+ "topics": []
322
+ },
323
+ {
324
+ "slug": "book-store",
325
+ "difficulty": 1,
326
+ "topics": []
316
327
  }
317
328
  ],
318
329
  "deprecated": [
@@ -335,3 +346,4 @@
335
346
  "say"
336
347
  ]
337
348
  }
349
+
@@ -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,61 @@
1
+ import java.awt.print.Printable;
2
+ import java.util.ArrayList;
3
+ import java.util.Arrays;
4
+ import java.util.List;
5
+ import java.util.stream.Collectors;
6
+
7
+ public class Bookstore{
8
+
9
+ private static int BOOK_PRICE = 8, MAX_GROUP_SIZE = 5;
10
+ private List<Integer> books;
11
+ private static double[] DISCOUNT_TIERS = {0,5,10,20,25};
12
+
13
+ public Bookstore (List<Integer> books){
14
+ this.books = books;
15
+ }
16
+
17
+
18
+
19
+
20
+ public double calculateTotalCost(){
21
+ return calculateTotalCost(this.books,0);
22
+ }
23
+
24
+ private double calculateTotalCost (List<Integer> books,double priceSoFar ){
25
+ double minPrice = Double.MAX_VALUE;
26
+
27
+
28
+ if(books.size() == 0){
29
+ return priceSoFar;
30
+ }
31
+
32
+ List<Integer> groups = (ArrayList<Integer>) books.stream().distinct().collect(Collectors.toList());
33
+
34
+
35
+ double price = 0;
36
+
37
+ for(int i = 0;i<groups.size();i++){
38
+ books.remove(groups.get(i));
39
+ }
40
+
41
+ try {
42
+ price = calculateTotalCost(books,priceSoFar + costPerGroup(groups.size()));
43
+ } catch (Exception e) {
44
+ e.printStackTrace();
45
+ }
46
+
47
+ minPrice = Math.min(minPrice, price);
48
+ return minPrice;
49
+
50
+
51
+ }
52
+
53
+ private double costPerGroup(int groupSize) throws Exception{
54
+ if (groupSize < 1 || groupSize > MAX_GROUP_SIZE){
55
+ throw new Exception("Invalid group size : " + groupSize );
56
+ }
57
+ return BOOK_PRICE * groupSize * (100 - DISCOUNT_TIERS[groupSize-1])/100;
58
+ }
59
+
60
+
61
+ }
@@ -0,0 +1,117 @@
1
+ import static org.junit.Assert.assertEquals;
2
+
3
+ import java.util.List;
4
+ import java.util.ArrayList;
5
+ import java.util.Arrays;
6
+
7
+ import org.junit.Test;
8
+
9
+ public class BookstoreTest{
10
+
11
+ @Test
12
+ public void onlyASingleBook(){
13
+ List<Integer> books = new ArrayList<>(Arrays.asList(1));
14
+ Bookstore bookstore = new Bookstore(books);
15
+ assertEquals(8,bookstore.calculateTotalCost(),2);
16
+ }
17
+
18
+ @Ignore
19
+ @Test
20
+ public void twoOfSameBook(){
21
+ List<Integer> books = new ArrayList<>(Arrays.asList(1,1));
22
+ Bookstore bookstore = new Bookstore(books);
23
+ assertEquals(16,bookstore.calculateTotalCost(),2);
24
+ }
25
+
26
+ @Ignore
27
+ @Test
28
+ public void emptyBasket(){
29
+ List<Integer> books = new ArrayList<>();
30
+ Bookstore bookstore = new Bookstore(books);
31
+ assertEquals(0,bookstore.calculateTotalCost(),2);
32
+ }
33
+
34
+ @Ignore
35
+ @Test
36
+ public void twoDifferentBooks(){
37
+ List<Integer> books = new ArrayList<>(Arrays.asList(1,2));
38
+ Bookstore bookstore = new Bookstore(books);
39
+ assertEquals(15.20,bookstore.calculateTotalCost(),2);
40
+ }
41
+
42
+ @Ignore
43
+ @Test
44
+ public void threeDifferentBooks(){
45
+ List<Integer> books = new ArrayList<>(Arrays.asList(1,2,3));
46
+ Bookstore bookstore = new Bookstore(books);
47
+ assertEquals(21.6,bookstore.calculateTotalCost(),2);
48
+ }
49
+
50
+ @Ignore
51
+ @Test
52
+ public void fourDifferentBooks(){
53
+ ArrayList<Integer> books = new ArrayList<>(Arrays.asList(1,2,3,4));
54
+ Bookstore bookstore = new Bookstore(books);
55
+ assertEquals(25.6,bookstore.calculateTotalCost(),2);
56
+
57
+ }
58
+
59
+ @Ignore
60
+ @Test
61
+ public void fiveDifferentBooks(){
62
+ ArrayList<Integer> books = new ArrayList<>(Arrays.asList(1,2,3,4,5));
63
+ Bookstore bookstore = new Bookstore(books);
64
+ assertEquals(30,bookstore.calculateTotalCost(),2);
65
+ }
66
+
67
+ @Ignore
68
+ @Test
69
+ public void twoGroupsOfFourIsCheaperThanGroupOfFivePlusGroupOfThree(){
70
+ List<Integer> books = new ArrayList<>(Arrays.asList(1,1,2,2,3,3,4,5));
71
+ Bookstore bookstore = new Bookstore(books);
72
+ assertEquals(51.20,bookstore.calculateTotalCost(),2);
73
+ }
74
+
75
+ @Ignore
76
+ @Test
77
+ public void groupOfFourPlusGroupOfTwoIsCheaperThanTwoGroupsOfThree(){
78
+ List<Integer> books = new ArrayList<>(Arrays.asList(1,1,2,2,3,4));
79
+ Bookstore bookstore = new Bookstore(books);
80
+ assertEquals(40.8,bookstore.calculateTotalCost(),2);
81
+ }
82
+
83
+ @Ignore
84
+ @Test
85
+ public void twoEachOfFirst4BooksAnd1CopyEachOfRest(){
86
+ Integer[] p = {1,1,2,2,3,3,4,4,5};
87
+ List<Integer> books = new ArrayList<>(Arrays.asList(1,1,2,2,3,3,4,4,5));
88
+ Bookstore bookstore = new Bookstore(books);
89
+ assertEquals(55.60,bookstore.calculateTotalCost(),2);
90
+ }
91
+
92
+ @Ignore
93
+ @Test
94
+ public void twoCopiesOfEachBook(){
95
+ List<Integer> books = new ArrayList<>(Arrays.asList(1,1,2,2,3,3,4,4,5,5));
96
+ Bookstore bookstore = new Bookstore(books);
97
+ assertEquals(60.00,bookstore.calculateTotalCost(),2);
98
+ }
99
+
100
+ @Ignore
101
+ @Test
102
+ public void threeCopiesOfFirstBookAnd2EachOfRemaining(){
103
+ List<Integer> books = new ArrayList<>(Arrays.asList(1,1,2,2,3,3,4,4,5,5,1));
104
+ Bookstore bookstore = new Bookstore(books);
105
+ assertEquals(68.00,bookstore.calculateTotalCost(),2);
106
+ }
107
+
108
+ @Ignore
109
+ @Test
110
+ public void threeEachOFirst2BooksAnd2EachOfRemainingBooks(){
111
+ List<Integer> books = new ArrayList<>(Arrays.asList(1,1,2,2,3,3,4,4,5,5,1,2));
112
+ Bookstore bookstore = new Bookstore(books);
113
+ assertEquals(75.20,bookstore.calculateTotalCost(),2);
114
+ }
115
+
116
+ }
117
+
@@ -1,6 +1,15 @@
1
1
  public class Hamming {
2
+ private final int hammingDistance;
2
3
 
3
- public static int compute(String leftStrand, String rightStrand) {
4
+ public Hamming(String leftStrand, String rightStrand) {
5
+ hammingDistance = computeHammingDistance(leftStrand, rightStrand);
6
+ }
7
+
8
+ public int getHammingDistance() {
9
+ return hammingDistance;
10
+ }
11
+
12
+ private int computeHammingDistance(String leftStrand, String rightStrand) {
4
13
  if(leftStrand.length() != rightStrand.length()) {
5
14
  throw new IllegalArgumentException("leftStrand and rightStrand must be of equal length.");
6
15
  }
@@ -13,7 +22,7 @@ public class Hamming {
13
22
  return distance;
14
23
  }
15
24
 
16
- private static int hammingContributionAt(int index, String leftStrand, String rightStrand) {
25
+ private int hammingContributionAt(int index, String leftStrand, String rightStrand) {
17
26
  return leftStrand.charAt(index) != rightStrand.charAt(index) ? 1 : 0;
18
27
  }
19
28
 
@@ -7,64 +7,63 @@ import org.junit.Rule;
7
7
  import org.junit.rules.ExpectedException;
8
8
 
9
9
  public class HammingTest {
10
-
11
10
 
12
11
  @Rule
13
12
  public ExpectedException thrown = ExpectedException.none();
14
13
 
15
14
  @Test
16
15
  public void testNoDifferenceBetweenIdenticalStrands() {
17
- assertThat(Hamming.compute("A", "A"), is(0));
16
+ assertThat(new Hamming("A", "A").getHammingDistance(), is(0));
18
17
  }
19
18
 
20
19
  @Ignore
21
20
  @Test
22
21
  public void testHammingDistanceForSingleNucleotideStrand() {
23
- assertThat(Hamming.compute("A", "G"), is(1));
22
+ assertThat(new Hamming("A", "G").getHammingDistance(), is(1));
24
23
  }
25
24
 
26
25
  @Ignore
27
26
  @Test
28
27
  public void testHammingDistanceForSmallStrand() {
29
- assertThat(Hamming.compute("AG", "CT"), is(2));
28
+ assertThat(new Hamming("AG", "CT").getHammingDistance(), is(2));
30
29
  }
31
30
 
32
31
  @Ignore
33
32
  @Test
34
33
  public void testSmallHammingDistance() {
35
- assertThat(Hamming.compute("AT", "CT"), is(1));
34
+ assertThat(new Hamming("AT", "CT").getHammingDistance(), is(1));
36
35
  }
37
36
 
38
37
  @Ignore
39
38
  @Test
40
39
  public void testSmallHammingDistanceInLongerStrand() {
41
- assertThat(Hamming.compute("GGACG", "GGTCG"), is(1));
40
+ assertThat(new Hamming("GGACG", "GGTCG").getHammingDistance(), is(1));
42
41
  }
43
42
 
44
43
  @Ignore
45
44
  @Test
46
45
  public void testValidatesFirstStrandNotLonger() {
47
46
  thrown.expect(IllegalArgumentException.class);
48
- Hamming.compute("AAAG", "AAA");
47
+ new Hamming("AAAG", "AAA");
49
48
  }
50
49
 
51
50
  @Ignore
52
51
  @Test
53
52
  public void testValidatesOtherStrandNotLonger() {
54
53
  thrown.expect(IllegalArgumentException.class);
55
- Hamming.compute("AAA", "AAAG");
54
+ new Hamming("AAA", "AAAG");
56
55
  }
57
56
 
58
57
  @Ignore
59
58
  @Test
60
59
  public void testLargeHammingDistance() {
61
- assertThat(Hamming.compute("GATACA", "GCATAA"), is(4));
60
+ assertThat(new Hamming("GATACA", "GCATAA").getHammingDistance(), is(4));
62
61
  }
63
62
 
64
63
  @Ignore
65
64
  @Test
66
65
  public void testHammingDistanceInVeryLongStrand() {
67
- assertThat(Hamming.compute("GGACGGATTCTG", "AGGACGGATTCT"), is(9));
66
+ assertThat(new Hamming("GGACGGATTCTG", "AGGACGGATTCT").getHammingDistance(), is(9));
68
67
  }
69
68
 
70
69
  }
@@ -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,34 @@
1
+ package example;
2
+
3
+ import java.util.HashSet;
4
+ import java.util.Set;
5
+ import static java.util.Arrays.stream;
6
+ import static java.util.stream.Collectors.joining;
7
+
8
+ public class IsogramChecker {
9
+
10
+ public IsogramChecker(){
11
+ }
12
+
13
+ public boolean isIsogram(String word){
14
+
15
+ Set<Character> charSet = new HashSet<>();
16
+
17
+ String[] words = word.split(" ");
18
+ String newWord = concat(words);
19
+
20
+ words = newWord.split("-");
21
+ newWord = concat(words).toLowerCase();
22
+
23
+ for(int i = 0; i < newWord.length(); i++){
24
+ charSet.add(newWord.charAt(i));
25
+ }
26
+
27
+ return charSet.size() == newWord.length();
28
+ }
29
+
30
+ private String concat(String[] words){
31
+ return stream(words).collect(joining());
32
+ }
33
+
34
+ }
File without changes
@@ -0,0 +1,80 @@
1
+ package test;
2
+
3
+ import static org.junit.Assert.*;
4
+
5
+ import org.junit.Ignore;
6
+ import org.junit.Test;
7
+ import example.IsogramChecker;
8
+
9
+ public class IsogramTest {
10
+
11
+ @Test
12
+ public void testIsogram() {
13
+ IsogramChecker iso = new IsogramChecker();
14
+ assertTrue(iso.isIsogram("duplicates"));
15
+ }
16
+
17
+ @Ignore
18
+ @Test
19
+ public void testNotIsogram() {
20
+ IsogramChecker iso = new IsogramChecker();
21
+ assertFalse(iso.isIsogram("eleven"));
22
+ }
23
+
24
+ @Ignore
25
+ @Test
26
+ public void testMediumLongIsogram() {
27
+ IsogramChecker iso = new IsogramChecker();
28
+ assertTrue(iso.isIsogram("subdermatoglyphic"));
29
+ }
30
+
31
+ @Ignore
32
+ @Test
33
+ public void testCaseInsensitive() {
34
+ IsogramChecker iso = new IsogramChecker();
35
+ assertFalse(iso.isIsogram("Alphabet"));
36
+ }
37
+
38
+ @Ignore
39
+ @Test
40
+ public void testIsogramWithHyphen() {
41
+ IsogramChecker iso = new IsogramChecker();
42
+ assertTrue(iso.isIsogram("thumbscrew-japingly"));
43
+ }
44
+
45
+ @Ignore
46
+ @Test
47
+ public void testIgnoresMultipleHyphens() {
48
+ IsogramChecker iso = new IsogramChecker();
49
+ assertTrue(iso.isIsogram("Hjelmqvist-Gryb-Zock-Pfund-Wax"));
50
+ }
51
+
52
+ @Ignore
53
+ @Test
54
+ public void testWorksWithGermanLetters() {
55
+ IsogramChecker iso = new IsogramChecker();
56
+ assertTrue(iso.isIsogram("Heizölrückstoßabdämpfung"));
57
+ }
58
+
59
+ @Ignore
60
+ @Test
61
+ public void testIgnoresSpaces() {
62
+ IsogramChecker iso = new IsogramChecker();
63
+ assertFalse(iso.isIsogram("the quick brown fox"));
64
+ }
65
+
66
+ @Ignore
67
+ @Test
68
+ public void testIgnoresSpaces2() {
69
+ IsogramChecker iso = new IsogramChecker();
70
+ assertTrue(iso.isIsogram("Emily Jung Schwartzkopf"));
71
+ }
72
+
73
+ @Ignore
74
+ @Test
75
+ public void testDuplicateAccentedLetters() {
76
+ IsogramChecker iso = new IsogramChecker();
77
+ assertFalse(iso.isIsogram("éléphant"));
78
+ }
79
+
80
+ }
@@ -1,6 +1,6 @@
1
- public class Raindrops {
1
+ public class RaindropConverter {
2
2
 
3
- public static String convert(int number) {
3
+ public String convert(int number) {
4
4
  String result = "";
5
5
 
6
6
  if (number % 3 == 0) {
@@ -10,7 +10,7 @@ import java.util.Collection;
10
10
  import static org.junit.Assert.assertEquals;
11
11
 
12
12
  @RunWith(Parameterized.class)
13
- public class RaindropsTest {
13
+ public class RaindropConverterTest {
14
14
 
15
15
  private int inputNumber;
16
16
  private String outputFromRaindropConversion;
@@ -46,7 +46,7 @@ public class RaindropsTest {
46
46
  });
47
47
  }
48
48
 
49
- public RaindropsTest(int inputNumber, String outputFromRaindropConversion) {
49
+ public RaindropConverterTest(int inputNumber, String outputFromRaindropConversion) {
50
50
  this.inputNumber = inputNumber;
51
51
  this.outputFromRaindropConversion = outputFromRaindropConversion;
52
52
  }
@@ -54,6 +54,6 @@ public class RaindropsTest {
54
54
 
55
55
  @Test
56
56
  public void test() {
57
- assertEquals(outputFromRaindropConversion, Raindrops.convert(inputNumber));
57
+ assertEquals(outputFromRaindropConversion, new RaindropConverter().convert(inputNumber));
58
58
  }
59
59
  }
@@ -9,6 +9,7 @@ include 'binary'
9
9
  include 'binary-search'
10
10
  include 'binary-search-tree'
11
11
  include 'bob'
12
+ include 'book-store'
12
13
  include 'bracket-push'
13
14
  include 'change'
14
15
  include 'clock'
@@ -23,6 +24,7 @@ include 'grade-school'
23
24
  include 'hamming'
24
25
  include 'hexadecimal'
25
26
  include 'hello-world'
27
+ include 'isogram'
26
28
  include 'largest-series-product'
27
29
  include 'linked-list'
28
30
  include 'list-ops'
@@ -0,0 +1,13 @@
1
+ {
2
+ "version": "0.2.0",
3
+ "configurations": [
4
+ {
5
+ "name": "OCaml",
6
+ "type": "ocamldebug",
7
+ "request": "launch",
8
+ "program": "/home/steve/dev/exercism/xocaml/tools/test-generator/debug.byte",
9
+ "console": "internalConsole",
10
+ "stopOnEntry": false
11
+ }
12
+ ]
13
+ }
@@ -71,6 +71,11 @@
71
71
  "difficulty": 3,
72
72
  "topics": []
73
73
  },
74
+ {
75
+ "slug": "triangle",
76
+ "difficulty": 3,
77
+ "topics": ["Mathematics"]
78
+ },
74
79
  {
75
80
  "slug": "pangram",
76
81
  "difficulty": 3,