Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Runtime: 44 ms, faster than 99.58% of JavaScript online submissions for Queens That Can Attack the King.
- // Memory Usage: 35.1 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'
- let map = {}
- 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
- }
- queens.forEach(queen => {
- let isSameRow = queen[0] === king[0]
- let key = null
- 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
- }
- if (key === null) {
- return
- }
- if (!map.hasOwnProperty(key)) {
- map[key] = queen
- } else {
- map[key] = getClosest(king, queen, map[key])
- }
- })
- return Object.keys(map).map(key => map[key])
- };
Advertisement
Add Comment
Please, Sign In to add comment