diff --git a/dictee/java/.idea/.name b/dictee/java/.idea/.name
new file mode 100644
index 0000000..6acaf53
--- /dev/null
+++ b/dictee/java/.idea/.name
@@ -0,0 +1 @@
+dictee
\ No newline at end of file
diff --git a/dictee/java/.idea/libraries/org_junit_jupiter_junit_jupiter_params_5_1_0.xml b/dictee/java/.idea/libraries/org_junit_jupiter_junit_jupiter_params_5_1_0.xml
new file mode 100644
index 0000000..35072ea
--- /dev/null
+++ b/dictee/java/.idea/libraries/org_junit_jupiter_junit_jupiter_params_5_1_0.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/dictee/java/.idea/misc.xml b/dictee/java/.idea/misc.xml
new file mode 100644
index 0000000..8e8843c
--- /dev/null
+++ b/dictee/java/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/dictee/java/.idea/modules.xml b/dictee/java/.idea/modules.xml
new file mode 100644
index 0000000..3f8f820
--- /dev/null
+++ b/dictee/java/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/dictee/java/.idea/workspace.xml b/dictee/java/.idea/workspace.xml
new file mode 100644
index 0000000..ab197f8
--- /dev/null
+++ b/dictee/java/.idea/workspace.xml
@@ -0,0 +1,588 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1521054378892
+
+
+ 1521054378892
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ file://$PROJECT_DIR$/src/com/brainbaking/dictee/Dictee.java
+ 56
+
+
+
+
+ file://$PROJECT_DIR$/src/com/brainbaking/dictee/Dictee.java
+ 37
+
+
+
+
+
+
+
+
+
+
+
+ input.split("\\|")
+ JAVA
+ EXPRESSION
+
+
+ input.split("\|")
+ JAVA
+ EXPRESSION
+
+
+ input.split("|")
+ JAVA
+ EXPRESSION
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No facets are configured
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 9.0
+
+
+
+
+
+
+
+
+
+
+
+ java
+
+
+
+
+
+
+
+
+
+
+
+ org.junit.jupiter:junit-jupiter-params:5.1.0
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/dictee/java/java.iml b/dictee/java/java.iml
new file mode 100644
index 0000000..7e70672
--- /dev/null
+++ b/dictee/java/java.iml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/dictee/java/src/com/brainbaking/dictee/Dictee.java b/dictee/java/src/com/brainbaking/dictee/Dictee.java
new file mode 100644
index 0000000..2a4da62
--- /dev/null
+++ b/dictee/java/src/com/brainbaking/dictee/Dictee.java
@@ -0,0 +1,68 @@
+package com.brainbaking.dictee;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Stack;
+import java.util.stream.Collectors;
+
+public class Dictee {
+
+ private final String invoer;
+ private final String referentie;
+
+ public Dictee(String invoer, String referentie) {
+ this.invoer = invoer;
+ this.referentie = referentie;
+
+ System.out.println("Dictee: invoer \t" + invoer);
+ System.out.println("Dictee: referentie \t" + referentie);
+ }
+
+ private List getInvoerChars() {
+ return invoer.chars().mapToObj(e->((char)e)).collect(Collectors.toList());
+ }
+
+ private List getReferentie() {
+ return referentie.chars().mapToObj(e->((char)e)).collect(Collectors.toList());
+ }
+
+ public int verbeter() {
+ List in = getInvoerChars();
+ List inLower = in.stream().map(Character::toLowerCase).collect(Collectors.toList());
+ List diffs = new ArrayList();
+
+ for(int i = 0; i < getReferentie().size(); i++) {
+ char refCurr = getReferentie().get(i);
+
+ int index = in.indexOf(refCurr);
+ if(index >= 0) {
+ in.remove(index);
+ } else {
+ int lowerIndex = inLower.indexOf(Character.toLowerCase(refCurr));
+ if(lowerIndex >= 0) {
+ diffs.add(Diff.hoofdletter(refCurr, i));
+
+ in.remove((Character) Character.toLowerCase(refCurr));
+ in.remove((Character) Character.toUpperCase(refCurr));
+ } else {
+ diffs.add(Diff.create(refCurr, i));
+
+ in.remove(getInvoerChars().get(i));
+ }
+
+ }
+ }
+
+ List diffsInLengte = in.stream().map(Diff::create).collect(Collectors.toList());
+ if(diffsInLengte.size() != diffs.size()) {
+ diffs.addAll(diffsInLengte);
+ }
+
+ diffs.forEach(System.out::println);
+
+ return diffs.stream()
+ .mapToInt(d -> d.getScore())
+ .sum();
+ }
+}
diff --git a/dictee/java/src/com/brainbaking/dictee/Diff.java b/dictee/java/src/com/brainbaking/dictee/Diff.java
new file mode 100644
index 0000000..a7a0772
--- /dev/null
+++ b/dictee/java/src/com/brainbaking/dictee/Diff.java
@@ -0,0 +1,35 @@
+package com.brainbaking.dictee;
+
+public class Diff {
+
+ private final char aChar;
+ private final int refIndex;
+ private final int score;
+
+ public int getScore() {
+ return score;
+ }
+
+ private Diff(char aChar, int index, int score) {
+ this.aChar = aChar;
+ this.refIndex = index;
+ this.score = score;
+ }
+
+ public static Diff create(char aChar) {
+ return create(aChar, -1);
+ }
+
+ public static Diff hoofdletter(char aChar, int index) {
+ return new Diff(aChar, index, 1);
+ }
+
+ public static Diff create(char aChar, int index) {
+ return new Diff(aChar, index, 2);
+ }
+
+ @Override
+ public String toString() {
+ return aChar + "@" + refIndex + "-" + score;
+ }
+}
diff --git a/dictee/java/test/com/brainbaking/dictee/DicteeTests.java b/dictee/java/test/com/brainbaking/dictee/DicteeTests.java
new file mode 100644
index 0000000..4aad5d7
--- /dev/null
+++ b/dictee/java/test/com/brainbaking/dictee/DicteeTests.java
@@ -0,0 +1,65 @@
+package com.brainbaking.dictee;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class DicteeTests {
+
+ @ParameterizedTest
+ @ValueSource(strings = {
+ "sup Dikke kerels|wup dikkE kerel|6",
+ "sup Dikke kerels|wup dikkE kerels|4" })
+ public void combinatieGeval_hoofdLetterEnKleineLetters(String input) {
+ Dictee dictee = createDictee(input);
+ int expected = getExpected(input);
+
+ assertEquals(expected, dictee.verbeter());
+ }
+
+ @Test
+ public void uitgebreidGeval() {
+ Dictee dictee = new Dictee("mogelike drangken zijn water cola fruitsap",
+ "Mogelijke dranken zijn: water, cola, fruitsap.");
+
+ assertEquals(13, dictee.verbeter());
+ }
+
+ @ParameterizedTest
+ @ValueSource(strings = { "kat|kat|0", "kot|kat|2" })
+ public void basisGevallen_zelfdeGrootte(String input) {
+ Dictee dictee = createDictee(input);
+ int expected = getExpected(input);
+
+ assertEquals(expected, dictee.verbeter());
+ }
+
+ @ParameterizedTest
+ @ValueSource(strings = { "kast|kat|2", "at|kat|2", "kat|at|2" })
+ public void verschillenInGrootte(String input) {
+ Dictee dictee = createDictee(input);
+ int expected = getExpected(input);
+
+ assertEquals(expected, dictee.verbeter());
+ }
+
+ @ParameterizedTest
+ @ValueSource(strings = { "kat|Kat|1", "Kat|kat|1", "Kat|lat|2", "lat|Kat|2" })
+ public void hoofdletters(String input) {
+ Dictee dictee = createDictee(input);
+ int expected = getExpected(input);
+
+ assertEquals(expected, dictee.verbeter());
+ }
+
+ private int getExpected(String input) {
+ return Integer.parseInt(input.split("\\|")[2]);
+ }
+
+ private Dictee createDictee(String input) {
+ String[] split = input.split("\\|");
+ return new Dictee(split[0], split[1]);
+ }
+}