Resoluções da Etapa 3

Desafio 1

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

public class DesafioKuiper {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        String I,F; 

        for(int i = 0; i < n; i++){
            I = sc.next();
            F = sc.next();

            // verifica se tem asteroide em uma ou nas duas coordenadas (OR)
            if(coordenadasInvalidas(I) || coordenadasInvalidas(F)){
                System.out.println("Coordenadas Invalidas.");
            }   

            // verifica se apenas uma das duas coordenadas é um dos quadrados fechados por asteroides (XOR) 
            else if(quadradoFechado(I) ^ quadradoFechado(F)){
                System.out.println("Caminho nao eh possivel.");
            }

            else {
                System.out.println("Caminho eh possivel.");
            }
        }

    }

    private static boolean coordenadasInvalidas(String coord){
        if(coord.equals("0,0") || coord.equals("1,1") || coord.equals("0,4") || 
            coord.equals("1,3")  || coord.equals("2,3") || coord.equals("3,1") ||
            coord.equals("3,4")) {
                return true;
            }
        return false;
    }

    private static boolean quadradoFechado(String coord){
        if(coord.equals("1,4") || coord.equals("2,4"))
            return true;

        return false;
    }
}
Resolução em C++
#include "javalib.hpp"
#include <iostream>

bool coordenadasInvalidas(string coord);
bool caminhoFechado(string coord);
bool equals(string i, string o);

int main () {
    int n;
    string I,F; 

    cin >> n;

    for(int i = 0; i < n; i++){
        cin >> I;
        cin >> F;

        // verifica se tem asteroide em uma ou nas duas coordenadas (OR)
        if(coordenadasInvalidas(I) || coordenadasInvalidas(F)){
            cout << "Coordenadas Invalidas.\n";
        }   

        // verifica se apenas uma das duas coordenadas é um dos quadrados fechados por asteroides (XOR) 
        else if(quadradoFechado(I) ^ quadradoFechado(F)){
            cout << "Caminho nao eh possivel.\n";
        }

        else {
            cout << "Caminho eh possivel.\n";
        }
    }

}

bool coordenadasInvalidas(string coord){
    if(equals(coord, "0,0") || equals(coord, "1,1") || equals(coord, "0,4") || 
        equals(coord, "1,3")  || equals(coord, "2,3") || equals(coord, "3,1") ||
        equals(coord, "3,4")) {
            return true;
    }
    
    return false;
}

bool quadradoFechado(string coord){
    if(equals(coord, "1,4") || equals(coord, "2,4"))
        return true;

    return false;
}


bool equals (string i, string o){
    if (i.compare(o) == 0)
        return true;

    return false;
}

Desafio 2

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

public class DesafioComunicacao {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        //declaração de variaveis
        String binario, resposta;
        String[] numerosBinarios;
        int decimal, anterior, letraNumerica;
        char letra;

        //rodar enquanto houver uma linha a mais, sim pode ser um while(true)
        while(sc.hasNextLine()){
            resposta = "";

            //toda nova linha, o anterior reseta
            anterior = 0;
            
            numerosBinarios = sc.nextLine().split(" ");    
            if(numerosBinarios[0].equals("-1"))
                break;


            int j = 0;
            //rodar todos os números binarios armazenados no array
            while(j < numerosBinarios.length){
                binario = numerosBinarios[j];

                decimal = binToInt(binario);
                  
                
                letraNumerica = decimal;
                letraNumerica -= anterior;

                if(letraNumerica < 0)
                    letraNumerica += 26;               

               	letra = traduzirParaLetra(letraNumerica);

                resposta += letra;

                // atualizar o anterior com o simbolo atual
                anterior = decimal;
                j++;
            }
            
            System.out.println(resposta);
        }

        
    }



    static char traduzirParaLetra(int i){

        char[] alfabeto = "abcdefghijklmnopqrstuvwxyz".toCharArray();
        return alfabeto[i];
    }

    static int binToInt(String text){
        char[] textArray = text.toCharArray();
        
        int i = 1, result = 0;

        for(int n = text.length() - 1; n >= 0; n--){
            if(textArray[n] == '1'){
                result += i;
            }
            i *= 2;
        }
        return result;
    }


}
Resolução em C++
#include "javalib.hpp"

#include <iostream>

int binToInt(std::string text){
	int i = 1, result = 0;
	for(int n = text.length() - 1; n >= 0; n--){
		if(text[n] == '1'){
			result += i;
		}
		i *= 2;
	}
	return result;
}

char traduzirParaLetra(int i){
    std::string alfabeto = "abcdefghijklmnopqrstuvwxyz";
    return alfabeto[i];
}		

int main(){
	while(true){

		//toda nova linha, o anterior reseta
		int anterior = 0;
		std::string res = "";

		std::string line = jl::nextLine();

		if(line == "-1 -1") break;

		std::vector<std::string> bins = jl::split(line, " ");
		
		for(int n = 0; n < bins.size(); n++){
			std::string bin = bins[n];

			int decimal = binToInt(bin);
			int letraNumerica = decimal;
			letraNumerica -= anterior;

			if(letraNumerica < 0)
    	        letraNumerica += 26;

    	  	res += traduzirParaLetra(letraNumerica); 
			anterior = decimal;
		}
		std::cout << res << std::endl;
	}
	std::cout << std::endl;
}

Desafio 3

Enunciado
Resolução em Java
import java.util.Scanner;
public class Distancias {
    
    public static void main (String[] args){
        //Scanner
        Scanner sc = new Scanner(System.in);
        
        //Pontos de coordenadas
        float[] p1 = new float[3];
        float[] p2 = new float[3];
        
        //Vetores de String auxiliares
        String[] aux1;
        String[] aux2;
        
        //Comprimento da diagonal no plano e delta Z
        float diag;
        float deltaZ;
        
        //Distância resposta
        float dist;
        
        //Contador de casos de teste
        int n = sc.nextInt();
        sc.nextLine();
        
        for (int i = 0; i < n; i++){
            
            //Leitura da entrada
            aux1 = sc.nextLine().split(" ");
            
            aux2 = aux1[0].split(",");
            p1[0] = Float.parseFloat(aux2[0]);
            p1[1] = Float.parseFloat(aux2[1]);
            p1[2] = Float.parseFloat(aux2[2]);
            
            aux2 = aux1[1].split(",");
            p2[0] = Float.parseFloat(aux2[0]);
            p2[1] = Float.parseFloat(aux2[1]);
            p2[2] = Float.parseFloat(aux2[2]);
            
            //Cálculo da diagonal no plano
            diag = DiagonalNoPlano(p1, p2);
            
            //Cálculo da diagonal no espaço
            deltaZ = p2[2] - p1[2];
            dist = DiagonalNoEspaco(diag, deltaZ);
            
            //Saída
            System.out.println("Distancia: " + (int)Math.ceil(dist));
            
        }
        
    }
    
    /*
    Função para calcular o tamanho da diagonal no plano entre dois pontos tridimensionais
    */
    public static float DiagonalNoPlano(float[] p1, float[] p2){
        float resp;
        float x = p2[0] - p1[0];
        float y = p2[1] - p1[1];
        resp = (float)Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
        return resp;
    }
    
    /*
    Função para calcular o tamanho da diagonal no espaço usando a diagonal no plano
    e a variação no eixo Z
    */
    public static float DiagonalNoEspaco(float diag, float deltaZ){
        return (float)Math.sqrt(Math.pow(diag, 2) + Math.pow(deltaZ, 2));
    }
    
}
Resolução em C++
#include "javalib.hpp"
#include <math.h>

float diag2D(float x1,float x2,float y1,float y2){
    float resp;

    float x = x2-x1;
    float y = y2-y1;
    resp = (float)sqrt(pow(x,2)+pow(y,2));

    return resp;
}

float diag3D(float diag, float z1, float z2){
    float resp;

    float z = z2-z1;
    resp = (float)sqrt(pow(z,2)+pow(diag,2));

    return resp;
}

int main()
{

    //Quantidade de entradas
	int n;
	scanf("%d\n",&n);

	//Coordenadas
	float x1,y1,z1,x2,y2,z2;

	//Diagonais
	float diagPlano;
	float diagEspaco;

    //Resposta
    int resp;

    //Loop de execução
    for (int i = 0; i < n; i++){

        //Leitura da entrada
        scanf("%f,%f,%f %f,%f,%f",&x1,&y1,&z1,&x2,&y2,&z2);

        //Obtenção da diagonal no plano
        diagPlano = diag2D(x1,x2,y1,y2);

        //Obtenção da diagonal no espaço
        diagEspaco = diag3D(diagPlano,z1,z2);

        //Saída
        resp = ceil(diagEspaco);
        printf("%d\n",resp);

    }

	return 0;
}

Desafio 4

Enunciado
Resolução em Java
import java.util.Scanner;
public class Unsort {
    
    public static void main(String[] args){
    
        Scanner sc = new Scanner(System.in);
        
        String[] aux;
        
        int[] vetor;
        
        boolean unsort;
        
        while(true){
            
            aux = sc.nextLine().split(" ");
            
            vetor = new int[aux.length];
            
            if (vetor.length == 1 && vetor[0] == 0)
                break;
            
            for(int j = 0; j < vetor.length; j++)
                vetor[j] = Integer.parseInt(aux[j]);
            
            unsort = true;
            
            for(int j = 1; j < vetor.length -1; j++){
                
                if(vetor[j-1] > vetor[j] && vetor [j] > vetor[j+1]){
                    unsort = false;
                } else if(vetor[j-1] == vetor[j] && vetor [j] == vetor[j+1]){
                    unsort = false;
                } else if(vetor[j-1] == vetor[j] && vetor [j] < vetor[j+1]){
                    unsort = false;
                }  else if(vetor[j-1] < vetor[j] && vetor [j] == vetor[j+1]){
                    unsort = false;
                }  else if(vetor[j-1] < vetor[j] && vetor [j] < vetor[j+1]){
                    unsort = false;
                }
                
            }
            
            if(unsort)
                System.out.println("O vetor nao esta ordenado! Fracasso: Sucesso!");
            else
                System.out.println("O vetor esta ordenado! Sucesso: Fracasso!");
            
        }
    
    }
    
}
import java.util.Scanner;
public class Unsort {
    
    public static void main(String[] args){
    
        Scanner sc = new Scanner(System.in);
        
        String[] aux;
        
        int[] vetor;
        
        boolean unsort;
        
        while(true){
            
            aux = sc.nextLine().split(" ");
            
            vetor = new int[aux.length];
            
            if (vetor.length == 1 && vetor[0] == 0)
                break;
            
            for(int j = 0; j < vetor.length; j++)
                vetor[j] = Integer.parseInt(aux[j]);
            
            unsort = true;
            
            for(int j = 1; j < vetor.length -1; j++){
                
                if(vetor[j-1] > vetor[j] && vetor [j] > vetor[j+1]){
                    unsort = false;
                } else if(vetor[j-1] == vetor[j] && vetor [j] == vetor[j+1]){
                    unsort = false;
                } else if(vetor[j-1] == vetor[j] && vetor [j] < vetor[j+1]){
                    unsort = false;
                }  else if(vetor[j-1] < vetor[j] && vetor [j] == vetor[j+1]){
                    unsort = false;
                }  else if(vetor[j-1] < vetor[j] && vetor [j] < vetor[j+1]){
                    unsort = false;
                }
                
            }
            
            if(unsort)
                System.out.println("O vetor nao esta ordenado! Fracasso: Sucesso!");
            else
                System.out.println("O vetor esta ordenado! Sucesso: Fracasso!");
            
        }
    
    }
    
}
Resolução em C++
#include "javalib.hpp"

int main()
{
    while(true)
    {
        std::string line = nextLine();
        if(line == "0") break;

        std::vector<std::string> numbers = split(line, " ");

        int nlast, ncurr = stoi(numbers[0]), nnext = stoi(numbers[1]);

        for(int i = 2; i < numbers.size(); i++)
        {
            nlast = ncurr;
            ncurr = nnext;
            nnext = stoi(numbers[i]);

            if(
                (nlast < ncurr && ncurr < nnext) ||
                (nlast < ncurr && ncurr == nnext) ||
                (nlast == ncurr && ncurr < nnext) ||
                (nlast == ncurr && ncurr == nnext) ||
                (nlast > ncurr && ncurr > nnext)
            )
            {
                std::cout << "O vetor esta ordenado! Sucesso: Fracasso!" << std::endl;
                break;
            }
        }
        std::cout << "O vetor nao esta ordenado! Fracasso: Sucesso!" << std::endl;
    }

    return 0;
}

Deixe uma resposta

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