Dada la posición de un alfil y un peón en un tablero de ajedrez de 8 * 8 , la tarea es verificar si el alfil puede derribar el peón en un movimiento o no. La posición del alfil y del peón se indica mediante el número de fila y columna del tablero de ajedrez.
Ejemplos:
Entrada: alfilX = 5, alfilY = 5, peónX = 1, peónY = 1
Salida: Sí
Entrada: alfilX = 5, alfilY = 5, peónX = 1, peónY = 3
Salida: No
Aproximación: En un juego de ajedrez, el Alfil solo puede moverse en diagonal y no hay restricción en la distancia para cada movimiento. Si consideramos la posición de Bishop como origen, se puede concluir que Bishop puede atacar solo en ángulos de 45 grados, 135 grados, 225 grados y 315 grados. Por lo tanto, el Alfil puede atacar al Peón solo si está en tal posición que la pendiente obtenida de su posición es igual a la tangente de 45 grados o 135 grados o 225 grados o 315 grados de ángulo.
Como sabemos la ecuación de pendiente para dos puntos-
También,
Para todos los ángulos de ataque de Bishop (es decir, 45°, 135°, 225° y 315°), el valor de la pendiente será 1 o -1.
tan(45°) = 1
tan(135°) = -1
tan(225°) = 1
tan(315°) = -1
Entonces, para un ángulo de 45° y 225°, la ecuación de la pendiente será
x2 – x1 = y2 – y1
y para un ángulo de 135° y 315°, la ecuación de la pendiente será
-x2 + x1 = y2 – y1
- Teniendo en cuenta la posición del alfil y el peón como puntos en coordenadas 2-D, compruebe si alguna de las dos ecuaciones es verdadera
- x2 – x1 = y2 – y1
- -x2 + x1 = y2 – y1
- De lo contrario , imprima No.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of above approach #include <bits/stdc++.h> using namespace std; // Function that return true if // the Bishop can take down the pawn bool canTakeDown(int bishopX, int bishopY, int pawnX, int pawnY) { // If pawn is at angle // 45 or 225 degree from // bishop's Position if (pawnX - bishopX == pawnY - bishopY) return true; // If pawn is at angle // 135 or 315 degree from // bishop's Position else if (-pawnX + bishopX == pawnY - bishopY) return true; else return false; } // Driver code int main() { // Bishop's Position int bishopX = 5, bishopY = 5; // Pawn's Position int pawnX = 1, pawnY = 1; if (canTakeDown(bishopX, bishopY, pawnX, pawnY)) cout << "Yes"; else cout << "No"; }
Java
// Java implementation of above approach class GFG { // Function that return true if // the Bishop can take down the pawn static boolean canTakeDown(int bishopX, int bishopY, int pawnX, int pawnY) { // If pawn is at angle // 45 or 225 degree from // bishop's Position if (pawnX - bishopX == pawnY - bishopY) return true; // If pawn is at angle // 135 or 315 degree from // bishop's Position else if (-pawnX + bishopX == pawnY - bishopY) return true; else return false; } // Driver code public static void main(String[] args) { // Bishop's Position int bishopX = 5, bishopY = 5; // Pawn's Position int pawnX = 1, pawnY = 1; if (canTakeDown(bishopX, bishopY, pawnX, pawnY)) System.out.println("Yes"); else System.out.println("No"); } }
Python3
# Python3 implementation of above approach # Function that return true if # the Bishop can take down the pawn def canTakeDown(bishopX, bishopY, pawnX, pawnY) : # If pawn is at angle # 45 or 225 degree from # bishop's Position if (pawnX - bishopX == pawnY - bishopY) : return True # If pawn is at angle # 135 or 315 degree from # bishop's Position elif (-pawnX + bishopX == pawnY - bishopY): return True else: return False # Driver code # Bishop's Position bishopX = 5 bishopY = 5 # Pawn's Position pawnX = 1 pawnY = 1 if (canTakeDown(bishopX, bishopY, pawnX, pawnY)) : print("Yes") else : print("No")
C#
// C# implementation of above approach using System; class GFG { // Function that return true if // the Bishop can take down the pawn static bool canTakeDown(int bishopX, int bishopY, int pawnX, int pawnY) { // If pawn is at angle // 45 or 225 degree from // bishop's Position if (pawnX - bishopX == pawnY - bishopY) return true; // If pawn is at angle // 135 or 315 degree from // bishop's Position else if (-pawnX + bishopX == pawnY - bishopY) return true; else return false; } // Driver code public static void Main() { // Bishop's Position int bishopX = 5, bishopY = 5; // Pawn's Position int pawnX = 1, pawnY = 1; if (canTakeDown(bishopX, bishopY, pawnX, pawnY)) Console.WriteLine("Yes"); else Console.WriteLine("No"); } }
PHP
<?php // PHP implementation of above approach // Function that return true if // the Bishop can take down the pawn function canTakeDown($bishopX, $bishopY, $pawnX, $pawnY) { // If pawn is at angle // 45 or 225 degree from // bishop's Position if ($pawnX - $bishopX == $pawnY - $bishopY) return true; // If pawn is at angle // 135 or 315 degree from // bishop's Position else if (-$pawnX + $bishopX == $pawnY - $bishopY) return true; else return false; } // Driver code // Bishop's Position $bishopX = 5; $bishopY = 5; // Pawn's Position $pawnX = 1; $pawnY = 1; if (canTakeDown($bishopX, $bishopY, $pawnX, $pawnY)) echo "Yes"; else echo "No"; // This code is contributed by jit_t ?>
Javascript
<script> // Javascript implementation of above approach // Function that return true if // the Bishop can take down the pawn function canTakeDown(bishopX, bishopY, pawnX, pawnY) { // If pawn is at angle // 45 or 225 degree from // bishop's Position if (pawnX - bishopX == pawnY - bishopY) return true; // If pawn is at angle // 135 or 315 degree from // bishop's Position else if (-pawnX + bishopX == pawnY - bishopY) return true; else return false; } // Driver code // Bishop's Position var bishopX = 5, bishopY = 5; // Pawn's Position var pawnX = 1, pawnY = 1; if (canTakeDown(bishopX, bishopY, pawnX, pawnY)) document.write( "Yes"); else document.write( "No"); </script>
Yes
Complejidad de tiempo: O(1)
Espacio Auxiliar: O(1)