Tracks
/
Cairo
Cairo
/
Ejercicios
/
¡Te damos la bienvenida a Tech Palace!
¡Te damos la bienvenida a Tech Palace!

¡Te damos la bienvenida a Tech Palace!

Ejercicio de aprendizaje

Introducción

Cairo no tiene un tipo nativo para strings, pero ofrece dos formas de manejarlos: strings cortos con comillas simples y ByteArray con comillas dobles.

Un string corto es una cadena de caracteres ASCII donde cada carácter se codifica en un byte.

El tipo que Cairo usa para los strings cortos por defecto es felt252, lo que hace que su longitud máxima sea de solo 31 caracteres.

// below are different ways to write the same value
let name: felt252 = 'Jane';     // short string format
let name: felt252 = 0x4a616e65; // byte format
let name: felt252 = 1247899237; // decimal format

Técnicamente, cualquier tipo entero menor que felt252 se puede representar usando el formato de string corto.

// all of the below are equal u8 values, they are just written using different formats!
let lowercase_a_in_ascii: u8 = 'a';  // short string format
let lowercase_a_in_ascii: u8 = 0x61; // byte format
let lowercase_a_in_ascii: u8 = 97;   // decimal format

Para strings de más de 31 caracteres, Cairo ofrece ByteArray, que tiene una longitud ilimitada.

let long_string: ByteArray = "this is a string which has more than 31 characters";

Los ByteArrays se pueden concatenar con el operador +:

"Jane" + " " + "Austen"
// => "Jane Austen"

Algunos caracteres especiales necesitan escaparse con una barra invertida al inicio, como \t para un tabulador y \n para un salto de línea en los strings.

"How is the weather today?\nIt's sunny"  
// =>
// How is the weather today?
// It's sunny

Incluso puedes acceder a bytes individuales dentro de un ByteArray usando su índice.

¡Pero ten cuidado, el tipo del byte devuelto es u8 y no ByteArray!

let hello: ByteArray = "Hello World!";
let exclamation_mark: u8 = hello[11];
// => 33

La biblioteca core ofrece muchos métodos y operadores útiles para trabajar con ByteArrays.

Para más información sobre los métodos de ByteArray, consulta la documentación de ByteArrayTrait.

Aquí tienes algunos ejemplos:

let name: felt252 = 'Jane';
let mut greeting: ByteArray = "Welcome ";

// append_word appends a single word of a given number of bytes to the end of the ByteArray 
greeting.append_word(name, 4);
// => "Welcome Jane"

// rev returns a ByteArray with the all characters reversed
let rev_greeting = greeting.rev();
// => "enaJ emocleW"

Instrucciones

Cerca hay una tienda de electrodomésticos llamada «Tech Palace». El dueño de la tienda instaló hace poco una gran pantalla para mostrar mensajes publicitarios y para dar un saludo especial cuando los clientes escanean sus tarjetas de fidelidad en la entrada. La pantalla se compone de muchas luces LED pequeñas y puede mostrar varias líneas de texto.

El dueño de la tienda necesita tu ayuda con el código que se usa para generar el texto de la nueva pantalla.

1. Crea el mensaje de bienvenida

Para la mayoría de los clientes que escanean sus tarjetas de fidelidad, el dueño de la tienda quiere ver en la pantalla Welcome to the Tech Palace, seguido del nombre del cliente en letras mayúsculas.

Implementa la función welcome_message que acepta el nombre del cliente como un argumento string corto (felt252) y devuelve el mensaje deseado como un ByteArray.

welcome_message("Judy")
// => Welcome to the Tech Palace, JUDY

2. Agrega un borde llamativo

Para los clientes leales que compran mucho en la tienda, el dueño quiere que la pantalla de bienvenida sea más vistosa agregando una línea de estrellas antes y después del mensaje de bienvenida. Todavía no se ha decidido cuántas estrellas deben ir en las líneas, así que quiere que eso sea configurable.

Escribe una función add_border que acepta un mensaje de bienvenida (un ByteArray) y la cantidad de estrellas por línea (de tipo u32) como argumentos. Debe devolver un ByteArray que consta de 3 líneas: una línea con la cantidad de estrellas deseada, luego el mensaje de bienvenida tal como se recibió y, por último, otra línea de estrellas.

add_border("Welcome!", 10)

Debe devolver lo siguiente:

**********
Welcome!
**********

3. Limpia los antiguos mensajes publicitarios

Antes de instalar esta nueva pantalla, la tienda tenía una pantalla parecida que solo podía mostrar líneas estáticas y no configurables. El dueño quiere reutilizar algunos de los antiguos mensajes publicitarios en la nueva pantalla. Sin embargo, los datos ya incluyen un borde de estrellas y algunos espacios en blanco indeseados. Tu tarea es limpiar los mensajes para que se puedan reutilizar.

Implementa una función clean_up_message que acepta el antiguo mensaje publicitario como un ByteArray. La función debe eliminar primero todas las estrellas del texto y, después, quitar los espacios en blanco al principio y al final del texto restante. Luego, la función debe devolver el mensaje ya limpio.

let message: ByteArray = "
**************************
*    BUY NOW, SAVE 10%   *
**************************
";

clean_up_message(message)
// => BUY NOW, SAVE 10%
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Cairo Exercism

¿Todo listo para empezar ¡Te damos la bienvenida a Tech Palace!?

Regístrate en Exercism para aprender y dominar Cairo con 25 conceptos68 ejercicios y mentoría humana real, todo gratis.