Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(arr) {
  2.     let dashboard = [
  3.         [false, false, false],
  4.         [false, false, false],
  5.         [false, false, false]
  6.     ];
  7.  
  8.     const printDashboard = (arr) => arr
  9.         .map(row => row.join('\t'))
  10.         .join('\n');
  11.  
  12.     const areEqualElements = (arr) => arr.every(el => el !== false && el === arr[0]);
  13.  
  14.     const playerSwap = (player) => player === 'X' ? player = 'O' : player = 'X';
  15.  
  16.     const boardIsNotFull = (arr) => arr.some(row => row.some(field => field === false));
  17.  
  18.     let output = '';
  19.     let player = 'X'
  20.  
  21.     for (let i = 0; i < arr.length; i++) {
  22.         let [row, col] = arr[i].split(' ');
  23.  
  24.         if (dashboard[row][col] === false) {
  25.             dashboard[row][col] = player;
  26.             player = playerSwap(player);
  27.         } else {
  28.             output += 'This place is already taken. Please choose another!\n';
  29.         }
  30.  
  31.         let haveWinnerByRowOrCol = false;
  32.         let firstDiagonalIsWinner = false;
  33.         let secondDiagonalIsWinner = false;
  34.         let firstDiagonalArr = [];
  35.         let secondDiagonalArr = [];
  36.  
  37.         for (let row = 0; row < dashboard.length; row++) {
  38.             let isRowWinner = areEqualElements(dashboard[row]);
  39.             let columnArr = dashboard
  40.                 .reduce((agr, el) => {
  41.                     agr.push(el[row])
  42.                     return agr;
  43.                 }, []);
  44.  
  45.             let isColumnWinner = areEqualElements(columnArr);
  46.  
  47.             firstDiagonalArr.push(dashboard[row][row]);
  48.             secondDiagonalArr.push(dashboard[row][dashboard.length - 1 - row]);
  49.  
  50.             if (isRowWinner === true || isColumnWinner === true) {
  51.                 haveWinnerByRowOrCol = true;
  52.                 break;
  53.             }
  54.         }
  55.  
  56.         firstDiagonalIsWinner = areEqualElements(firstDiagonalArr);
  57.         secondDiagonalIsWinner = areEqualElements(secondDiagonalArr);
  58.  
  59.         if (haveWinnerByRowOrCol || firstDiagonalIsWinner || secondDiagonalIsWinner) {
  60.             output += `Player ${player = playerSwap(player)} wins!\n`;
  61.             output += printDashboard(dashboard);
  62.             break;
  63.         } else if (boardIsNotFull(dashboard) === false) {
  64.             output += 'The game ended! Nobody wins :(\n';
  65.             output += printDashboard(dashboard);
  66.             break;
  67.         }
  68.     }
  69.  
  70.     return output;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement