Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador 1001. Mostrar todas as postagens
Mostrando postagens com marcador 1001. Mostrar todas as postagens

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))

URI (BEECROWD) - 1001 - Extremamente Básico - Iniciante - Pascal

Plataforma: URI (BEECROWD)
Problema1001

Linguagem: Pascal

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:

Exercício bem simples, ótimo para quem está começando a aprender Pascal (não vou discutir aqui os motivos que levariam alguém a aprender Pascal, mas OK).

Em Pascal, criamos uma área para a declaração de variáveis e a cada variável atribuímos seu tipo, pois é uma linguagem de tipagem estática.

Os comandos de leitura e escrita são o read e o write, respectivamente. Quando o programador quer escrever e pular uma linha, pode utilizar writeln no lugar do write. A atribuição em Pascal é feita com ":=".

E aí, achou fácil?

var
    a : int64;
    b : int64;
    x : int64;

begin
    read(a);
    read(b);
    x := a + b;
    writeln('X = ', x);
end.

URI (BEECROWD) - 1001 - Extremamente Básico - Iniciante - Kotlin e Ruby

Plataforma: URI (BEECROWD)
Problema1001


Linguagens: Kotlin e Ruby

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:

Aqui soluciono o problema 1001, que solicita a soma de dois inteiros informados pelo usuário na entrada padrão, nas linguagens Kotlin e Ruby. Os códigos são bastante simples e intuitivos.

Código em Kotlin:

Quem vê o código Kotlin já nota: Kotlin é uma linguagem para a JVM totalmente interoperável com Java. Portanto, sua sintaxe é bastante familiar para quem já usa Java. Usa-se imports quando necessário chamar alguma biblioteca, como fizemos com java.util.*, já que usamos o objeto Scanner para fazer a leitura de dados da entrada padrão. A função principal é a main e dentro do código foram declaradas três variáveis com "val". Elas podiam ser criadas com "var", no entanto, não seria o mais correto. Utilizamos "val" quando o valor não será alterado, e "var" quando ele pode ser modificado. Os métodos sc.next servem para que a referência ao objeto do tipo Scanner (sc) faça a leitura dos valores de entrada. Os valores são recebidos como referências a Strings. No comando de escrita (println), utilizamos "ln" no final para indicar que deve criar uma nova linha (ln significa line new) após o último caractere. Por fim, para fazer a soma de a e b, primeiro precisamos fazer o cast (a conversão explícita), pois ambos foram lidos e atribuídos como String. Essa conversão é feita com o método toInt(). Assim é possível somar os valores e imprimir no comando println.

import java.util.*
fun main(args: Array<String>) {
    val sc = Scanner(System.`in`);
    val a: String = sc.next();
    val b: String = sc.next();
    println("X = " + (a.toInt() + b.toInt()));
}

Código em Ruby:

Embora Kotlin seja uma linguagem de programação simples, a solução em Ruby fica bem menor. Aqui, para ler os valores e já armazená-los como inteiro, basta utilizar gets.to_i. O "to_i" já faz a conversão para inteiro (to_i significa to int ou para int). Assim, x recebe a soma entre a e b e o comando puts imprime o resultado. Simples, não?

a = gets.to_i 
b = gets.to_i
x = a + b
puts "X = #{x}"

URI (BEECROWD) - 1001 - Extremamente Básico - Iniciante - C#, Go e Scala

Plataforma: URI (BEECROWD) 

Problema1001

Linguagens: C#, Go e Scala

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:

Nesse post trago a solução para o exercício 1001 (soma de dois valores inteiros) em C#, Go e Scala. Sugiro que utilize-os como base para os códigos seguintes, pois cada um traz algumas particularidades de cada linguagem: comandos de entrada e saída, necessidade ou não de imprimir a quebra de linha, declaração de tipos quando necessário etc. Nota-se que nas três soluções o código precisa estar em uma função especial (ou método, dependendo do paradigma) chamada main. Ela é, para essas três linguagens, o ponto de partida do seu código quando ele for executado.

Observe o código da linguagem que você deseja e, em caso de dúvida, deixe um comentário que responderemos o mais breve possível!

Código em C#:

using System; 
class URI {
    static void Main(string[] args) { 
        int A = Int32.Parse(System.Console.ReadLine().Trim());
        int B = Int32.Parse(System.Console.ReadLine().Trim());
        int X = A + B;
        Console.Write("X = {0}\n", X);
    }
     
}

Código em Go:

package main
import (
    "fmt"
)
func main() {
    var a,b int
    fmt.Scanf("%d", &a)
    fmt.Scanf("%d", &b)
    fmt.Printf("X = %d\n", a + b)
}

Código em Scala:

object Main {
    def main(args: Array[String]) {
        val A = io.StdIn.readLine().toInt
        val B = io.StdIn.readLine().toInt
        println("X = " + (A + B))
    }
}

URI (BEECROWD) - 1001 - Extremamente Básico - Iniciante - Lua e OCaml

Plataforma: URI (BEECROWD)

Problema1001

Linguagens: Lua e OCaml

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:

Basta ler os dois valores (números inteiros) informados e realizar a soma deles, imprimindo o resultado no formato desejado na plataforma.

Lua e OCaml não são linguagens de programação das mais populares, então nesse post eu trago o código aceito para essas duas linguagens. Veja abaixo!

Código em Lua: utilizamos io.read() para ler o valor da entrada padrão, mas passamos esse resultado para a função tonumber, que recebe também o parâmetro 10. Isso é feito para converter o valor recebido da entrada padrão para número, e o 10 é para dizer a base numérica, isto é, base decimal. Isso deve ser feito na atribuição dos dois valores, X e Y. O comando de escrita é o print, que imprime o resultado na forma 'X = resultado_da_soma'. Era só isso!

X = tonumber(io.read(), 10)
Y = tonumber(io.read(), 10)

print('X = ' .. X + Y)

Código em OCaml: Aqui é necessário usar Scanf.scanf para ler os valores, com formatação de %i porqu esão valores inteiros. Para quem não conhece, OCaml é uma linguagem funcional, então a unidade básica de trabalho dela é a função. Assim, fun a b é uma função que recebe esses dois parâmetros e imprime na tela a soma no formato desejado. Para imprimir na tela é necessário usar Printf.printf. A formatação aqui lembra um pouco a linguagem C. Assim como ocorre em C, o "\n" faz a quebra de linha, necessária para obtenção do aceite neste exercício.

Scanf.scanf "%i %i\n" (fun a b ->
        Printf.printf "X = %d\n" (a + b);
)

domingo, 21 de março de 2021

URI (BEECROWD) - 1001 - Extremamente Básico - Iniciante - Python

O exercício "Extremamente Básico" foi resolvido em diversas linguagens. Nesse post eu mostro minha solução usando Python, mais especificamente o Python3.

Plataforma: URI (BEECROWD)
Problema1001

Linguagem: Python 3


Solução:

O exercício pede a impressão da soma de a+b no formato "X = valor", com quebra de linha ao final.

Para ler os valores de "a" e "b" é necessário chamar a função input(). No entanto, ela fará com que as variáveis "a" e "b" armazenem strings, então é necessário fazer a conversão, passando-a como parâmetro para int(). O que fizemos é chamado de coerção ou casting, forçando o dado informado a virar um inteiro. Agora nossos valores de "a" e "b" são inteiros, então basta somá-los e imprimir com a formatação correta usando a função print.

Era só isso!

a = int(input())
b = int(input())
print("X = %i" % (a + b))

segunda-feira, 30 de março de 2020

URI - 1001 - Extremamente Básico - Iniciante - C

Plataforma: URI
Problema1001

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".

Linguagem: C

Solução:

Exercício bastante simples que realiza a soma de dois valores, aqui salvos nas variáveis v1 e v2. O comando printf escreve estes valores, sempre antecedidos pela parte constante do texto "X = ". É necessário acrescentar também a quebra de linha ao final da escrita: "\n".
O comando scanf foi colocado dentro de um while caso o programador deseje realizar vários testes. Para o exercício do URI era necessário apenas o scanf, não precisava colocar dentro do laço. No entanto, funcionará igualmente, pois para cada arquivo há apenas um teste, e o while será finalizado quando chegar ao final do arquivo.

#include <stdio.h>

int main()
{
    int v1, v2;
    while (scanf("%i %i", &v1, &v2) != EOF) {
        printf("X = %i\n", v1 + v2);
    }
}

URI - 1001 - Extremamente Básico - Iniciante - C++

Plataforma: URI
Problema1001

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".

Linguagem: C++

Solução:
O exercício é bastante simples. O comando cin faz a leitura de dois valores inteiros, aqui chamados de x e y. Você pode definir o nome que preferir para as variáveis, por exemplo, "a" e "b".
Após ler os valores, o comando cout faz a escrita do comando, seguindo o padrão solicitado no exercício. No comando de escrita, a parte "X = " é constante, ou seja, independente de qualquer coisa, o resultado começa com esse trecho sempre. Depois disso vem o valor da soma, ou seja, x + y.
É necessário colocar "endl;" para evitar erros. A maioria dos exercícios do URI exige que haja esta quebra de linha ao final das escritas.

#include <iostream>

using namespace std;

int main() {
    int x, y;
    cin >> x >> y;
    cout << "X = " << x + y << endl;
    return 0;
}

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