Pesquisar este blog

Livros Recomendados

quarta-feira, 24 de março de 2021

URI (BEECROWD) - 1001 - Extremamente Básico - Iniciante - JavaScript e Haskell

Plataforma: URI (BEECROWD)

Problema1001

Linguagens: JavaScript e Haskell

Enunciado:
Leia 2 valores inteiros e armazene-os nas variáveis A e B. Efetue a soma de A e B atribuindo o seu resultado na variável X. Imprima X conforme exemplo apresentado abaixo. Não apresente mensagem alguma além daquilo que está sendo especificado e não esqueça de imprimir o fim de linha após o resultado, caso contrário, você receberá "Presentation Error".

Solução:

Este exercício é um dos mais básicos da plataforma, devem ser lidos dois valores e a soma deles deve ser apresentada no formato X = a+b.

Código em JavaScript: aqui as duas primeiras linhas são padrão, servem para ler os valores do arquivo de entrada padrão e para dividi-lo em linhas. As duas linhas seguintes pegam cada entrada de dados e a colocam nas variáveis a e b, respectivamente. O comando console.log imprime o valor informado, que será X = (valor da soma de a+b).

var input = require("fs").readFileSync("/dev/stdin", "utf8");
var lines = input.split("\n");
    
var a = parseInt(lines.shift());
var b = parseInt(lines.shift());
   
console.log(`X = ${(a+b)}`);

Código em Haskell: Haskell é uma linguagem funcional muito interessante. Aqui se usa as duas primeiras linhas, que serão sempre essas em suas soluçẽs, e as funções readLn para ler os valores e inseri-los respectivamente em a e b. Haskell tem um sistema de tipos bem particular, e neste caso, podemos ver que na atribuição dos valores de a e b temos a parte qu diz :: IO Int, isso significa que os valores lidos serão inteiros. A função putStrLn realiza a saída. Sempre deve-se colocar putStrLn $ id na saída, e entre parênteses colocamos o que será impresso.

Neste exemplo, foi utilizada a função show com o parâmetro a+b. A função show faz a conversão do seu parâmetro para string, semelhante a funções toString de outras linguagens de programação. O operador ++ faz a concatenação de listas. Como em Haskell uma string é uma lista de carcteres, o operador ++ está juntando a expressão "X = " com o resultado da função show. Por exemplo, se a = 5 e b = 9,  a mensagem escrita será "X = 14".

Observação: como o URI (ou agora BEECROWD) exige quebra de linha após o último comando de escrita, optou-se por usar putStrLn. Caso não seja desejável a quebra de linha, usa-se putStr.

main :: IO ()
main = do
        a <- readLn :: IO Int
        b <- readLn :: IO Int
        putStrLn $ id ("X = " ++ show(a + b))

Solução 2 em Haskell:

Como já vimos em outras postagens, o id é simplesmente a função identidade. Desta forma, podemos removê-la, assim como o cifrão/dólar ($), que faz apenas a substituição do termo da direita na função da esquerda. Portanto, outro código equivalente e que passa corretamente pelo juíz online do Beecrowd é:

main :: IO ()
main = do
        a <- readLn :: IO Int
        b <- readLn :: IO Int
        putStrLn ("X = " ++ show(a + b))

Solução 3 em Haskell:

Aqui a única diferença é "quebrar" o texto de saída em duas partes, a parte constante "X = " e a parte da soma (a+b). A diferença é que na primeira parte foi usado putStr para não quebrar a linha, depois usa-se com Ln no fim (putStrLn) para que a linha seja quebrada, conforme solicitado pelo padrão do juíz online do URI/Beecrowd.

main :: IO ()
main = do
        a <- readLn :: IO Int
        b <- readLn :: IO Int
        putStr ("X = ")
        putStrLn (show(a + b))

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