Comprueba si el alfil puede derribar al peón o no.

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:
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- 
 

Slope Equation

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 
 

  1. 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
  2. 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>
Producción: 

Yes

 

Complejidad de tiempo: O(1)

Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por ihritik y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *