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 } export const getGuessStatuses = (guess: string): CharStatus[] => { const splitSolution = solution.split('') const splitGuess = guess.split('') const solutionCharsTaken = splitSolution.map((_) => false) const statuses: CharStatus[] = Array.from(Array(guess.length)) // handle all correct cases first splitGuess.forEach((letter, i) => { if (letter === splitSolution[i]) { statuses[i] = 'correct' solutionCharsTaken[i] = true return } }) splitGuess.forEach((letter, i) => { if (statuses[i]) return if (!splitSolution.includes(letter)) { // handles the absent case statuses[i] = 'absent' return } // now we are left with "present"s const indexOfPresentChar = splitSolution.findIndex( (x, index) => x === letter && !solutionCharsTaken[index] ) if (indexOfPresentChar > -1) { statuses[i] = 'present' solutionCharsTaken[indexOfPresentChar] = true return } else { statuses[i] = 'absent' return } }) return statuses }