Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Runtime: 56 ms, faster than 85.77% of JavaScript online submissions for Queens That Can Attack the King.
- // Memory Usage: 34 MB, less than 100.00% of JavaScript online submissions for Queens That Can Attack the King.
- var queensAttacktheKing = function(queens, king) {
- const TOP = 'top'
- const BOTTOM = 'bottom'
- const LEFT = 'left'
- const RIGHT = 'right'
- const BOTTOM_LEFT = 'bottom_left'
- const BOTTOM_RIGHT = 'bottom_right'
- const TOP_LEFT = 'top_left'
- const TOP_RIGHT = 'top_right'
- const CANT_ATTACK = 'cant_attack'
- let closestMap = {}
- const getSquareDistance = (a, b) => {
- return Math.pow(Math.abs(a[0] - b[0]), 2) + Math.pow(Math.abs(a[1] - b[1]), 2)
- }
- const getClosest = (point, a, b) => {
- return getSquareDistance(point, a) < getSquareDistance(point, b) ? a : b
- }
- const getAttackDirection = (king, queen) => {
- let isSameRow = queen[0] === king[0]
- let key = CANT_ATTACK
- if (isSameRow && king[1] > queen[1]) {
- key = LEFT
- }
- if (isSameRow && king[1] < queen[1]) {
- key = RIGHT
- }
- let isSameColumn = queen[1] === king[1]
- if (isSameColumn && king[0] > queen[0]) {
- key = TOP
- }
- if (isSameColumn && king[0] < queen[0]) {
- key = BOTTOM
- }
- let isDiagnal = Math.abs(king[0] - queen[0]) ===
- Math.abs(king[1] - queen[1])
- if (isDiagnal && king[0] < queen[0] && king[1] < queen[1]) {
- key = BOTTOM_RIGHT
- }
- if (isDiagnal && king[0] > queen[0] && king[1] > queen[1]) {
- key = TOP_LEFT
- }
- if (isDiagnal && king[0] < queen[0] && king[1] > queen[1]) {
- key = BOTTOM_LEFT
- }
- if (isDiagnal && king[0] > queen[0] && king[1] < queen[1]) {
- key = TOP_RIGHT
- }
- return key
- }
- queens.forEach(queen => {
- let direction = getAttackDirection(king, queen)
- if (direction === CANT_ATTACK) {
- return
- }
- if (!closestMap.hasOwnProperty(direction)) {
- closestMap[direction] = queen
- } else {
- closestMap[direction] = getClosest(king, queen, closestMap[direction])
- }
- })
- return Object.keys(closestMap).map(direction => closestMap[direction])
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement