Cerinta completa

You will be given a square chess board with one queen and a number of obstacles placed on it. Determine how many squares the queen can attack.

A queen is standing on an chessboard. The chess board’s rows are numbered from to , going from bottom to top. Its columns are numbered from to , going from left to right. Each square is referenced by a tuple, , describing the row, , and column, , where the square is located.

The queen is standing at position . In a single move, she can attack any square in any of the eight directions (left, right, up, down, and the four diagonals). In the diagram below, the green circles denote all the cells the queen can attack from :

image

There are obstacles on the chessboard, each preventing the queen from attacking any square beyond it on that path. For example, an obstacle at location in the diagram above prevents the queen from attacking cells , , and :

image

Given the queen’s position and the locations of all the obstacles, find and print the number of squares the queen can attack from her position at . In the board above, there are such squares.

Function Description

Complete the queensAttack function in the editor below.

queensAttack has the following parameters:
int n: the number of rows and columns in the board
nt k: the number of obstacles on the board
int r_q: the row number of the queen’s position
int c_q: the column number of the queen’s position
int obstacles[k][2]: each element is an array of integers, the row and column of an obstacle

Returns
int: the number of squares the queen can attack

Input Format

The first line contains two space-separated integers and , the length of the board’s sides and the number of obstacles.
The next line contains two space-separated integers and , the queen’s row and column position.
Each of the next lines contains two space-separated integers and , the row and column position of .

Constraints

  • A single cell may contain more than one obstacle.
  • There will never be an obstacle at the position where the queen is located.

Subtasks

For of the maximum score:

For of the maximum score:

Sample Input 0

4 0
4 4

Sample Output 0

9

Explanation 0

The queen is standing at position on a chessboard with no obstacles:

image

Sample Input 1

5 3
4 3
5 5
4 2
2 3

Sample Output 1

10

Explanation 1

The queen is standing at position on a chessboard with obstacles:

image

The number of squares she can attack from that position is .

Sample Input 2

1 0
1 1

Sample Output 2

0

Explanation 2

Since there is only one square, and the queen is on it, the queen can move 0 squares.


Limbajul de programare folosit: python3

Cod:

#!/bin/python3

def queensAttack(n, k, r_q, c_q, obstacles):
    d = {
        (-1, 0): r_q - 1,
        (1, 0): n - r_q,
        (0, -1): c_q - 1,
        (0, 1): n - c_q,
        (-1, -1): min(r_q - 1, c_q - 1),
        (-1, 1): min(r_q - 1, n - c_q),
        (1, -1): min(n - r_q, c_q - 1),
        (1, 1): min(n - r_q, n - c_q),
    }

    for r, c in obstacles:
        dr = r - r_q
        dc = c - c_q
        sdr = 0 if dr == 0 else (1 if dr > 0 else -1)
        sdc = 0 if dc == 0 else (1 if dc > 0 else -1)

        if dr == 0 or dc == 0 or abs(dr) == abs(dc):
            step = max(abs(dr), abs(dc)) - 1
            key = (sdr, sdc)
            if key in d and step < d[key]:
                d[key] = step

    return sum(d.values())

if __name__ == '__main__':
    n, k = map(int, input().split())
    r_q, c_q = map(int, input().split())
    obstacles = [tuple(map(int, input().split())) for _ in range(k)]
    print(queensAttack(n, k, r_q, c_q, obstacles))

Scor obtinut: 1.0

Submission ID: 464588468

Link challenge: https://www.hackerrank.com/challenges/queens-attack-2/problem

Queen’s Attack II