Guest User

Untitled

a guest
Nov 15th, 2019
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Runtime: 44 ms, faster than 99.58% of JavaScript online submissions for Queens That Can Attack the King.
  2. // Memory Usage: 35.1 MB, less than 100.00% of JavaScript online submissions for Queens That Can Attack the King.
  3. var queensAttacktheKing = function(queens, king) {
  4.     const TOP = 'top'
  5.     const BOTTOM = 'bottom'
  6.     const LEFT = 'left'
  7.     const RIGHT = 'right'
  8.     const BOTTOM_LEFT = 'bottom_left'
  9.     const BOTTOM_RIGHT = 'bottom_right'
  10.     const TOP_LEFT = 'top_left'
  11.     const TOP_RIGHT = 'top_right'
  12.     let map = {}
  13.    
  14.     const getSquareDistance = (a, b) => {
  15.         return Math.pow(Math.abs(a[0] - b[0]), 2) +
  16.             Math.pow(Math.abs(a[1] - b[1]), 2)
  17.     }
  18.    
  19.     const getClosest = (point, a, b) => {
  20.         return getSquareDistance(point, a) < getSquareDistance(point, b) ? a : b
  21.     }
  22.    
  23.     queens.forEach(queen => {
  24.         let isSameRow = queen[0] === king[0]
  25.         let key = null
  26.         if (isSameRow && king[1] > queen[1]) {
  27.             key = LEFT
  28.         }
  29.         if (isSameRow && king[1] < queen[1]) {
  30.             key = RIGHT
  31.         }
  32.         let isSameColumn = queen[1] === king[1]
  33.         if (isSameColumn && king[0] > queen[0]) {
  34.             key = TOP
  35.         }
  36.         if (isSameColumn && king[0] < queen[0]) {
  37.             key = BOTTOM
  38.         }
  39.         let isDiagnal = Math.abs(king[0] - queen[0]) === Math.abs(king[1] - queen[1])
  40.         if (isDiagnal && king[0] < queen[0] && king[1] < queen[1]) {
  41.             key = BOTTOM_RIGHT
  42.         }
  43.         if (isDiagnal && king[0] > queen[0] && king[1] > queen[1]) {
  44.             key = TOP_LEFT
  45.         }
  46.         if (isDiagnal && king[0] < queen[0] && king[1] > queen[1]) {
  47.             key = BOTTOM_LEFT
  48.         }
  49.         if (isDiagnal && king[0] > queen[0] && king[1] < queen[1]) {
  50.             key = TOP_RIGHT
  51.         }
  52.         if (key === null) {
  53.             return
  54.         }
  55.         if (!map.hasOwnProperty(key)) {
  56.             map[key] = queen
  57.         } else {
  58.             map[key] = getClosest(king, queen, map[key])  
  59.         }
  60.     })
  61.     return Object.keys(map).map(key => map[key])
  62. };
Advertisement
Add Comment
Please, Sign In to add comment