Tracks
/
Go
Go
/
Ejercicios
/
Robot fiestero
Robot fiestero

Robot fiestero

Ejercicio de aprendizaje

Introducción

Paquetes

En Go, una aplicación se organiza en paquetes. Un paquete es una colección de archivos fuente que están en la misma carpeta. Todos los archivos fuente de una carpeta deben tener el mismo nombre de paquete al inicio del archivo. Por convención, los paquetes se nombran igual que la carpeta en la que se encuentran.

package greeting

Go ofrece una extensa biblioteca estándar de paquetes que puedes usar en tu programa con la palabra clave import. Los paquetes de la biblioteca estándar se importan usando su nombre.

package greeting

import "fmt"

Un paquete importado se usa después con el nombre del paquete:

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

Go determina si un elemento se puede llamar desde código de otros paquetes según cómo esté declarado. Para que una función, un tipo, una variable, una constante o un campo de struct sean visibles desde fuera (lo que se conoce como exportado), el nombre debe empezar con una letra mayú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
}

Formato de strings

Go incluye un paquete llamado fmt (paquete de formato) que ofrece varias funciones para manipular el formato de la entrada y la salida. La función más usada es Sprintf, que usa verbos como %s para interpolar valores dentro de un string y devuelve ese string.

import "fmt"

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

En Go, los números de punto flotante se formatean cómodamente con los verbos de Sprintf: %g (representación compacta), %e (exponente) o %f (sin exponente). Los tres verbos permiten controlar el ancho del campo y la posición numérica.

import "fmt"

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

Puedes encontrar una lista completa de los verbos disponibles en la documentación del paquete format.

fmt contiene otras funciones para trabajar con strings, como Println, que simplemente imprime en la consola los argumentos que recibe, y Printf, que formatea la entrada igual que Sprintf antes de imprimirla.

Instrucciones

Había una vez un programador excéntrico que vivía en una casa extraña con ventanas enrejadas. Un día aceptó un trabajo de una bolsa de trabajo en línea para construir un robot de fiesta. Se supone que el robot saluda a la gente y la ayuda a llegar a su asiento. La primera edición era muy técnica y dejaba ver la falta de interacción humana del programador. Algo de eso también pasó a la siguiente edición.

1. Da la bienvenida a un nuevo invitado a la fiesta

Implementa la función Welcome para que devuelva un mensaje de bienvenida usando el nombre dado:

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

2. Da la bienvenida a un nuevo invitado que cumple años hoy

Implementa la función HappyBirthday para que devuelva un mensaje de cumpleaños usando el nombre y la edad de la persona. Lamentablemente, al programador le gusta un poco presumir, así que el robot tiene que demostrar que conoce el cumpleaños de cada invitado.

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

3. Da indicaciones

Implementa la función AssignTable para dar indicaciones. Debe aceptar 5 parámetros.

  • El nombre del nuevo invitado a quien saludar (string)
  • El número de la mesa (int)
  • El nombre de la persona que se sentará al lado (string)
  • La dirección donde encontrar la mesa (string)
  • La distancia a la mesa (float64)

El formato exacto del resultado se puede ver en el ejemplo de abajo.

El robot muestra el número de la mesa en un formato de 3 dígitos. Si el número tiene menos de 3 dígitos, se le agregan ceros a la izquierda hasta llegar a 3 dígitos (por ejemplo, 3 se convierte en 003). El robot también menciona la distancia a la mesa. Por suerte, solo con una precisión 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 en GitHub El enlace se abre en una ventana o una pestaña nuevas
Go Exercism

¿Todo listo para empezar Robot fiestero?

Regístrate en Exercism para aprender y dominar Go con 34 conceptos165 ejercicios y mentoría humana real, todo gratis.