Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(input = []) {
  2.     let playerTurn = 1;
  3.     let matrix = [[false, false, false], [false, false, false], [false, false, false]];
  4.  
  5.     while (input.length !== 0) {
  6.         if (playerTurn++ % 2 !== 0) {
  7.             let playerOneTurn = input.shift().split(" ");
  8.             if (isPlaceTaken(playerOneTurn[0], playerOneTurn[1], matrix)) {
  9.                 matrix[playerOneTurn[0]][playerOneTurn[1]] = "X"
  10.             } else {
  11.                 playerTurn--;
  12.                 console.log("This place is already taken. Please choose another!")
  13.             }
  14.         } else {
  15.             let playerTwoTurn = input.shift().split(" ");
  16.             if (isPlaceTaken(playerTwoTurn[0], playerTwoTurn[1], matrix)) {
  17.                 matrix[playerTwoTurn[0]][playerTwoTurn[1]] = "O"
  18.             } else {
  19.                 playerTurn--;
  20.                 console.log("This place is already taken. Please choose another!")
  21.             }
  22.         }
  23.  
  24.         let currentPlayer = playerTurn % 2 !== 0 ? "O" : "X";
  25.  
  26.         if (isAWin(matrix, currentPlayer)) {
  27.             console.log(`Player ${currentPlayer} wins!`)
  28.             console.log(printMatrix(matrix))
  29.             return;
  30.         } else if (input.length === 0 || isMatrixFilled(matrix)) {
  31.             console.log("The game ended! Nobody wins :(");
  32.             console.log(printMatrix(matrix))
  33.             return;
  34.         }
  35.  
  36.         function isPlaceTaken(row, col, matrix) {
  37.             return matrix[row][col] === false;
  38.         }
  39.  
  40.         function isAWin(matrix, currentPlayer) {
  41.             let diagonalA = 0;
  42.             let diagonalB = 0;
  43.             let completeRow = 0;
  44.             let completeCol = 0;
  45.  
  46.             for (let row = 0; row < matrix.length; row++) {
  47.                 diagonalA += matrix[row][row] === currentPlayer ? 1 : 0;
  48.                 diagonalB += matrix[row][matrix[row].length - row - 1] === currentPlayer ? 1 : 0;
  49.                 completeRow = matrix[row]
  50.                     .reduce((acc, val) => {
  51.                         acc += val === currentPlayer ? 1 : 0;
  52.                         return acc;
  53.                     }, 0);
  54.                 if (completeRow !== 3) {
  55.                     completeRow = 0
  56.                 } else break;
  57.  
  58.                 for (let col = 0; col < matrix[row].length; col++) {
  59.                     completeCol += matrix[col][row] === currentPlayer ? 1 : 0;
  60.                 }
  61.                 if (completeCol !== 3) completeCol = 0;
  62.             }
  63.  
  64.             return diagonalA === 3 || diagonalB === 3 || completeRow === 3 || completeCol === 3;
  65.         }
  66.  
  67.         function printMatrix(matrix) {
  68.             let result = '';
  69.             for (let row = 0; row < matrix.length; row++) {
  70.                 result += matrix[row].join("\t") + "\n";
  71.             }
  72.  
  73.             return result;
  74.         }
  75.  
  76.         function isMatrixFilled(matrix) {    
  77.             for (const row in matrix) {
  78.                 for (const col in matrix[row]) {
  79.                     if(matrix[row][col] === false) return false;
  80.                 }
  81.             }
  82.  
  83.             return true;
  84.         }
  85.     }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement