constisValid=(board:string[][],guess:string)=>{constcheckGuess=(biggerBoard:string[][],guess:string,coords:[number,number])=>{if(guess==='')returntrue;if(biggerBoard[coords[0]][coords[1]]!==guess[0])returnfalse;consttemp=biggerBoard[coords[0]][coords[1]];biggerBoard[coords[0]][coords[1]]='*';constanswer=[[coords[0]-1,coords[1]-1],[coords[0]-1,coords[1]],[coords[0]-1,coords[1]+1],[coords[0],coords[1]-1],[coords[0],coords[1]+1],[coords[0]+1,coords[1]-1],[coords[0]+1,coords[1]],[coords[0]+1,coords[1]+1]].some(([r,c])=>checkGuess(biggerBoard,guess.substring(1),[r,c]));biggerBoard[coords[0]][coords[1]]=temp;returnanswer;};// Create a padded arrayconstbiggerBoard=Array(board.length+2);biggerBoard[0]=biggerBoard[board.length+1]=Array(board[0].length+2).fill(undefined);board.forEach((row,i)=>biggerBoard[i+1]=[undefined,...row,undefined]);constcoords=[].concat(...biggerBoard.map((row,r)=>row.map((val,c)=>[r,c])));returncoords.some(([r,c])=>checkGuess(biggerBoard,guess,[r,c]));}consttestBoard=[["I","L","A","W"],["B","N","G","E"],["I","U","A","O"],["A","S","R","L"]];consttestWords=['BINGO','LINGO','ILNBIA','BUNGIE','BINS','SINUS'];for(constwordoftestWords){console.log(word,isValid(testBoard,word));}
TypeScript:
Shorter ver: