diff --git a/src/lib/guesser/reducing.ts b/src/lib/guesser/reducing.ts index 0fdce95..bb88f78 100644 --- a/src/lib/guesser/reducing.ts +++ b/src/lib/guesser/reducing.ts @@ -157,7 +157,24 @@ Deno.test("test_smallest_cuts", () => { assertEquals(best, "ba"); }); -function matches_constraints(cand: string, constraints: [string, Info][]) { - // TODO - return false; +function matches_constraints(candidate: string, constraints: [string, Info][]) { + const letters = [...candidate]; + + for (const [index, [letter, info]] of enumerate(constraints)) { + if (info.kind !== "there") continue; + if (letters[index] !== letter) return false; + letters[index] = "."; + } + + for (const [index, [letter, info]] of enumerate(constraints)) { + if (info.kind === "there") continue; + if (info.kind === "abscent") if (letters.includes(letter)) return false; + // is somewhere + if (letters[index] === letter) return false; + if (!letters.includes(letter)) return false; + const index_ = letters.findIndex((i) => i === letter); + letters[index_] = "."; + } + + return true; }