Burju Harianja

 avatar
unknown
java
9 months ago
5.2 kB
9
Indexable
package Task2;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(Main.class.getResourceAsStream("board.txt"));
        int tc = sc.nextInt();
        for(int n = 0;n < tc;n++){
            int [][] board = new int[8][8];
            char [][] newBoard = new char[8][8];
            int[] queen = new int[2];
            int[] pawn = new int[2];
            for(int i = 0;i<8;i++){
                for(int j = 0;j<8;j++){
                    board[i][j] = sc.nextInt();
                    if(board[i][j] == 1){
                        queen[0] = i;
                        queen[1] = j;
                    }
                    if(board[i][j] == 2) {
                        pawn[0] = i;
                        pawn[1] = j;
                    }
                }
            }

            boolean threatenedHorizontal = false;
            boolean threatenedVertical = false;
            boolean threatenedDiagonal = false;

            // check the horizontal threat
            if(queen[0] == pawn[0]){
                threatenedHorizontal = true;
            }
            // check the vertical threat
            else if(queen[1] == pawn[1]){
                threatenedVertical = true;
            }
            // check the diagonal threat
            else if(Math.abs(queen[0] - pawn[0]) == Math.abs(queen[1] - pawn[1])){
                threatenedDiagonal = true;
            }

            // Generate output
            if(threatenedHorizontal || threatenedDiagonal || threatenedVertical){
                System.out.println("YES");
                for(int i = 0;i<8;i++){
                    for(int j = 0;j<8;j++){
                        newBoard[i][j] = '0';
                        newBoard[queen[0]][queen[1]] = 'Q';
                        newBoard[pawn[0]][pawn[1]] = 'P';
                        if(threatenedHorizontal){
                            if(i == queen[0] && (queen[1] < pawn[1])){
                                if(j > queen[1] && j < pawn[1]){
                                    newBoard[i][j] = 'X';
                                }
                            } else if(i == queen[0] && (queen[1] > pawn[1])){
                                if(j > pawn[1] && j < queen[1]){
                                    newBoard[i][j] = 'X';
                                }
                            }
                        }
                        else if(threatenedVertical){
                            if(j == queen[1] && (queen[0] < pawn[0])){
                                if(i < pawn[0] && i > queen[0]){
                                    newBoard[i][j] = 'X';
                                }
                            } else if(j == queen[1] && (queen[0] > pawn[0])){
                                if(i > pawn[0] && i < queen[0]){
                                    newBoard[i][j] = 'X';
                                }
                            }
                        }
                        else if(threatenedDiagonal){
                            // Left diagonal
                            if(queen[0] - pawn[0] == queen[1] - pawn[1]){
                                if(queen[0] > pawn[0]){
                                    int startCol = pawn[1] + 1;
                                    for(int startRow = pawn[0] + 1;startRow < queen[0];startRow++){
                                        newBoard[startRow][startCol] = 'X';
                                        startCol++;
                                    }
                                }
                                else {
                                    int startCol = queen[1] + 1;
                                    for(int startRow = queen[0] + 1;startRow < pawn[0];startRow++){
                                        newBoard[startRow][startCol] = 'X';
                                        startCol++;
                                    }
                                }
                            }
                            // Right diagonal
                            else{
                                if(queen[0] < pawn[0]){
                                    int startCol = queen[1]-1;
                                    for(int startRow = queen[0]+1;startRow<pawn[0];startRow++){
                                        newBoard[startRow][startCol] = 'X';
                                        startCol--;
                                    }
                                }
                                else {
                                    int startCol = pawn[1]-1;
                                    for(int startRow = pawn[0]+1;startRow<queen[0];startRow++){
                                        newBoard[startRow][startCol] = 'X';
                                        startCol--;
                                    }
                                }
                            }
                        }
                        System.out.print(newBoard[i][j] + "\t");
                    }
                    System.out.println();
                }
            } else System.out.println("NO");
        }
    }
}
Editor is loading...
Leave a Comment