Проблема
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" }
Продолжайте кодировать и решайте больше алгоритмов !!