diff --git a/dictee/java/.idea/workspace.xml b/dictee/java/.idea/workspace.xml
index ab197f8..faa720c 100644
--- a/dictee/java/.idea/workspace.xml
+++ b/dictee/java/.idea/workspace.xml
@@ -11,36 +11,41 @@
-
+
-
-
+
+
-
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -49,12 +54,12 @@
-
-
+
+
-
-
+
+
@@ -77,8 +82,9 @@
@@ -88,6 +94,25 @@
+
+
+
+
+
+
+
+
+ Spelling
+
+
+
+
+ SpellCheckingInspection
+
+
+
+
+
@@ -103,10 +128,10 @@
-
-
-
+
+
+
@@ -154,6 +179,7 @@
+
@@ -264,6 +290,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -324,16 +400,20 @@
-
+
+
+
-
+
-
-
+
+
+
+
@@ -354,66 +434,66 @@
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
+
+
@@ -421,25 +501,18 @@
-
-
- file://$PROJECT_DIR$/src/com/brainbaking/dictee/Dictee.java
- 56
-
-
-
-
- file://$PROJECT_DIR$/src/com/brainbaking/dictee/Dictee.java
- 37
-
-
-
-
-
+
+
+
+ in == (int) 'k'
+ JAVA
+ EXPRESSION
+
+
input.split("\\|")
@@ -459,52 +532,94 @@
-
+
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
diff --git a/dictee/java/src/com/brainbaking/dictee/Dictee.java b/dictee/java/src/com/brainbaking/dictee/Dictee.java
index 2a4da62..cff033e 100644
--- a/dictee/java/src/com/brainbaking/dictee/Dictee.java
+++ b/dictee/java/src/com/brainbaking/dictee/Dictee.java
@@ -1,68 +1,86 @@
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 Tuple zoekIndexInInvoer(int in, List tuples) {
+ List laatstVoorkomendeTuple = tuples.stream().filter(t -> t.isChar(in)).collect(Collectors.toList());
+ int index = !laatstVoorkomendeTuple.isEmpty() ? laatstVoorkomendeTuple.get(laatstVoorkomendeTuple.size() - 1).getIndex() + 1 : 0;
- private List getReferentie() {
- return referentie.chars().mapToObj(e->((char)e)).collect(Collectors.toList());
+ int charTeZoeken = Character.isUpperCase(in) ? Character.toLowerCase(in) : Character.toUpperCase(in);
+ int indexFromIndexHf = invoer.indexOf(charTeZoeken, index);
+ int indexFromIndexGewoon = invoer.indexOf(in, index);
+
+ if(indexFromIndexGewoon >= 0 && indexFromIndexHf >= 0 && indexFromIndexGewoon > indexFromIndexHf) {
+ return Tuple.hoofdletter(in, indexFromIndexHf);
+ } else if(indexFromIndexGewoon == -1 && indexFromIndexHf >= 0) {
+ return Tuple.hoofdletter(in, indexFromIndexHf);
+ } else if(indexFromIndexGewoon == -1) {
+ return Tuple.nietGevonden(in);
+ }
+
+ return new Tuple(in, indexFromIndexGewoon);
}
public int verbeter() {
- List in = getInvoerChars();
- List inLower = in.stream().map(Character::toLowerCase).collect(Collectors.toList());
- List diffs = new ArrayList();
+ List tuples = berekenTupleLijst();
+ int score = 0;
- for(int i = 0; i < getReferentie().size(); i++) {
- char refCurr = getReferentie().get(i);
+ printStartDictee(tuples);
- 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));
- }
+ for(int i = 0; i < tuples.size() - 1; i++) {
+ Tuple curr = tuples.get(i);
+ Tuple next = tuples.get(i + 1);
+ if(curr.komtNietVoor()) {
+ score += 2;
+ } else if(curr.komtNietVoor() && next.komtNietVoor()) {
+ score += 2 * 2;
+ } else if(next.getIndex() - curr.getIndex() > 1) {
+ score += 2;
}
+
+ score += curr.getExtraMinpunt();
+
+ System.out.println("vgl " + i + " " + curr + " met " + (i + 1) + " " + next + " -- score: " + score);
}
- List diffsInLengte = in.stream().map(Diff::create).collect(Collectors.toList());
- if(diffsInLengte.size() != diffs.size()) {
- diffs.addAll(diffsInLengte);
+ score += verhoogScoreIndienBeginGemist(tuples, score);
+ return score;
+ }
+
+ private int verhoogScoreIndienBeginGemist(List tuples, int score) {
+ List indexes = tuples.stream().mapToInt(t -> t.getIndex()).boxed().collect(Collectors.toList());
+ if(!indexes.contains(0) && !indexes.contains(-1)) {
+ return 2;
}
+ return 0;
+ }
- diffs.forEach(System.out::println);
+ private List berekenTupleLijst() {
+ List tuples = new ArrayList<>();
+ for(int refI = 0; refI < referentie.length(); refI++) {
+ char ch = referentie.charAt(refI);
+ tuples.add(zoekIndexInInvoer(ch, tuples));
+ }
+ return tuples;
+ }
- return diffs.stream()
- .mapToInt(d -> d.getScore())
- .sum();
+ private void printStartDictee(List tuples) {
+ System.out.println("dictee voor ref: '" + referentie + "' tegen invoer: '" + invoer + "'");
+ tuples.forEach(System.out::print);
+ System.out.println();
}
}
diff --git a/dictee/java/src/com/brainbaking/dictee/Diff.java b/dictee/java/src/com/brainbaking/dictee/Diff.java
deleted file mode 100644
index a7a0772..0000000
--- a/dictee/java/src/com/brainbaking/dictee/Diff.java
+++ /dev/null
@@ -1,35 +0,0 @@
-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
index 4aad5d7..adeb824 100644
--- a/dictee/java/test/com/brainbaking/dictee/DicteeTests.java
+++ b/dictee/java/test/com/brainbaking/dictee/DicteeTests.java
@@ -19,6 +19,17 @@ public class DicteeTests {
assertEquals(expected, dictee.verbeter());
}
+ @ParameterizedTest
+ @ValueSource(strings = {
+ "sup dikke kerels|wup dikke kerel|4",
+ "sup dikke kerels|wup dikke kerels|2" })
+ public void combinatieGeval_zonderHoofdletters(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",