Track
/
Crystal
Crystal
/
Esercizi
/
Robot da festa
Robot da festa

Robot da festa

Esercizio di apprendimento

Introduzione

Crystal ha un tipo noto come String, usato per rappresentare il testo. Le stringhe di Crystal sono sequenze di caratteri Unicode. Le stringhe sono immutabili: una volta create non possono essere modificate. Questo significa che ogni volta che modifichi una stringa ne viene creata una nuova; quindi la stringa originale non viene modificata.

Per definire una stringa si usano le virgolette doppie ".

"Hello World"

Concatenazione

Per concatenare due stringhe, usa l'operatore +. L'operatore + restituisce una nuova stringa che combina le due stringhe.

hello = "Hello"
hello + " World"
# => "Hello World"

Conversione tra stringhe e numeri

Il metodo to_i converte una stringa in un numero intero. In alternativa, il metodo to_f può essere usato per ottenere un numero in virgola mobile. Se la stringa non può essere convertita in un numero, viene sollevato un ArgumentError.

"1".to_i
# => 1

"1.0".to_f
# => 1.0

"Hello".to_i
# => ArgumentError: Invalid integer: Hello

Un numero intero o un numero in virgola mobile può essere convertito in una stringa usando il metodo to_s.

1.to_s
# => "1"

1.0.to_s
# => "1.0"

Interpolazione

L'interpolazione è un modo comodo per combinare stringhe e incorporare espressioni nelle stringhe. Per interpolare una stringa, puoi usare il carattere # seguito da parentesi graffe {} con l'espressione all'interno delle parentesi.

name = "World"
"Hello #{name}!"
# => "Hello World!"

Crystal converte automaticamente il risultato dell'espressione in una stringa.

"Hello #{1 + 1}!"
# => "Hello 2!"

Dimensione

Quando hai bisogno di sapere il numero di caratteri in una stringa, puoi usare il metodo size, che restituisce la lunghezza della stringa come numero intero. La dimensione di una stringa è una proprietà memorizzata della stringa, quindi non è necessario calcolarla ogni volta che chiami il metodo: questo la rende molto veloce.

"Hello World".size
# => 11

Indicizzazione

L'indicizzazione è quando vuoi ottenere un carattere specifico da una stringa. Per ottenere un carattere da una String puoi usare la solita notazione con parentesi quadre.

Note

[] è implementato come metodo di istanza di String, dove l'indice è l'argomento del metodo.

In Crystal, il primo carattere di una stringa è all'indice 0.

"Hello World"[0]
# => 'H'

"Hello World"[6]
# => 'W'

Per ottenere un carattere dalla fine di una stringa, puoi prendere la lunghezza della stringa meno uno per ottenere l'indice dell'ultimo carattere, e per ottenere il penultimo carattere, puoi prendere la lunghezza della stringa meno due, e così via. Esiste una scorciatoia: basta usare un indice negativo, dove l'ultimo carattere è all'indice -1, il penultimo è all'indice -2, e così via.

name = "Hello World"
name[name.size - 1]
# => 'd'

name[-1]
# => 'd'

Sequenze di escape

Alcuni caratteri non possono essere scritti direttamente in una stringa: devi usare una sequenza di escape. Per esempio, se vuoi usare le virgolette doppie in una stringa, devi fare l'escape delle virgolette doppie. Puoi usare il carattere \ per scrivere una sequenza di escape seguita dal carattere di cui vuoi fare l'escape.

Questi sono i caratteri speciali in Crystal:

Valore Descrizione
\a Avviso
\b Backspace
\e Escape
\f Avanzamento modulo
\n Avanzamento riga o nuova riga
\r Ritorno carrello
\t Tabulazione orizzontale
\v Tabulazione verticale
\\ Barra rovesciata
\' Virgoletta singola
\" Virgoletta doppia
\377 Carattere ASCII ottale
\xFF Carattere ASCII esadecimale
\uFFFF Carattere Unicode esadecimale
puts "Hello \"World\""
# => Hello "World"

puts "Hello \nWorld"
# => Hello
# => World

Stringhe multilinea

Per scrivere una stringa multilinea, usi la stessa sintassi di una stringa su una sola riga, ma vai a capo per ogni riga che vuoi includere nella stringa.

"Hello
World"
# => "Hello\nWorld"

Istruzioni

C'era una volta un programmatore eccentrico che viveva in una strana casa con le finestre sbarrate. Un giorno accettò un incarico da una bacheca di annunci di lavoro online per costruire un robot per le feste. Il robot dovrebbe salutare le persone e accompagnarle al loro posto. La prima edizione era molto tecnica e mostrava la scarsa capacità del programmatore di interagire con gli esseri umani. Alcune di queste caratteristiche sono confluite anche nell'edizione successiva.

1. Dai il benvenuto a un nuovo invitato alla festa

Implementa il metodo welcome in modo che restituisca un messaggio di benvenuto usando il nome fornito:

PartyRobot.welcome("Christiane")
# => Welcome to my party, Christiane!

2. Dai il benvenuto a un nuovo invitato alla festa che oggi compie gli anni

Implementa il metodo happy_birthday in modo che restituisca un messaggio di compleanno 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.

PartyRobot.happy_birthday("Frank", 58)
# => Happy birthday Frank! You are now 58 years old!

3. Dai le indicazioni

Implementa la funzione assign_table per dare le indicazioni. Dovrebbe accettare 5 parametri.

  • Il nome del nuovo invitato da salutare (String)
  • Il numero del tavolo (Int)
  • Il nome della persona che siede accanto (String)
  • La direzione in cui trovare il tavolo (String)
  • La distanza dal tavolo (Float64)

Il formato esatto del risultato è visibile nell'esempio qui sotto.

Il nome della persona che siede accanto va abbreviato con la prima e l'ultima lettera del nome. Frank diventa Fk, Christian diventa Cn, e così via.

Il robot fornisce il numero del tavolo. Il robot menziona anche la distanza del tavolo. Fortunatamente solo con una precisione limitata a 1 cifra.

PartyRobot.assign_table("Christiane", "on the left", 27, 23.7834298, "Frank")
# =>
# Welcome to my party, Christiane!
# You have been assigned to table 27. Your table is on the left, exactly 23.8 meters from here.
# You will be sitting next to Fk.
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Crystal Exercism

Vuoi iniziare Robot da festa?

Iscriviti a Exercism per imparare e padroneggiare Crystal con 26 concetti142 esercizi e il mentoring di persone reali, tutto gratis.