2022-01-09 17:06:37 -05:00
|
|
|
import { solution } from "./words";
|
|
|
|
|
|
|
|
export type CharStatus = "absent" | "present" | "correct";
|
|
|
|
|
|
|
|
export type CharValue =
|
|
|
|
| "Q"
|
|
|
|
| "W"
|
|
|
|
| "E"
|
|
|
|
| "R"
|
|
|
|
| "T"
|
|
|
|
| "Y"
|
|
|
|
| "U"
|
|
|
|
| "I"
|
|
|
|
| "O"
|
|
|
|
| "P"
|
|
|
|
| "A"
|
|
|
|
| "S"
|
|
|
|
| "D"
|
|
|
|
| "F"
|
|
|
|
| "G"
|
|
|
|
| "H"
|
|
|
|
| "J"
|
|
|
|
| "K"
|
|
|
|
| "L"
|
|
|
|
| "Z"
|
|
|
|
| "X"
|
|
|
|
| "C"
|
|
|
|
| "V"
|
|
|
|
| "B"
|
|
|
|
| "N"
|
|
|
|
| "M";
|
|
|
|
|
|
|
|
export const getStatuses = (
|
|
|
|
guesses: string[]
|
|
|
|
): { [key: string]: CharStatus } => {
|
|
|
|
const charObj: { [key: string]: CharStatus } = {};
|
|
|
|
|
|
|
|
guesses.forEach((word) => {
|
|
|
|
word.split("").forEach((letter, i) => {
|
|
|
|
if (!solution.includes(letter)) {
|
|
|
|
// make status absent
|
|
|
|
return (charObj[letter] = "absent");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (letter === solution[i]) {
|
|
|
|
//make status correct
|
|
|
|
return (charObj[letter] = "correct");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (charObj[letter] !== "correct") {
|
|
|
|
//make status present
|
|
|
|
return (charObj[letter] = "present");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
return charObj;
|
|
|
|
};
|
2022-01-09 21:02:41 -05:00
|
|
|
|
|
|
|
export const getGuessStatuses = (guess: string): CharStatus[] => {
|
|
|
|
const splitSolution = solution.split("");
|
2022-01-09 21:34:50 -05:00
|
|
|
const splitGuess = guess.split("");
|
2022-01-09 21:02:41 -05:00
|
|
|
|
2022-01-09 21:34:50 -05:00
|
|
|
const solutionCharsTaken = splitSolution.map((_) => false);
|
2022-01-09 21:02:41 -05:00
|
|
|
|
2022-01-09 21:34:50 -05:00
|
|
|
const statuses: CharStatus[] = Array.from(Array(guess.length));
|
|
|
|
|
|
|
|
// handle all correct cases first
|
|
|
|
splitGuess.forEach((letter, i) => {
|
2022-01-09 21:02:41 -05:00
|
|
|
if (letter === splitSolution[i]) {
|
2022-01-09 21:34:50 -05:00
|
|
|
statuses[i] = "correct";
|
2022-01-09 21:02:41 -05:00
|
|
|
solutionCharsTaken[i] = true;
|
|
|
|
return;
|
|
|
|
}
|
2022-01-09 21:34:50 -05:00
|
|
|
});
|
|
|
|
|
|
|
|
splitGuess.forEach((letter, i) => {
|
|
|
|
if (statuses[i]) return;
|
2022-01-09 21:02:41 -05:00
|
|
|
|
|
|
|
if (!splitSolution.includes(letter)) {
|
2022-01-09 21:34:50 -05:00
|
|
|
// handles the absent case
|
|
|
|
statuses[i] = "absent";
|
2022-01-09 21:02:41 -05:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// now we are left with "present"s
|
|
|
|
const indexOfPresentChar = splitSolution.findIndex(
|
|
|
|
(x, index) => x === letter && !solutionCharsTaken[index]
|
|
|
|
);
|
2022-01-09 21:34:50 -05:00
|
|
|
|
2022-01-09 21:02:41 -05:00
|
|
|
if (indexOfPresentChar > -1) {
|
2022-01-09 21:34:50 -05:00
|
|
|
statuses[i] = "present";
|
2022-01-09 21:02:41 -05:00
|
|
|
solutionCharsTaken[indexOfPresentChar] = true;
|
|
|
|
return;
|
|
|
|
} else {
|
2022-01-09 21:34:50 -05:00
|
|
|
statuses[i] = "absent";
|
2022-01-09 21:02:41 -05:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return statuses;
|
|
|
|
};
|