Проблема

Given a 3x3 matrix of a completed tic-tac-toe game, create a function that returns whether the game is a win for "X", "O", or a "Draw", where "X" and "O" represent themselves on the matrix, and "E" represents an empty spot.

Понять проблему

Нам нужно, чтобы наша функция выводила что-то вроде этого

ticTacToe([
  ["X", "O", "X"],
  ["O", "X",  "O"],
  ["O", "X",  "X"]
]) ➞ "X"

ticTacToe([
  ["O", "O", "O"],
  ["O", "X", "X"],
  ["E", "X", "X"]
]) ➞ "O"

ticTacToe([
  ["X", "X", "O"],
  ["O", "O", "X"],
  ["X", "X", "O"]
]) ➞ "Draw"

Решение 1

const TicTacToe = M => {
 const X = s => /XXX/.test(s),
    O = s => /OOO/.test(s),
    R = M.map(v => v.join("")),
    C = M[0].map((_,y) => M.map(x => x[y]).join("")),
    D1 = M.map((v, i) => v[i]).join(""),
    D2 = M.map((v, i) => v[v.length-1-i]).join("");
 if (R.some(v => X(v)) || C.some(v => X(v)) || X(D1) || X(D2))     return "X";
 if (R.some(v => O(v)) || C.some(v => O(v)) || O(D1) || O(D2)) return "O";
 return "Draw";
}

Решение 2

function TicTacToe(b) {
 return [...new Set([...b,...b[0].map((_, y) => b.map(row => row[y])),
 [b[0][0],b[1][1],b[2][2]],[b[0][2],b[1][1],b[2][0]]].filter(e=>
 new Set(e).size==1).flat(1))][0]||"Draw"
}

Продолжайте кодировать и решайте больше алгоритмов !!