Chessboard Pawn-Pawn game - GeeksforGeeks

02 Jun, 2021
There is an 8*8 chessboard and two chess players having a single pawn each. A player has to move his pawn in each turn, either one step forward or one step diagonally only when this move kills the other pawn. The player who is unable to make any move loses. Given row and column numbers of white and black pawns. The task is to predict who would win assuming both plays optimally. Note that White plays first and a pawn cannot move outside the chessboard. 
Examples:  
Input: rowW = 2, colW = 2, rowB = 3, colB = 3 Output: WhiteInput: rowW = 2, colW = 2, rowB = 3, colB = 3 Output: White  
 
Approach:  
If its white pawn’s turn we have to check whether white pawn is on the 8th row then black wins because white pawn has no further move. If it’s black pawn’s turn then we have to check whether it is on the 1st row then white wins because black pawn has no further move.
If its white pawn’s turn and black pawn is adjacent diagonally then white pawn will kill black pawn and white pawn wins else white pawn will move one step forward (if not already occupied by the black pawn) else white will lose.
If it’s black pawn’s turn and white pawn is adjacent diagonally then black pawn will kill white pawn and black pawn wins else black pawn will move one step forward (if not already occupied by the white pawn) else black will lose.
Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std; // Function that returns true if white winsbool whiteWins(int rowW, int colW, int rowB, int colB){    int white = 0, black = 0;     while (1) {         // If white can move        if (rowW != 8) {             // If white pawn can kill black pawn            // White wins            if (rowB == rowW + 1                && (colB == colW - 1 || colB == colW + 1))                return true;             // Make the move forward            else                rowW++;        }         // White has no moves        // White loses        else            return false;         // If black can move        if (rowB != 1) {             // If black pawn can kill white pawn            // White loses            if (rowB == rowW + 1                && (colB == colW - 1 || colB == colW + 1))                return false;             // Make the move forward            else                rowB--;        }         // Black has no moves        // White wins        else            return true;    }     // If white has got more moves    if (white > black)        return true;     return false;} // Driver codeint main(){    int rowW = 2, colW = 2, rowB = 3, colB = 3;    if (whiteWins(rowW, colW, rowB, colB))        cout << "White";    else        cout << "Black";    return 0;}
// Java implementation of the approachclass GFG{     // Function that returns true if white winsstatic boolean whiteWins(int rowW, int colW,                        int rowB, int colB){    int white = 0, black = 0;    boolean flag=true;     while (flag)    {         // If white can move        if (rowW != 8)        {             // If white pawn can kill black pawn            // White wins            if (rowB == rowW + 1                && (colB == colW - 1 || colB == colW + 1))                return true;             // Make the move forward            else                rowW++;        }         // White has no moves        // White loses        else            return false;         // If black can move        if (rowB != 1)        {             // If black pawn can kill white pawn            // White loses            if (rowB == rowW + 1                && (colB == colW - 1 || colB == colW + 1))                return false;             // Make the move forward            else                rowB--;        }         // Black has no moves        // White wins        else            return true;    }     // If white has got more moves    if (white > black)        return true;     return false;} // Driver codepublic static void main(String args[]){    int rowW = 2, colW = 2, rowB = 3, colB = 3;    if (whiteWins(rowW, colW, rowB, colB))        System.out.println("White");    else        System.out.println("Black");}} // This code is contributed by Arnab Kundu
# Print implementation of the approach # Function that returns true if white winsdef whiteWins(rowW, colW, rowB, colB):    white = 0;    black = 0;     while (1):         # If white can move        if (rowW != 8):             # If white pawn can kill black pawn            # White wins            if (rowB == rowW + 1 and               (colB == colW - 1 or                colB == colW + 1)):                return True;             # Make the move forward            else:                rowW += 1;         # White has no moves        # White loses        else:            return False;         # If black can move        if (rowB != 1):             # If black pawn can kill white pawn            # White loses            if (rowB == rowW + 1 and               (colB == colW - 1 or                colB == colW + 1)):                return False;             # Make the move forward            else:                rowB -= 1;         # Black has no moves        # White wins        else:            return Frue;     # If white has got more moves    if (white > black):        return True;     return False; # Driver codeif __name__ == '__main__':    rowW, colW = 2, 2;    rowB, colB = 3, 3;    if (whiteWins(rowW, colW, rowB, colB)):        print("White");    else:        print("Black"); # This code is contributed by Rajput-Ji
// C# implementation of the approachusing System;public class GFG{      // Function that returns true if white winsstatic bool whiteWins(int rowW, int colW,                        int rowB, int colB){    int white = 0, black = 0;    bool flag=true;      while (flag)    {          // If white can move        if (rowW != 8)        {              // If white pawn can kill black pawn            // White wins            if (rowB == rowW + 1                && (colB == colW - 1 || colB == colW + 1))                return true;              // Make the move forward            else                rowW++;        }          // White has no moves        // White loses        else            return false;          // If black can move        if (rowB != 1)        {              // If black pawn can kill white pawn            // White loses            if (rowB == rowW + 1                && (colB == colW - 1 || colB == colW + 1))                return false;              // Make the move forward            else                rowB--;        }          // Black has no moves        // White wins        else            return true;    }      // If white has got more moves    if (white > black)        return true;      return false;}  // Driver codepublic static void Main(String []args){    int rowW = 2, colW = 2, rowB = 3, colB = 3;    if (whiteWins(rowW, colW, rowB, colB))        Console.WriteLine("White");    else        Console.WriteLine("Black");}}/* This code contributed by PrinciRaj1992 */
<script> // JavaScript implementation of the approach // Function that returns true if white wins    function whiteWins(rowW , colW , rowB , colB) {        var white = 0, black = 0;        var flag = true;         while (flag) {             // If white can move            if (rowW != 8) {                 // If white pawn can kill black pawn                // White wins                if (rowB == rowW + 1 &&                (colB == colW - 1 || colB == colW + 1))                    return true;                 // Make the move forward                else                    rowW++;            }             // White has no moves            // White loses            else                return false;             // If black can move            if (rowB != 1) {                 // If black pawn can kill white pawn                // White loses                if (rowB == rowW + 1 &&                (colB == colW - 1 || colB == colW + 1))                    return false;                 // Make the move forward                else                    rowB--;            }             // Black has no moves            // White wins            else                return true;        }         // If white has got more moves        if (white > black)            return true;         return false;    }     // Driver code             var rowW = 2, colW = 2, rowB = 3, colB = 3;        if (whiteWins(rowW, colW, rowB, colB))            document.write("White");        else            document.write("Black"); // This code contributed by aashish1995 </script>
White
 
andrew1234
princiraj1992
Rajput-Ji
aashish1995
chessboard-problems
Competitive Programming
Game Theory
Game Theory
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Modulo 10^9+7 (1000000007)
Bits manipulation (Important tactics)
Prefix Sum Array - Implementation and Applications in Competitive Programming
Formatted output in Java
Algorithm Library | C++ Magicians STL Algorithm
Minimax Algorithm in Game Theory | Set 1 (Introduction)
Minimax Algorithm in Game Theory | Set 3 (Tic-Tac-Toe AI - Finding optimal move)
Minimax Algorithm in Game Theory | Set 4 (Alpha-Beta Pruning)
Implementation of Tic-Tac-Toe game
Optimal Strategy for a Game | DP-31