Track
/
Go
Go
/
Esercizi
/
Robot da festa
Robot da festa

Robot da festa

Esercizio di apprendimento

Introduzione

Pacchetti

In Go un'applicazione è organizzata in pacchetti. Un pacchetto è una raccolta di file sorgente che si trovano nella stessa cartella. Tutti i file sorgente di una cartella devono avere lo stesso nome di pacchetto in cima al file. Per convenzione, i pacchetti prendono il nome della cartella in cui si trovano.

package greeting

Go fornisce un'ampia libreria standard di pacchetti, che puoi usare con la parola chiave import. I pacchetti della libreria standard si importano usando il loro nome.

package greeting

import "fmt"

A un pacchetto importato ci si riferisce poi con il nome del pacchetto:

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

Go stabilisce se un elemento può essere chiamato dal codice di altri pacchetti in base a come è dichiarato. Per rendere una funzione, un tipo, una variabile, una costante o un campo di una struct visibile dall'esterno (noto come exported), il nome deve iniziare con una lettera maiuscola.

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
}

Formattazione delle stringhe

Go fornisce un pacchetto integrato chiamato fmt (il pacchetto di formattazione), che offre varie funzioni per manipolare il formato dell'input e dell'output. La funzione più usata è Sprintf, che usa verbi come %s per interpolare valori in una stringa e restituisce quella stringa.

import "fmt"

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

In Go, i numeri in virgola mobile si formattano comodamente con i verbi di Sprintf: %g (rappresentazione compatta), %e (esponente) o %f (senza esponente). Tutti e tre i verbi permettono di controllare la larghezza del campo e la posizione numerica.

import "fmt"

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

Puoi trovare un elenco completo dei verbi disponibili nella documentazione del pacchetto format.

fmt contiene altre funzioni per lavorare con le stringhe, come Println, che si limita a stampare sulla console gli argomenti che riceve, e Printf, che formatta l'input allo stesso modo di Sprintf prima di stamparlo.

Istruzioni

C'era una volta un programmatore eccentrico che viveva in una strana casa con le finestre sbarrate. Un giorno accettò un incarico da un portale di annunci online per costruire un robot da festa. Il robot dovrebbe accogliere gli invitati e accompagnarli ai loro posti. La prima edizione era molto tecnica e mostrava la scarsa capacità del programmatore di interagire con gli esseri umani. E parte di tutto ciò è finito anche nell'edizione successiva.

1. Accogli un nuovo invitato alla festa

Implementa la funzione Welcome in modo che restituisca un messaggio di benvenuto usando il nome fornito:

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

2. Accogli un nuovo invitato alla festa che compie gli anni oggi

Implementa la funzione HappyBirthday in modo che restituisca un messaggio di auguri usando il nome e l'età della persona. Purtroppo il programmatore è un po' un esibizionista, quindi il robot deve dimostrare di conoscere il compleanno di ogni invitato.

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

3. Indica la direzione

Implementa la funzione AssignTable per indicare la direzione. Dovrebbe accettare 5 parametri.

  • Il nome del nuovo invitato da accogliere (string)
  • Il numero del tavolo (int)
  • Il nome del vicino di posto (string)
  • La direzione in cui trovare il tavolo (string)
  • La distanza dal tavolo (float64)

Il formato esatto del risultato si può vedere nell'esempio qui sotto.

Il robot fornisce il numero del tavolo in un formato a 3 cifre. Se il numero ha meno di 3 cifre, riceve degli zeri iniziali aggiuntivi per arrivare a 3 cifre (ad esempio 3 diventa 003). Il robot menziona anche la distanza del tavolo. Fortunatamente solo con una precisione limitata a 1 cifra.

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.
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Go Exercism

Vuoi iniziare Robot da festa?

Iscriviti a Exercism per imparare e padroneggiare Go con 34 concetti165 esercizi e il mentoring di persone reali, tutto gratis.