Rutas
/
Crystal
Crystal
/
Ejercicios
/
Robot de fiesta
Robot de fiesta

Robot de fiesta

Ejercicio de aprendizaje

Introducción

Crystal tiene un tipo conocido como String, que se usa para representar texto. Los strings de Crystal son secuencias de caracteres Unicode. Los strings son inmutables, lo que significa que no se pueden cambiar una vez creados. Esto quiere decir que cada vez que modificas un string se crea uno nuevo; por lo tanto, el string original no se modifica.

Para definir un string se usan comillas dobles ".

"Hello World"

Concatenación

Para concatenar dos strings, usa el operador +. El operador + devolverá un string nuevo que combina los dos strings.

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

Conversión entre strings y números

El método to_i convierte un string en un número entero. Como alternativa, se puede usar el método to_f para devolver un número de coma flotante. Si el string no se puede convertir en un número, se lanzará un ArgumentError.

"1".to_i
# => 1

"1.0".to_f
# => 1.0

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

Un número entero o un número de coma flotante se puede convertir en un string con el método to_s.

1.to_s
# => "1"

1.0.to_s
# => "1.0"

Interpolación

La interpolación es una forma cómoda de combinar strings e incrustar expresiones en strings. Para interpolar un string, puedes usar el carácter # seguido de llaves {} con la expresión dentro de las llaves.

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

Crystal convertirá automáticamente el resultado de la expresión en un string.

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

Tamaño

Cuando necesitas saber el número de caracteres de un string, puedes usar el método size, que devuelve la longitud del string como un número entero. El tamaño de un string es una propiedad almacenada del string, así que no tiene que calcular el tamaño cada vez que llamas al método, lo que lo hace muy rápido.

"Hello World".size
# => 11

Indexación

La indexación es cuando quieres obtener un carácter concreto de un string. Para obtener un carácter de un String, puedes usar la conocida notación de corchetes.

Note

[] se implementa como un método de instancia de String, donde el índice es el argumento del método.

En Crystal, el primer carácter de un string está en el índice 0.

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

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

Para obtener un carácter desde el final de un string, puedes tomar la longitud del string menos uno para obtener el índice del último carácter, y para obtener el penúltimo carácter, puedes tomar la longitud del string menos dos, y así sucesivamente. Hay un atajo para esto y consiste simplemente en usar un índice negativo, donde el último carácter está en el índice -1, el penúltimo carácter está en el índice -2, y así sucesivamente.

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

name[-1]
# => 'd'

Secuencias de escape

Algunos caracteres no se pueden escribir directamente en un string; en su lugar, tienes que usar una secuencia de escape. Por ejemplo, si quieres usar comillas dobles en un string, tienes que escapar las comillas dobles. Puedes usar el carácter \ para escribir una secuencia de escape seguida del carácter que quieres escapar.

Estos son los caracteres especiales de Crystal:

Valor Descripción
\a Alerta
\b Retroceso
\e Escape
\f Avance de página
\n Salto de línea
\r Retorno de carro
\t Tabulación horizontal
\v Tabulación vertical
\\ Barra invertida
\' Comilla simple
\" Comilla doble
\377 Carácter ASCII octal
\xFF Carácter ASCII hexadecimal
\uFFFF Carácter Unicode hexadecimal
puts "Hello \"World\""
# => Hello "World"

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

Strings de varias líneas

Para escribir un string de varias líneas, se usa la misma sintaxis que en un string de una sola línea, pero se pone en una línea nueva cada línea que quieras incluir en el string.

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

Instrucciones

Hubo una vez un programador excéntrico que vivía en una casa extraña con ventanas enrejadas. Un día aceptó un trabajo de un portal de empleo online para construir un robot de fiesta. Se supone que el robot debe saludar a la gente y acompañarla hasta su asiento. La primera edición era muy técnica y dejaba ver la falta de habilidades sociales del programador. Parte de eso también se coló en la siguiente edición.

1. Da la bienvenida a un nuevo invitado a la fiesta

Implementa el método welcome para devolver un mensaje de bienvenida usando el nombre dado:

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

2. Da la bienvenida a un nuevo invitado que cumple años hoy

Implementa el método happy_birthday para devolver un mensaje de cumpleaños usando el nombre y la edad de la persona. Por desgracia, al programador le gusta un poco presumir, así que el robot tiene que demostrar que conoce el cumpleaños de todos los invitados.

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

3. Indica cómo llegar

Implementa la función assign_table para indicar cómo llegar. Debe aceptar 5 parámetros.

  • El nombre del nuevo invitado al que hay que saludar (String)
  • El número de mesa (Int)
  • El nombre de la persona que se sentará al lado (String)
  • La dirección en la que está la mesa (String)
  • La distancia hasta la mesa (Float64)

El formato exacto del resultado puede verse en el ejemplo de abajo.

El nombre de la persona que se sienta al lado debe acortarse a la primera y la última letra del nombre. Frank se convierte en Fk, Christian en Cn, y así sucesivamente.

El robot indica el número de mesa. El robot también menciona la distancia hasta la mesa. Por suerte, solo con una precisión 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 en GitHub El enlace se abre en una ventana o pestaña nueva
Crystal Exercism

¿Listo para empezar Robot de fiesta?

Regístrate en Exercism para aprender y dominar Crystal con 26 conceptos142 ejercicios y mentoría humana real, todo gratis.