Trilhas
/
Go
Go
/
Exercícios
/
Robô de festa
Robô de festa

Robô de festa

Exercício de aprendizagem

Introdução

Pacotes

Em Go, uma aplicação é organizada em pacotes. Um pacote é uma coleção de arquivos-fonte que ficam na mesma pasta. Todos os arquivos-fonte de uma pasta precisam ter o mesmo nome de pacote no topo do arquivo. Por convenção, os pacotes recebem o mesmo nome da pasta em que estão.

package greeting

Go oferece uma biblioteca padrão extensa de pacotes, que você pode usar no seu programa com a palavra-chave import. Os pacotes da biblioteca padrão são importados pelo próprio nome.

package greeting

import "fmt"

Um pacote importado é acessado pelo nome do pacote:

world := "World"
fmt.Sprintf("Hello %s", world)

Go determina se um item pode ser chamado por código de outros pacotes pela forma como ele é declarado. Para tornar uma função, um tipo, uma variável, uma constante ou um campo de struct visível externamente (o que se chama de exported), o nome precisa começar com letra maiúscula.

package greeting

// Hello is a public function (callable from other packages).
func Hello(name string) string {
    return "Hello " + name
}

// hello is a private function (not callable from other packages).
func hello(name string) string {
    return "Hello " + name
}

Formatação de strings

Go oferece um pacote embutido chamado fmt (pacote de formatação), que traz diversas funções para manipular o formato da entrada e da saída. A função mais usada é Sprintf, que utiliza verbos como %s para interpolar valores em uma string e retorna essa string.

import "fmt"

food := "taco"
fmt.Sprintf("Bring me a %s", food)
// Returns: Bring me a taco

Em Go, valores de ponto flutuante são formatados de maneira prática com os verbos do Sprintf: %g (representação compacta), %e (expoente) ou %f (sem expoente). Todos os três verbos permitem controlar a largura do campo e a posição numérica.

import "fmt"

number := 4.3242
fmt.Sprintf("%.2f", number)
// Returns: 4.32

Você encontra a lista completa dos verbos disponíveis na documentação do pacote de formatação.

O fmt contém outras funções para trabalhar com strings, como Println, que simplesmente imprime no console os argumentos que recebe, e Printf, que formata a entrada do mesmo jeito que o Sprintf antes de imprimi-la.

Instruções

Era uma vez um programador excêntrico que morava numa casa estranha com janelas com grades. Um dia ele aceitou um trabalho de um site de vagas para construir um robô de festa. O robô deveria cumprimentar as pessoas e ajudá-las a chegar aos seus lugares. A primeira edição era muito técnica e deixava evidente a falta de interação humana do programador. Parte disso também foi parar na edição seguinte.

1. Dê as boas-vindas a um novo convidado na festa

Implemente a função Welcome para retornar uma mensagem de boas-vindas usando o nome fornecido:

Welcome("Christiane")
// => Welcome to my party, Christiane!

2. Dê as boas-vindas a um novo convidado que faz aniversário hoje

Implemente a função HappyBirthday para retornar uma mensagem de aniversário usando o nome e a idade da pessoa. Infelizmente o programador é um pouco exibido, então o robô precisa demonstrar que sabe o aniversário de cada convidado.

HappyBirthday("Frank", 58)
// => Happy birthday Frank! You are now 58 years old!

3. Dê as direções

Implemente a função AssignTable para dar as direções. Ela deve aceitar 5 parâmetros.

  • O nome do novo convidado a cumprimentar (string)
  • O número da mesa (int)
  • O nome de quem senta ao lado (string)
  • A direção onde encontrar a mesa (string)
  • A distância até a mesa (float64)

O formato exato do resultado pode ser visto no exemplo abaixo.

O robô informa o número da mesa em um formato de 3 dígitos. Se o número tiver menos de 3 dígitos, ele recebe zeros à esquerda até ficar com 3 dígitos (por exemplo, 3 vira 003). O robô também menciona a distância da mesa. Felizmente, só com uma precisão limitada a 1 dígito.

AssignTable("Christiane", 27, "Frank", "on the left", 23.7834298)
// =>
// Welcome to my party, Christiane!
// You have been assigned to table 027. Your table is on the left, exactly 23.8 meters from here.
// You will be sitting next to Frank.
Editar via GitHub O link abre em uma nova janela ou aba
Go Exercism

Tudo pronto para começar Robô de festa?

Crie sua conta no Exercism para aprender e dominar Go com 34 conceitos165 exercícios e mentoria humana de verdade, tudo de graça.