(UVA) 10189 - Minesweeper - Solução

import java.io.*;
import java.util.*;

class Main {
    public static void main(String[] args) throws NumberFormatException, IOException {
        Main processando = new Main();
        processando.takeInput();
       
        System.exit(0);
    }

    char[][] leMapa(BufferedReader br, int linha, int coluna) throws NumberFormatException, IOException  {
        int a;
        int b;
        char[][] matrizChar = new char[linha][coluna];
        char caracter = 'a';
        String string1;
       
        for (a = 0; a < linha; a++) {
                        string1 = br.readLine();
            for (b = 0; b < coluna; b++) {
                caracter = string1.charAt(b);
                matrizChar[a][b] = caracter;           
            }
        } 
       
        return matrizChar;     
    }       

    void imprimeResultado(int[][] matrizResposta, int linha, int coluna) {
        int i;
        int j;
           
        for (i = 0; i < linha; i++) {
            for (j = 0; j < coluna; j++) {
                if (matrizResposta[i][j] == -1) {
                    System.out.print('*');
                }
                else {
                    System.out.print(matrizResposta[i][j]);           
                }
            }
            System.out.println();
        }
    }
   
    int[][] processa(char[][] matriz, int linha, int coluna) {
        int i;
        int j;
        int[][] matrizResposta = new int[linha][coluna];
        int contador = 0;
       
        for (i = 0; i < linha; i++) {
            for (j = 0; j < coluna; j++) {
                if (i != 0 && j != 0) {
                    if (matriz[i-1][j-1] == '*') {
                        contador++;
                    }
                }
                if (i != 0) {
                    if (matriz[i-1][j] == '*') {
                        contador++;
                    }
                    if (j != coluna-1) {
                        if (matriz[i-1][j+1] == '*') {
                            contador++;
                        }
                    }
                }
                if (j != 0) {
                    if (matriz[i][j-1] == '*') {
                        contador++;
                    }
                    if (i != linha-1) {
                        if (matriz[i+1][j-1] == '*') {
                            contador++;
                        }
                    }
                }
                if (j != coluna-1) {
                    if (matriz[i][j+1] == '*') {
                        contador++;
                    }
                }
                if (i != linha-1) {
                    if (matriz[i+1][j] == '*') {
                        contador++;
                    }
                }
                if (i != linha-1 && j != coluna-1) {
                    if (matriz[i+1][j+1] == '*') {
                        contador++;
                    }
                }
                if (matriz[i][j] != '*') {
                    matrizResposta[i][j] = contador;
                }
                else {
                    matrizResposta[i][j] = -1;
                }
                contador = 0;
            }
        }
       
        return matrizResposta;
    }
   
    void takeInput() throws NumberFormatException, IOException {
        String line = "";
        StringTokenizer tokenizer = null;
        int i = 0;
        int j = 0;
        char[][] matriz;
        int[][] resposta;
        int contador = 0;
       
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       
        while ((line = br.readLine()) != null) {
            tokenizer = new StringTokenizer(line);
            i = Integer.parseInt(tokenizer.nextToken());
            j = Integer.parseInt(tokenizer.nextToken());

            if (i == 0 && j == 0) {
                return;
            }
                           
            matriz = leMapa(br, i, j);
           
            resposta = processa(matriz, i, j);
           
            contador++;
            if (contador != 1)
                System.out.println();
            System.out.println("Field #" + contador + ":");
            imprimeResultado(resposta, i, j);
        }
       
        return;
    }
}

Comments

Popular posts from this blog

(Coderbyte) Dash Insert II - Solução

(Coderbyte) Run Length - Solução

(Coderbyte) Counting Minutes I - Solução