Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2020
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(moves) {
  2.  
  3.     let dashboard =
  4.         [
  5.             [false, false, false],
  6.             [false, false, false],
  7.             [false, false, false]
  8.         ]
  9.  
  10.     let result = []
  11.  
  12.     const getColumnConcatData = i => dashboard.reduce((a, b) => a + b[i], '')
  13.  
  14.     const haveFilledRow = symbol => dashboard.map(x => x.reduce((a, b) => a + b, '')).some(x => x === `${symbol}${symbol}${symbol}`)
  15.  
  16.     const haveFilledCol = x => dashboard.reduce((a, _, i) => a || getColumnConcatData(i) === `${x}${x}${x}`, false)
  17.  
  18.     const leftDiagonalIsFilled = symbol => dashboard.reduce((a, _, i) => a + dashboard[i][i], '') === `${symbol}${symbol}${symbol}`
  19.  
  20.     const rightDiagonalIsFilled = symbol => dashboard.reduce((a, _, i) => a + dashboard[i][dashboard.length - 1 - i], '') === `${symbol}${symbol}${symbol}`
  21.  
  22.     const haveFilledDiagonal = x => leftDiagonalIsFilled(x) || rightDiagonalIsFilled(x)
  23.  
  24.     const playerWon = x => haveFilledRow(x) || haveFilledCol(x) || haveFilledDiagonal(x)
  25.  
  26.     const hasFreeSpace = () => dashboard.flat(1).some(x => x === false)
  27.  
  28.     const switchPlayer = p => p === 'X' ? 'O' : 'X'
  29.  
  30.     const addDashboardToResult = () => dashboard.forEach(x => result.push(x.join('\t')))
  31.  
  32.     let player = 'X'
  33.  
  34.     for (let i = 0; i < moves.length; i++) {
  35.  
  36.         let [row, col] = moves[i].split(' ')
  37.  
  38.         if (dashboard[row][col] !== false) {
  39.             result.push("This place is already taken. Please choose another!")
  40.             continue;
  41.         }
  42.  
  43.         dashboard[row][col] = player
  44.  
  45.         if (playerWon(player)) {
  46.             result.push(`Player ${player} wins!`)
  47.             addDashboardToResult()
  48.             break;
  49.         }
  50.  
  51.         if (!hasFreeSpace()) {
  52.             result.push("The game ended! Nobody wins :(")
  53.             addDashboardToResult()
  54.             break;
  55.         }
  56.  
  57.         player = switchPlayer(player)
  58.     }
  59.  
  60.     return result.join('\n')
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement