Check whether Bishop can take down Pawn or not
Last Updated :
15 Sep, 2022
Given the position of a Bishop and a Pawn on a 8 * 8 chessboard, the task is to check whether the Bishop can take down the Pawn in one move or not. The position of Bishop and Pawn is denoted using row and column number of the chessboard.
Examples:
Input: bishopX = 5, bishopY = 5, pawnX = 1, pawnY = 1
Output: Yes
Input: bishopX = 5, bishopY = 5, pawnX = 1, pawnY = 3
Output: No
Approach:
In a game of chess, the Bishop can only move diagonally and there is no restriction in the distance for each move. If we consider Bishop’s position as origin, it can be concluded that Bishop can attack at 45 degree, 135 degree, 225 degree and 315 degree angles only. So, the Bishop can attack the Pawn only if they are in such position that the slope obtained from their position is equal to tangent of 45 degree or 135 degree or 225 degree or 315 degree angle.
As we know the equation of slope for two points-
Also,
For all the attacking angles of Bishop (i.e 45°, 135°, 225°, and 315°) value of slope will be either 1 or -1.
tan(45°) = 1
tan(135°) = -1
tan(225°) = 1
tan(315°) = -1
So, for angle 45° and 225°, equation of slope will be
x2 – x1 = y2 – y1
and for angle 135° and 315°, equation of slope will be
-x2 + x1 = y2 – y1
- Considering the position of Bishop and Pawn as points on 2-D co-ordinate, Check if any of two equation is true
- x2 – x1 = y2 – y1
- -x2 + x1 = y2 – y1
- Otherwise, print No.
Below is the implementation of the above approach
C++
#include <bits/stdc++.h>
using namespace std;
bool canTakeDown( int bishopX, int bishopY, int pawnX, int pawnY)
{
if (pawnX - bishopX == pawnY - bishopY)
return true ;
else if (-pawnX + bishopX == pawnY - bishopY)
return true ;
else
return false ;
}
int main()
{
int bishopX = 5, bishopY = 5;
int pawnX = 1, pawnY = 1;
if (canTakeDown(bishopX, bishopY, pawnX, pawnY))
cout << "Yes" ;
else
cout << "No" ;
}
|
Java
class GFG {
static boolean canTakeDown( int bishopX, int bishopY, int pawnX, int pawnY)
{
if (pawnX - bishopX == pawnY - bishopY)
return true ;
else if (-pawnX + bishopX == pawnY - bishopY)
return true ;
else
return false ;
}
public static void main(String[] args)
{
int bishopX = 5 , bishopY = 5 ;
int pawnX = 1 , pawnY = 1 ;
if (canTakeDown(bishopX, bishopY, pawnX, pawnY))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
}
|
Python3
def canTakeDown(bishopX, bishopY, pawnX, pawnY) :
if (pawnX - bishopX = = pawnY - bishopY) :
return True
elif ( - pawnX + bishopX = = pawnY - bishopY):
return True
else :
return False
bishopX = 5
bishopY = 5
pawnX = 1
pawnY = 1
if (canTakeDown(bishopX, bishopY, pawnX, pawnY)) :
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
class GFG {
static bool canTakeDown( int bishopX, int bishopY, int pawnX, int pawnY)
{
if (pawnX - bishopX == pawnY - bishopY)
return true ;
else if (-pawnX + bishopX == pawnY - bishopY)
return true ;
else
return false ;
}
public static void Main()
{
int bishopX = 5, bishopY = 5;
int pawnX = 1, pawnY = 1;
if (canTakeDown(bishopX, bishopY, pawnX, pawnY))
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
}
}
|
PHP
<?php
function canTakeDown( $bishopX , $bishopY ,
$pawnX , $pawnY )
{
if ( $pawnX -
$bishopX == $pawnY - $bishopY )
return true;
else if (- $pawnX +
$bishopX == $pawnY -
$bishopY )
return true;
else
return false;
}
$bishopX = 5;
$bishopY = 5;
$pawnX = 1;
$pawnY = 1;
if (canTakeDown( $bishopX , $bishopY ,
$pawnX , $pawnY ))
echo "Yes" ;
else
echo "No" ;
?>
|
Javascript
<script>
function canTakeDown(bishopX, bishopY, pawnX, pawnY)
{
if (pawnX - bishopX == pawnY - bishopY)
return true ;
else if (-pawnX + bishopX == pawnY - bishopY)
return true ;
else
return false ;
}
var bishopX = 5, bishopY = 5;
var pawnX = 1, pawnY = 1;
if (canTakeDown(bishopX, bishopY, pawnX, pawnY))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Complexity Analysis:
- Time Complexity: O(1)
- Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...