Parcours
/
Go
Go
/
Exercices
/
Robot de fête
Robot de fête

Robot de fête

Exercice d'apprentissage

Introduction

Les packages

En Go, une application est organisée en packages. Un package est un ensemble de fichiers sources situés dans le même dossier. Tous les fichiers sources d'un dossier doivent avoir le même nom de package en haut du fichier. Par convention, on donne aux packages le nom du dossier dans lequel ils se trouvent.

package greeting

Go fournit une vaste bibliothèque standard de packages que l'on peut utiliser dans son programme grâce au mot-clé import. Les packages de la bibliothèque standard s'importent par leur nom.

package greeting

import "fmt"

Un package importé s'utilise ensuite par son nom :

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

Go détermine si un élément peut être appelé par du code d'autres packages à la façon dont il est déclaré. Pour rendre une fonction, un type, une variable, une constante ou un champ de structure visible depuis l'extérieur (on dit alors qu'il est exporté), le nom doit commencer par une majuscule.

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
}

Formatage de chaînes de caractères

Go fournit un package intégré appelé fmt (package de formatage) qui propose une variété de fonctions pour manipuler le format des entrées et des sorties. La fonction la plus couramment utilisée est Sprintf, qui utilise des verbes comme %s pour interpoler des valeurs dans une string et renvoie cette string.

import "fmt"

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

En Go, les nombres à virgule flottante se formatent facilement avec les verbes de Sprintf : %g (représentation compacte), %e (exposant) ou %f (sans exposant). Ces trois verbes permettent de contrôler la largeur du champ et la position numérique.

import "fmt"

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

Tu trouveras la liste complète des verbes disponibles dans la documentation du package de formatage.

fmt contient d'autres fonctions pour travailler avec les strings, comme Println, qui se contente d'afficher dans la console les arguments qu'elle reçoit, et Printf, qui met en forme l'entrée de la même façon que Sprintf avant de l'afficher.

Instructions

Il était une fois un programmeur excentrique qui vivait dans une étrange maison aux fenêtres à barreaux. Un jour, il a accepté un contrat proposé par un site d'offres d'emploi en ligne pour construire un robot de fête. Le robot est censé accueillir les gens et les aider à rejoindre leur place. La première édition était très technique et montrait le manque d'interaction humaine du programmeur. Certains de ces défauts se sont d'ailleurs retrouvés dans l'édition suivante.

1. Accueille un nouvel invité à la fête

Implémente la fonction Welcome pour renvoyer un message de bienvenue à partir du nom donné :

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

2. Accueille un nouvel invité à la fête dont c'est l'anniversaire aujourd'hui

Implémente la fonction HappyBirthday pour renvoyer un message d'anniversaire à partir du nom et de l'âge de la personne. Malheureusement, le programmeur est un peu frimeur, alors le robot doit démontrer qu'il connaît l'anniversaire de chaque invité.

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

3. Indique le chemin

Implémente la fonction AssignTable pour indiquer le chemin. Elle prend 5 paramètres.

  • Le nom du nouvel invité à accueillir (string)
  • Le numéro de table (int)
  • Le nom du voisin de table (string)
  • La direction dans laquelle trouver la table (string)
  • La distance jusqu'à la table (float64)

Le format exact du résultat est visible dans l'exemple ci-dessous.

Le robot indique le numéro de table sur 3 chiffres. Si le nombre compte moins de 3 chiffres, on lui ajoute des zéros devant pour atteindre 3 chiffres (par exemple 3 devient 003). Le robot indique aussi la distance de la table. Heureusement, avec une précision limitée à 1 chiffre.

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.
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Go Exercism

Prêt à commencer Robot de fête ?

Inscris-toi sur Exercism pour apprendre et maîtriser Go avec 34 concepts165 exercices, et un vrai mentorat humain, le tout gratuitement.