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

Robot de fête

Exercice d'apprentissage

Introduction

Crystal dispose d'un type appelé String, qui sert à représenter du texte. Les strings de Crystal sont des séquences de caractères Unicode. Les strings sont immuables, ce qui signifie qu'elles ne peuvent pas être modifiées après leur création. Cela signifie qu'une nouvelle string est créée chaque fois que l'on modifie une string ; par conséquent, la string d'origine n'est pas modifiée.

Pour définir une string, on utilise des guillemets doubles ".

"Hello World"

Concaténation

Pour concaténer deux strings, on utilise l'opérateur +. L'opérateur + renvoie une nouvelle string qui combine les deux strings.

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

Conversation entre strings et nombres

La méthode to_i convertit une string en entier. Sinon, on peut utiliser la méthode to_f pour obtenir un nombre à virgule flottante. Si la conversion de la string en nombre est impossible, une exception ArgumentError sera levée.

"1".to_i
# => 1

"1.0".to_f
# => 1.0

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

Un entier ou un nombre à virgule flottante peut être converti en string à l'aide de la méthode to_s.

1.to_s
# => "1"

1.0.to_s
# => "1.0"

Interpolation

L'interpolation est un moyen pratique de combiner des strings et d'intégrer des expressions dans des strings. Pour interpoler une string, on utilise le caractère # suivi d'accolades {}, avec l'expression à l'intérieur des accolades.

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

Crystal convertit automatiquement le résultat de l'expression en string.

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

Taille

Lorsque tu as besoin de connaître le nombre de caractères d'une string, tu peux utiliser la méthode size, qui renvoie la longueur de la string sous forme d'entier. La taille d'une string est une propriété stockée de la string, donc la taille n'a pas besoin d'être calculée chaque fois que tu appelles la méthode, ce qui la rend très rapide.

"Hello World".size
# => 11

Indexation

L'indexation consiste à récupérer un caractère précis dans une string. Pour récupérer un caractère d'une String, tu peux utiliser la notation habituelle entre crochets.

Note

[] est implémenté comme une méthode d'instance de String, où l'indice est l'argument de la méthode.

Le premier caractère d'une string se trouve à l'indice 0.

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

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

Pour obtenir un caractère depuis la fin d'une string, tu peux prendre la longueur de la string moins un pour obtenir l'indice du dernier caractère, et pour obtenir l'avant-dernier caractère, tu peux prendre la longueur de la string moins deux, et ainsi de suite. Il existe un raccourci pour cela : utiliser simplement un indice négatif, où le dernier caractère se trouve à l'indice -1, l'avant-dernier à l'indice -2, et ainsi de suite.

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

name[-1]
# => 'd'

Échappement

Certains caractères ne peuvent pas être écrits directement dans une string ; à la place, il faut utiliser une séquence d'échappement. Par exemple, si tu veux utiliser des guillemets doubles dans une string, tu dois échapper ces guillemets doubles. Tu peux utiliser le caractère \ pour écrire une séquence d'échappement suivie du caractère que tu veux échapper.

Voici les caractères spéciaux en Crystal :

Value Description
\a Alerte
\b Retour arrière
\e Échappement
\f Saut de page
\n Saut de ligne ou nouvelle ligne
\r Retour chariot
\t Tabulation horizontale
\v Tabulation verticale
\\ Barre oblique inversée
\' Guillemet simple
\" Guillemet double
\377 Caractère ASCII octal
\xFF Caractère ASCII hexadécimal
\uFFFF Caractère Unicode hexadécimal
puts "Hello \"World\""
# => Hello "World"

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

Strings multilignes

Pour écrire une string sur plusieurs lignes, tu utilises la même syntaxe que pour une string sur une seule ligne, mais tu passes à la ligne pour chaque ligne que tu veux dans la string.

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

Instructions

Il était une fois un programmeur excentrique qui vivait dans une étrange maison aux fenêtres munies de barreaux. Un jour, il accepta une mission proposée par un site d'offres d'emploi en ligne : 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 trahissait le manque de contact humain du programmeur. Certains de ces traits se sont d'ailleurs retrouvés dans l'édition suivante.

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

Implémente la méthode welcome pour renvoyer un message d'accueil à partir du nom donné :

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

2. Accueille un nouvel invité dont c'est l'anniversaire aujourd'hui

Implémente la méthode happy_birthday pour renvoyer un message d'anniversaire à partir du nom et de l'âge de la personne. Malheureusement, le programmeur aime un peu trop se mettre en avant, alors le robot doit démontrer qu'il connaît l'anniversaire de chaque invité.

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

3. Indique le chemin

Implémente la fonction assign_table pour indiquer le chemin. Elle doit accepter 5 paramètres.

  • Le nom du nouvel invité à accueillir (String)
  • Le numéro de la table (Int)
  • Le nom du voisin de table (String)
  • La direction où trouver la table (String)
  • La distance jusqu'à la table (Float64)

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

Le nom du voisin de table doit être réduit à la première et à la dernière lettre du nom. Frank devient Fk, Christian devient Cn, et ainsi de suite.

Le robot indique le numéro de la table. Le robot mentionne aussi la distance de la table. Heureusement, avec une précision limitée à 1 chiffre.

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

Prêt à commencer Robot de fête ?

Inscris-toi sur Exercism pour apprendre et maîtriser Crystal avec 26 concepts142 exercices, et un vrai mentorat humain, le tout gratuitement.