Trilhas
/
Crystal
Crystal
/
Exercícios
/
Robô de festa
Robô de festa

Robô de festa

Exercício de aprendizagem

Introdução

O Crystal tem um tipo conhecido como String, usado para representar texto. As strings do Crystal são sequências de caracteres Unicode. As strings são imutáveis, ou seja, não podem ser alteradas depois de criadas. Isso significa que uma nova string é criada toda vez que você modifica uma string; portanto, a string original não é alterada.

Para definir uma string, você usa aspas duplas ".

"Hello World"

Concatenação

Para concatenar duas strings, use o operador +. O operador + retorna uma nova string, combinando as duas strings.

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

Conversão entre strings e números

O método to_i converte uma string em um número inteiro. Como alternativa, o método to_f pode ser usado para retornar um número de ponto flutuante. Se a string não puder ser convertida em número, um ArgumentError será lançado.

"1".to_i
# => 1

"1.0".to_f
# => 1.0

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

Um número inteiro ou de ponto flutuante pode ser convertido em uma string usando o método to_s.

1.to_s
# => "1"

1.0.to_s
# => "1.0"

Interpolação

A interpolação é uma forma prática de combinar strings e embutir expressões em strings. Para interpolar uma string, você pode usar o caractere # seguido de chaves {}, com a expressão dentro das chaves.

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

O Crystal converte automaticamente o resultado da expressão em uma string.

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

Tamanho

Quando você precisa saber o número de caracteres de uma string, pode usar o método size, que retorna o tamanho da string como um número inteiro. O tamanho de uma string é uma propriedade armazenada da própria string, então não é preciso calculá-lo toda vez que você chama o método, o que o torna muito rápido.

"Hello World".size
# => 11

Indexação

Indexação é quando você quer obter um caractere específico de uma string. Para obter um caractere de uma String, você pode usar a conhecida notação de colchetes.

Note

[] é implementado como um método de instância de String, em que o índice é o argumento do método.

O primeiro caractere de uma string está no índice 0.

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

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

Para obter um caractere do final de uma string, você pode pegar o tamanho da string menos um para chegar ao índice do último caractere; para o penúltimo caractere, o tamanho menos dois, e assim por diante. Existe um atalho para isso: basta usar um índice negativo, em que o último caractere está no índice -1, o penúltimo no índice -2, e assim por diante.

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

name[-1]
# => 'd'

Escape

Alguns caracteres não podem ser escritos diretamente em uma string; nesse caso, você precisa usar uma sequência de escape. Por exemplo, se você quiser usar aspas duplas em uma string, precisa escapar as aspas duplas. Você pode usar o caractere \ para escrever uma sequência de escape, seguido do caractere que quer escapar.

Estes são os caracteres especiais no Crystal:

Valor Descrição
\a Alerta
\b Backspace
\e Escape
\f Avanço de formulário
\n Avanço de linha ou nova linha
\r Retorno de carro
\t Tabulação horizontal
\v Tabulação vertical
\\ Barra invertida
\' Aspas simples
\" Aspas duplas
\377 Caractere ASCII octal
\xFF Caractere ASCII hexadecimal
\uFFFF Caractere Unicode hexadecimal
puts "Hello \"World\""
# => Hello "World"

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

Strings multilinha

Para escrever uma string multilinha, use a mesma sintaxe de uma string de uma linha só, mas pule uma linha para cada linha que você quer na string.

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

Instruções

Era uma vez um programador excêntrico que morava numa casa estranha com grades nas janelas. Um dia, ele aceitou um trabalho de um site de vagas para construir um robô de festa. O robô deve cumprimentar as pessoas e ajudá-las a encontrar seus lugares. A primeira edição era muito técnica e mostrava o quanto o programador tinha pouca habilidade de convívio humano. Algumas dessas características também foram parar na edição seguinte.

1. Dê boas-vindas a um novo convidado da festa

Implemente o método welcome para retornar uma mensagem de boas-vindas usando o nome recebido:

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

2. Dê boas-vindas a um novo convidado da festa que faz aniversário hoje

Implemente o método happy_birthday para retornar uma mensagem de aniversário usando o nome e a idade da pessoa. Infelizmente, o programador é um pouco exibido, então o robô precisa demonstrar que sabe o aniversário de cada convidado.

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

3. Indique o caminho

Implemente a função assign_table para indicar o caminho. Ela deve aceitar 5 parâmetros.

  • O nome do novo convidado a cumprimentar (String)
  • O número da mesa (Int)
  • O nome do vizinho de mesa (String)
  • A direção onde encontrar a mesa (String)
  • A distância até a mesa (Float64)

O formato exato do resultado pode ser visto no exemplo abaixo.

O nome do vizinho de mesa deve ser abreviado para a primeira e a última letra do nome. Frank vira Fk, Christian vira Cn, e assim por diante.

O robô informa o número da mesa. O robô também menciona a distância até a mesa. Felizmente, com uma precisão limitada a 1 dígito.

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.
Editar via GitHub O link abre em uma nova janela ou aba
Crystal Exercism

Tudo pronto para começar Robô de festa?

Crie sua conta no Exercism para aprender e dominar Crystal com 26 conceitos142 exercícios e mentoria humana de verdade, tudo de graça.