Given the position of the queen (qX, qY) and the opponent (oX, oY) on a chessboard. The task is to determine whether the queen can attack the opponent or not. Note that the queen can attack in the same row, same column and diagonally.
Example:
Input: qX = 4, qY = 5, oX = 6, oY = 7
Output: Yes
The queen can attack diagonally.Input: qX = 1, qY = 1, oX = 3, oY = 2
Output: No
Approach:
- If qR = oR, it means that both the queen and the opponent are in the same row and the queen can attack the opponent.
- Similarly, if qC = oC then also the queen can attack the opponent as they both are in the same column.
- And for diagonals, if abs(qR – oR) = abs(qC – oC) i.e. queen can attack the opponent diagonally.
If all of the above conditions fail then the opponent is safe from the queen.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach #include <iostream> using namespace std;
// Function that returns true if the queen // can attack the opponent bool canQueenAttack( int qR, int qC, int oR, int oC)
{ // If queen and the opponent are in the same row
if (qR == oR)
return true ;
// If queen and the opponent are in the same column
if (qC == oC)
return true ;
// If queen can attack diagonally
if ( abs (qR - oR) == abs (qC - oC))
return true ;
// Opponent is safe
return false ;
} // Driver code int main()
{ int qR = 1, qC = 1;
int oR = 3, oC = 2;
if (canQueenAttack(qR, qC, oR, oC))
cout << "Yes" ;
else
cout << "No" ;
return 0;
} |
Java
// Java implementation of the approach class GFG
{ // Function that returns true if the queen // can attack the opponent static boolean canQueenAttack( int qR, int qC,
int oR, int oC)
{ // If queen and the opponent
// are in the same row
if (qR == oR)
return true ;
// If queen and the opponent
// are in the same column
if (qC == oC)
return true ;
// If queen can attack diagonally
if (Math.abs(qR - oR) == Math.abs(qC - oC))
return true ;
// Opponent is safe
return false ;
} // Driver code public static void main(String[] args)
{ int qR = 1 , qC = 1 ;
int oR = 3 , oC = 2 ;
if (canQueenAttack(qR, qC, oR, oC))
System.out.println( "Yes" );
else
System.out.println( "No" );
} } // This code is Contributed by Code_Mech. |
Python3
# Python3 implementation of the approach # Function that returns True if the # queen can attack the opponent def canQueenAttack(qR, qC, oR, oC):
# If queen and the opponent are
# in the same row
if qR = = oR:
return True
# If queen and the opponent are
# in the same column
if qC = = oC:
return True
# If queen can attack diagonally
if abs (qR - oR) = = abs (qC - oC):
return True
# Opponent is safe
return False
# Driver code if __name__ = = "__main__" :
qR, qC = 1 , 1
oR, oC = 3 , 2
if canQueenAttack(qR, qC, oR, oC):
print ( "Yes" )
else :
print ( "No" )
# This code is contributed # by Rituraj Jain |
C#
// C# implementation of the approach using System;
class GFG
{ // Function that returns true if the queen // can attack the opponent static bool canQueenAttack( int qR, int qC,
int oR, int oC)
{ // If queen and the opponent
// are in the same row
if (qR == oR)
return true ;
// If queen and the opponent
// are in the same column
if (qC == oC)
return true ;
// If queen can attack diagonally
if (Math.Abs(qR - oR) == Math.Abs(qC - oC))
return true ;
// Opponent is safe
return false ;
} // Driver code public static void Main()
{ int qR = 1, qC = 1;
int oR = 3, oC = 2;
if (canQueenAttack(qR, qC, oR, oC))
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
} } // This code is Contributed by Code_Mech. |
PHP
<?php // PHP implementation of the approach // Function that returns true if the // queen can attack the opponent function canQueenAttack( $qR , $qC , $oR , $oC )
{ // If queen and the opponent are
// in the same row
if ( $qR == $oR )
return true;
// If queen and the opponent are
// in the same column
if ( $qC == $oC )
return true;
// If queen can attack diagonally
if ( abs ( $qR - $oR ) == abs ( $qC - $oC ))
return true;
// Opponent is safe
return false;
} // Driver code $qR = 1; $qC = 1;
$oR = 3; $oC = 2;
if (canQueenAttack( $qR , $qC , $oR , $oC ))
echo "Yes" ;
else echo "No" ;
// This code is contributed // by Akanksha Rai ?> |
Javascript
<script> // JavaScript implementation of the approach // Function that returns true if the queen // can attack the opponent function canQueenAttack(qR, qC, oR, oC)
{ // If queen and the opponent are in the same row
if (qR == oR)
return true ;
// If queen and the opponent are in the same column
if (qC == oC)
return true ;
// If queen can attack diagonally
if (Math.abs(qR - oR) == Math.abs(qC - oC))
return true ;
// Opponent is safe
return false ;
} // Driver code var qR = 1, qC = 1;
var oR = 3, oC = 2;
if (canQueenAttack(qR, qC, oR, oC))
document.write( "Yes" );
else
document.write( "No" );
// This Code is Contributed by Harshit Srivastava
</script> |
Output:
No
Time complexity: O(1)
Auxiliary space: O(1)