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; } }