Pesquisar este blog

Livros Recomendados

quarta-feira, 20 de dezembro de 2023

URI (BEECROWD) - 1515 - Hello Galaxy - Ad-Hoc - C, C++ e Haskell

Hello Galaxy! Mais um exercício resolvido da categoria Ad-Hoc no Beecrowd. A solução desse exercício é bem simples, bora conferir?

Plataforma: Beecrowd (antiga URI)

Problema1515

Enunciado:

Atualmente, no ano de 2114, o conhecimento de que não estamos sozinhos no universo não é novidade, porém um século atrás isto ainda era um mistério. Diversas civilizações na Via Láctea já emitiram algum tipo de sinal provando sua existência, e outras até estabeleceram um contato aberto com a Terra em busca de informações sobre a tal Árvore Hexagonária (afinal, estamos em 2114).

Rafael tem muito interesse pelo assunto, e em um trabalho para a escola se encarregou de descobrir qual foi a civilização mais antiga que enviou um Hello Galaxy para toda a galáxia. Hello Galaxy nada mais é que o primeiro dos passos do Protocolo de Iniciação na Sociedade Via Láctea, PISVL, garantindo que a nova civilização possa entrar em contato com as demais caso necessário.

A mensagem Hello Galaxy traz consigo duas informações básicas: o texto “Hello Galaxy”, que faz parte da tradição, e o nome do planeta da civilização que enviou a mensagem. O CMSVL, Centro de Monitoramento da Sociedade Via Láctea, instalado, por algum motivo, na Terra, recebe tais mensagens, armazenando em um registro o ano em que foi recebida a mensagem e a quantidade de anos que tal mensagem levou para chegar até ali.

A tarefa de Rafael é simples: descobrir quem foi a primeira civilização a enviar a mensagem Hello Galaxy.

Linguagens: C, C++ e Haskell

Solução:

Basta remover o tempo do ano de chegada e verificar qual das entradas resulta em menor valor.

Código em C++:

Coloquei uma variável menor com um número bem grande, de forma que comparada com qualquer valor, na primeira comparação ela vai obter o primeiro valor informado pelo usuário (ano de chegada menos o tempo). Assim, basta fazer o mesmo procedimento de remover o tempo do ano de chegada a cada linha informada e comparar com o valor que está na variável menor. Sempre que essa variável for atualizada, o nome do planeta também precisa ser, pois a resposta será o nome do planeta.

#include <iostream>
#include <string>

using namespace std;

int main() {
    int n;
    while (cin >> n) {
        int menor = 99999;
        int anoChegada;
        int tempo;
        int resultado;
        string planeta;
        string resposta;

        if (!n)
            break;

        for (int i = 0; i < n; i++) {
            cin >> planeta >> anoChegada >> tempo;
            resultado = anoChegada - tempo;
            if (resultado < menor) {
                menor = resultado;
                resposta = planeta;
            }
        }

        cout << resposta << endl;
    }
    return 0;
}

Código em C:

Aqui a mesma lógica foi aplicada.

#include <stdio.h>
#include <string.h>

int main() {
    int n;
    int i;
    int anoChegada;
    int tempo;
    int resultado;
    char planeta[55];
    char resposta[55];
    int menor;

    while (scanf("%d", &n) != EOF) {
        menor = 99999;
        if (!n)
            break;

        for (i = 0; i < n; i++) {
            scanf("%s %d %d", planeta, &anoChegada, &tempo);
            resultado = anoChegada - tempo;
            if (resultado < menor) {
                menor = resultado;
                strcpy(resposta, planeta);
            }
        }

        printf("%s\n", resposta);
    }

    return 0;
}

Código em Haskell:

main :: IO ()
main = do
    n <- readLn
    if n == 0
      then return ()
      else do
         obtemResposta n 99999 ""
         main

obtemResposta :: Int -> Int -> [Char] -> IO ()
obtemResposta 0 _ p = putStrLn p
obtemResposta n menor p = do
   linha <- getLine
   let [planeta, anoChegada, tempo] = words linha
   let resultado = read anoChegada - (read tempo) :: Int
   if resultado < menor
      then obtemResposta (n-1) resultado planeta
      else obtemResposta (n-1) menor p

Chave PIX (chave aleatória) para doações: 6d8bc7a8-5d74-493a-ab7a-3515baf35956
Ajude o blog mais uma vez!

Nenhum comentário:

Postar um comentário

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas