diff --git a/.Rhistory b/.Rhistory new file mode 100644 index 000000000..e69de29bb diff --git a/config.json b/config.json index 1d1f1c270..12c8752da 100644 --- a/config.json +++ b/config.json @@ -3,6 +3,7 @@ "language": "Java", "repository": "https://github.com/exercism/xjava", "active": true, + "exercises": [ { "slug": "hello-world", @@ -313,6 +314,11 @@ "slug": "ocr-numbers", "difficulty": 1, "topics": [] + }, + { + "slug": "isogram", + "difficulty": 1, + "topics": [] } ], "deprecated": [ @@ -335,3 +341,4 @@ "say" ] } + diff --git a/exercises/isogram/build.gradle b/exercises/isogram/build.gradle new file mode 100644 index 000000000..d019b23c7 --- /dev/null +++ b/exercises/isogram/build.gradle @@ -0,0 +1,17 @@ +apply plugin: "java" +apply plugin: "eclipse" +apply plugin: "idea" + +repositories { + mavenCentral() +} + +dependencies { + testCompile "junit:junit:4.12" +} +test { + testLogging { + exceptionFormat = 'full' + events = ["passed", "failed", "skipped"] + } +} diff --git a/exercises/isogram/src/example/java/IsogramChecker.java b/exercises/isogram/src/example/java/IsogramChecker.java new file mode 100644 index 000000000..2ed4865ca --- /dev/null +++ b/exercises/isogram/src/example/java/IsogramChecker.java @@ -0,0 +1,34 @@ +package example; + +import java.util.HashSet; +import java.util.Set; +import static java.util.Arrays.stream; +import static java.util.stream.Collectors.joining; + +public class IsogramChecker { + + public IsogramChecker(){ + } + + public boolean isIsogram(String word){ + + Set charSet = new HashSet<>(); + + String[] words = word.split(" "); + String newWord = concat(words); + + words = newWord.split("-"); + newWord = concat(words).toLowerCase(); + + for(int i = 0; i < newWord.length(); i++){ + charSet.add(newWord.charAt(i)); + } + + return charSet.size() == newWord.length(); + } + + private String concat(String[] words){ + return stream(words).collect(joining()); + } + +} diff --git a/exercises/isogram/src/main/java/.keep b/exercises/isogram/src/main/java/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/exercises/isogram/src/test/java/IsogramTest.java b/exercises/isogram/src/test/java/IsogramTest.java new file mode 100644 index 000000000..9c0af736d --- /dev/null +++ b/exercises/isogram/src/test/java/IsogramTest.java @@ -0,0 +1,80 @@ +package test; + +import static org.junit.Assert.*; + +import org.junit.Ignore; +import org.junit.Test; +import example.IsogramChecker; + +public class IsogramTest { + + @Test + public void testIsogram() { + IsogramChecker iso = new IsogramChecker(); + assertTrue(iso.isIsogram("duplicates")); + } + + @Ignore + @Test + public void testNotIsogram() { + IsogramChecker iso = new IsogramChecker(); + assertFalse(iso.isIsogram("eleven")); + } + + @Ignore + @Test + public void testMediumLongIsogram() { + IsogramChecker iso = new IsogramChecker(); + assertTrue(iso.isIsogram("subdermatoglyphic")); + } + + @Ignore + @Test + public void testCaseInsensitive() { + IsogramChecker iso = new IsogramChecker(); + assertFalse(iso.isIsogram("Alphabet")); + } + + @Ignore + @Test + public void testIsogramWithHyphen() { + IsogramChecker iso = new IsogramChecker(); + assertTrue(iso.isIsogram("thumbscrew-japingly")); + } + + @Ignore + @Test + public void testIgnoresMultipleHyphens() { + IsogramChecker iso = new IsogramChecker(); + assertTrue(iso.isIsogram("Hjelmqvist-Gryb-Zock-Pfund-Wax")); + } + + @Ignore + @Test + public void testWorksWithGermanLetters() { + IsogramChecker iso = new IsogramChecker(); + assertTrue(iso.isIsogram("Heizölrückstoßabdämpfung")); + } + + @Ignore + @Test + public void testIgnoresSpaces() { + IsogramChecker iso = new IsogramChecker(); + assertFalse(iso.isIsogram("the quick brown fox")); + } + + @Ignore + @Test + public void testIgnoresSpaces2() { + IsogramChecker iso = new IsogramChecker(); + assertTrue(iso.isIsogram("Emily Jung Schwartzkopf")); + } + + @Ignore + @Test + public void testDuplicateAccentedLetters() { + IsogramChecker iso = new IsogramChecker(); + assertFalse(iso.isIsogram("éléphant")); + } + +} diff --git a/exercises/settings.gradle b/exercises/settings.gradle index f636a5560..f8cdb9962 100644 --- a/exercises/settings.gradle +++ b/exercises/settings.gradle @@ -23,6 +23,7 @@ include 'grade-school' include 'hamming' include 'hexadecimal' include 'hello-world' +include 'isogram' include 'largest-series-product' include 'linked-list' include 'list-ops'