 # [Programming Problem] Design Tic-Tac-Toe

Assume the following rules are for the tic-tac-toe game on an n x n board between two players:

– A move is guaranteed to be valid and is placed on an empty block.
– Once a winning condition is reached, no more moves are allowed.
– A player who succeeds in placing n of their marks in a horizontal, vertical, or diagonal row wins the game.

Implement the TicTacToe class:

– TicTacToe(int n) Initializes the object the size of the board n.
– int move(int row, int col, int player) Indicates that player with id player plays at the cell (row, col) of the board. The move is guaranteed to be a valid move.

```/** * Initialize your data structure here. * @param {number} n */ var TicTacToe = function(n) {   // - Gotcha 1: Please add player status for both players, single object wont do // We need to keep track if specifically one players rows, cols, or diagonals have hit 'N' // - Gotcha 2: Please remember we have 2 diagonals! // - Gotcha 3:   // Player status objects! this.playerOne = { rows: new Array(n).fill(0), cols: new Array(n).fill(0), diagonal: [0, 0], }   this.playerTwo = { rows: new Array(n).fill(0), cols: new Array(n).fill(0), diagonal: [0, 0], }   // N this.n = n;   // rows, cols in diagonal one (and diagonal two) this.diagonal_one_set = new Set(); this.diagonal_two_set = new Set();   // diagonal 1 and diagonal 2 let i = this.n-1; let j = 0; while (i >=0 && j < this.n ) { this.diagonal_two_set.add(i + '' + j); i--; j++; }   i = 0; j = 0; while (i < this.n && j < this.n ) { this.diagonal_one_set.add(i + '' + j); i++; j++; } };   /** * Player {player} makes a move at ({row}, {col}). @param row The row of the board. @param col The column of the board. @param player The player, can be either 1 or 2. @return The current winning condition, can be either: 0: No one wins. 1: Player 1 wins. 2: Player 2 wins. * @param {number} row * @param {number} col * @param {number} player * @return {number} */ TicTacToe.prototype.move = function(row, col, player) { const playerStatus = player === 1 ? this.playerOne : this.playerTwo;   playerStatus.rows[row]++; playerStatus.cols[col]++; if (this.diagonal_one_set.has(row + '' + col)) playerStatus.diagonal++; if (this.diagonal_two_set.has(row + '' + col)) playerStatus.diagonal++;   if ( playerStatus.rows[row] === this.n || playerStatus.cols[col] === this.n || playerStatus.diagonal === this.n || playerStatus.diagonal === this.n) { return player; } else { return 0; } };   /** * Your TicTacToe object will be instantiated and called as such: * var obj = new TicTacToe(n) * var param_1 = obj.move(row,col,player) */```