Resoluções da etapa 4

Desafio 1 – A troca de sexo de Oxumarê

Enunciado
Resolução
import java.util.Scanner;


public class Oxumare{

    public static void main(String args[]){
        Scanner in = new Scanner(System.in);
        String line = in.nextLine();
        int n = Integer.parseInt(line);

        for(int i =0 ; i<n;i++){
            line = in.nextLine();
            int mes = Integer.parseInt(line.substring(3,5));
            char g = line.charAt(11);
            if( (mes > 10) || (mes<5)){
                if(g=='M')
                System.out.println("Oxumare eh homem, podemos ver um arco-iris.");
                else System.out.println("Oxumare eh mulher, esta protegendo a terra.");
            }
            else{
                if(g=='H')
                System.out.println("Oxumare eh homem, podemos ver um arco-iris.");
                else System.out.println("Oxumare eh mulher, esta protegendo a terra.");
            }
            
            }
        }
    }

Desafio 2 – O Mensageiro

Enunciado
Resolução
import java.util.Scanner;

class Mensageiro {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()){
            String entrada = sc.nextLine();
            String verificar = entrada.toLowerCase();
            if(verificar.contains("[oxufala]") || !( verificar.contains("[") && verificar.contains("]"))) {
                System.out.println("...");
            }
            else {
                System.out.println(entrada);
            }
        }
    }
}

Desafio 3 – Oxalá e seus humanos de barro

Enunciado
Resolução
import java.util.Scanner;
import java.math.*;
public class Oxala{
	public static void main(String[] args){ 

		Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        for(int i=0;i<n;i++){
            int cab = input.nextInt();
            int bra = input.nextInt();
            int tro = input.nextInt();
            int per = input.nextInt();
            if((cab==tro/3) && (bra <= per-10) && (per%3 ==0) && tronco(cab, bra, tro, per)){
                System.out.println("Ta com a balanca na mao em Oxala.");
            }
            else  System.out.println("Ta querendo fazer um monstro ??");
            
        }
    }
    public static boolean tronco (int cab,int bra, int tro, int per){
        if(tro > cab && tro > bra && tro > per) return true;
        return false;
    }
}

Desafio 4 – A fuga de Iemanjá

Enunciado
Resolução
import java.util.Scanner;
import java.lang.Math;

public class Iemanja {
	public static void main(String[] args){

		Scanner input = new Scanner(System.in); 

		while(true){

			String s = input.nextLine();
			String[] entrada = s.split("!");
			String[] caminho01 = entrada[0].split(",");
			String[] caminho02 = entrada[1].split(",");
			String[] caminho03 = entrada[2].split(",");
			int[] caminho1 = numerando(caminho01);
			int[] caminho2 = numerando(caminho02);
			int[] caminho3 = numerando(caminho03);
			int c1 = 0;
			int c2 = 0;
			int c3 = 0;
			double mediac1 = media(caminho1);
			double mediac2 = media(caminho2);
			double mediac3 = media(caminho3);
			if (mediac1 < mediac2 && mediac1 < mediac3)
				c1++;
			if (mediac2 < mediac1 && mediac2 < mediac3)
				c2++;
			if (mediac3 < mediac2 && mediac3 < mediac1)
				c3++;

			if (mediac1 == 0 && mediac2 == 0 && mediac3 == 0){
				System.out.println("Bem vinda ao lar, oh rainha do mar!");
				System.exit(0);
			}
			
			double desvio1 = desvio(caminho1);
			double desvio2 = desvio(caminho2);
			double desvio3 = desvio(caminho3);
			int menor = 0;
			if (desvio1 < desvio2 && desvio1 < desvio3){
				menor = 1;
				c1++;
			}
			if (desvio2 < desvio1 && desvio2 < desvio3){
				menor = 2;
				c2++;
			}
			if (desvio3 < desvio2 && desvio3 < desvio1){
				menor = 3;
				c3++;
			}

			int tamanho1 = caminho1.length;
			int tamanho2 = caminho2.length;
			int tamanho3 = caminho3.length;
			if (tamanho1 < tamanho2 && tamanho1 < tamanho3)
				c1++;
			else if(tamanho2 < tamanho1 && tamanho2 < tamanho3)
				c2++;
			else if(tamanho3 < tamanho2 && tamanho3 < tamanho1)
				c3++;
			else if(tamanho3 > tamanho2 && tamanho1 < tamanho3){
				c1++;
				c2++;
			}
			else if(tamanho1 < tamanho2 && tamanho3 < tamanho2){
				c1++;
				c3++;
			}
			else if(tamanho1 > tamanho2 && tamanho1 > tamanho3){
				c2++;
				c3++;
			}
			else {
				c1++;
				c2++;
				c3++;
			}
			if (c1 > c2 && c1 > c3)
				System.out.println("Continue pelo primeiro caminho, Iemanja!");
			else if  (c2 > c1 && c2 > c3)
				System.out.println("Continue pelo segundo caminho, Iemanja!");
			else if(c3 > c2 && c3 > c1)
				System.out.println("Continue pelo terceiro caminho, Iemanja!");
			else if(menor == 1)
				System.out.println("Continue pelo primeiro caminho, Iemanja!");
			else if (menor == 2)
				System.out.println("Continue pelo segundo caminho, Iemanja!");
			else 
				System.out.println("Continue pelo terceiro caminho, Iemanja!");
		}
	}

	public static int[] numerando(String[] caminho){

		int[] novoC = new int[caminho.length];
		for (int i = 0; i < caminho.length; i++){
			novoC[i] = Integer.parseInt(caminho[i]);
		}
		return novoC;
	}

	public static double media(int[] caminho){

		int media = 0;
		for (int i = 0; i < caminho.length; i++){
			media += caminho[i];
		}
		return media/caminho.length;
	}

	public static double desvio(int[] caminho){

		double desvio01 = 0;
		for (int i = 0; i < caminho.length; i++){
			desvio01 += Math.pow(media(caminho) - (double)caminho[i], 2.0);
		}
		double desvio = desvio01/caminho.length;
		desvio01 = Math.sqrt(desvio);
		return desvio01;
	}
}

Desafio 5 – Ori e as várias almas

Enunciado
Resolução
import java.util.Scanner;

public class ori {
	public static void main(String[] args){

		Scanner input = new Scanner(System.in);

		int n = Integer.parseInt(input.nextLine());

		for(int i = 0; i < n; i++){

				
				String tam = input.next();
				String matrixS = input.next();
				int tamanho = Integer.parseInt(tam.substring(0,1));
				//System.out.println
				matrixS = matrixS.substring(1, matrixS.length()-1);
				String[] vetor = matrixS.split(",");
				String[][] matrix = matrixDeString(vetor, tamanho);
				boolean verifica = true;
				int resp1 = 0;

				while(verifica){
					int[] local = melhorLocal(matrix, tamanho);
					int pX = local[0];
					int pY = local[1];
					if (pX != -1){
						if (pX > 0){
							matrix[pX-1][pY] = "0";	
						}
						if (pX < tamanho-1){
							matrix[pX+1][pY] = "0";
						}
						if (pY < tamanho-1){
							matrix[pX][pY+1] = "0";
						}
						if (pY > 0){
							matrix[pX][pY-1] = "0";
						}
						resp1++;
					}
					else
						verifica = false;
				}
				System.out.print(resp1 + " ");
				System.out.println("1" + "X" + ((tamanho/2)+1));
		}
	}

	public static String[][] matrixDeString(String[] vetor, int tamanho){

		int cont = 0;
		String[][] matrix = new String[tamanho][tamanho];
		
		for (int i = 0; i < tamanho; i++){
			for (int j = 0; j < tamanho; j++){
				matrix[i][j] = vetor[cont];
				cont++;
			}
		}
		return matrix;
	}

	public static int[] melhorLocal(String[][] matrix, int tamanho){

		int mais1 = 0;
		int cont;
		int[] melhor = new int[2];
		
		for (int i = 0; i < tamanho; i++){
			for (int j = 0; j < tamanho; j++){
				cont = 0;
				if (i > 0){
					if (matrix[i-1][j].equals("1"))
						cont++;
					if (matrix[i-1][j].equals("Ori"))
						cont = cont-10;
				}
				if (i < tamanho-1){
					if (matrix[i+1][j].equals("1"))
						cont++;
					if (matrix[i+1][j].equals("Ori"))
						cont = cont-10;
				}
				if (j < tamanho-1){
					if (matrix[i][j+1].equals("1"))
						cont++;
					if (matrix[i][j+1].equals("Ori"))
						cont = cont-10;
				}
				if (j > 0){
					if (matrix[i][j-1].equals("1"))
						cont++;
					if (matrix[i][j-1].equals("Ori"))
						cont = cont-10;
				}
				if (cont > mais1){
					mais1 = cont;
					melhor[0] = i;
					melhor[1] = j;
				}
			}
		}
		if (mais1 == 0){
			melhor[0] = -1;
			melhor[1] = -1;
		}

		return melhor;
	}
}

Desafio 6 – Pulando Ondas

Enunciado
Resolução
import java.util.Scanner;

class Ondinhas
{
    public static void main(String[] args) {

        //Criando o scanner
        Scanner sc = new Scanner(System.in);

        //Lendo a matriz do nivel do mar
        int[][] mar = new int[7][35];
        for(int i = 0; i<7;i++)
        {
            for(int j = 0; j<35; j++)
            {
                mar[i][j] = sc.nextInt();
            }
            sc.nextLine();
        }

        //Ao inves de navegar na matriz para verificar as ondas, a ideia eh fazer a soma das colunas, para poder assim,
        // verificar qual é a altura da onda
        int[] alturas = altura(mar);

        //Booleano para verificar se estava crescendo
        boolean crescendo = false;

        //Booleano para verificar se encontrou a onda
        boolean temOnda = false;

        //Booleano para verificar se encontrou pelo menos uma onda
        boolean temUmaOnda = false;

        //Booleano para verificar se chegou no pico
        boolean pico = false;

        //Booleano para verificar se tem que correr
        boolean deuRuim = false;

        //Booleano para verificar se encontrou uma base
        boolean baseEncontrada = false;

        //Inteiro para contar o numero das ondas
        int numOnda = 1;

        //Inteiro para verificar se a onda tem a altura minima em relacao a base
        int altura = 0;

        //Inteiro para verificar se a largura da onda esta abaixo do limite
        int largura = 0;

        //Inteiro para calcular a altura da base
        int base = 0;
        //Posicao sendo verificada
        int posAtual = 0;
        while(posAtual < 34) {
            //Descobrindo a base
            try{
                if (alturas[posAtual] == alturas[posAtual + 1] && alturas[posAtual] == alturas[posAtual + 2] && !baseEncontrada) {
                base = alturas[posAtual];
                posAtual = posAtual + 2;
                altura = base;
                baseEncontrada = true;
                }
            }
            catch(Exception e) {

            }


            //Onda crescendo
            if(baseEncontrada && posAtual < 34)
            if(alturas[posAtual] < alturas[posAtual+1]) {
                crescendo = true;
                altura++;
                largura = 0;
            }
            //Verificando se a crista eh muito larga
            else if(alturas[posAtual] == alturas[posAtual+1] && temOnda) {
                largura++;
            }
            //Onda caindo
            else if(alturas[posAtual] > alturas[posAtual+1]) {
                //DEBUG
                //System.out.println("Caindo!");
                crescendo = false;
                if(temOnda) {
                    pico = true;
                }
                else {
                    altura = 0;
                    largura = 0;
                    base = 0;
                    baseEncontrada = false;
                    pico = false;
                    temOnda = false;
                }
            }
            //Verificando se tem onda
            //A altura menos a base ser maior que 3
            if(!temOnda) temOnda = ((altura - base) >= 3);
            if(largura == 2) {
                deuRuim = true;
            }

            if(temOnda) {
                temUmaOnda = true;
                if(deuRuim) {
                    System.out.println("Onda " + numOnda + ": Corre berg!");
                    break;
                }
                else if(pico){
                    System.out.println("Onda " + numOnda + ": O salto eh de "+ (alturas[posAtual]+1) +" unidades.");
                    altura = 0;
                    largura = 0;
                    base = 0;
                    numOnda++;
                    baseEncontrada = false;
                    pico = false;
                    temOnda = false;
                }
            }
            posAtual = posAtual + 1;
        }

        if(!temUmaOnda) {
            System.out.println("Ue, o mar ta estranho hoje...");
        }


    }

    //Metodo que calcula as alturas
    public static int[] altura(int[][] mar) {
        int[] resposta = new int[35];
        for(int i = 0; i<resposta.length; i++) {
            for(int j = 0; j<7;j++) {
                resposta[i] += mar[j][i];
            }
        }
        return resposta;
    }

}

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *