Tracks
/
Crystal
Crystal
/
Ejercicios
/
Robot fiestero
Robot fiestero

Robot fiestero

Ejercicio de aprendizaje

Introducción

Crystal tiene un tipo llamado String, que se usa para representar texto: una cadena de caracteres. 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 se crea un string nuevo cada vez que modificas un string; por lo tanto, el string original no se modifica.

Para definir un string usas comillas dobles ".

"Hello World"

Concatenación

Para concatenar dos strings, usa el operador +. El operador + devuelve 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 entero. Como alternativa, puedes usar el método to_f para obtener un número de punto 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 entero o un número de punto flotante se puede convertir en un string usando el método to_s.

1.to_s
# => "1"

1.0.to_s
# => "1.0"

Interpolación

La interpolación es una forma práctica de combinar strings e incrustar expresiones dentro de un string. 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 convierte automáticamente el resultado de la expresión en un string.

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

Tamaño

Cuando necesitas saber cuántos caracteres tiene un string, puedes usar el método size, que devuelve la longitud del string como un 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 específico de un string. Para obtener un carácter de un String puedes usar la conocida notación de corchetes.

Note

[] está implementado como un método de instancia de String, donde el índice es el argumento del método.

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; para el penúltimo carácter, tomas la longitud del string menos dos, y así sucesivamente. Hay un atajo para esto, y es simplemente usar un índice negativo: el último carácter está en el índice -1, el penúltimo 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 dentro de un string, tienes que escapar las comillas dobles. Puedes usar el carácter \ para escribir una secuencia de escape, seguido del carácter que quieres escapar.

Estos son los caracteres especiales en 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, usas la misma sintaxis que para un string de una sola línea, pero haces un salto de línea por cada línea que quieras incluir en el string.

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

Instrucciones

Había 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 en línea para construir un robot de fiesta. Se supone que el robot saluda a las personas y las ayuda a llegar a sus asientos. La primera edición era muy técnica y dejaba ver la falta de habilidades sociales del programador. Algunas de esas fallas también llegaron a 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 dados de la persona. Lamentablemente, el programador es un poco presumido, así que el robot tiene que demostrar que conoce el cumpleaños de cada invitado.

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

3. Da indicaciones

Implementa la función assign_table para dar indicaciones. Debe aceptar 5 parámetros.

  • El nombre del nuevo invitado a quien saludar (String)
  • El número de la mesa (Int)
  • El nombre de la persona que se sienta al lado (String)
  • La dirección en la que se encuentra la mesa (String)
  • La distancia a la mesa (Float64)

El formato exacto del resultado se puede ver 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 proporciona el número de la mesa. El robot también menciona la distancia a la mesa. Afortunadamente, 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 una pestaña nuevas
Crystal Exercism

¿Todo listo para empezar Robot fiestero?

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