Percursos
/
Cairo
Cairo
/
Exercícios
/
Bem-vindo ao Tech Palace!
Bem-vindo ao Tech Palace!

Bem-vindo ao Tech Palace!

Exercício de aprendizagem

Introdução

Cairo não tem um tipo nativo para strings, mas oferece duas formas de lidar com elas: strings curtas com aspas simples e ByteArray com aspas duplas.

Uma string curta é uma string ASCII em que cada caráter é codificado num único byte.

O tipo que Cairo usa por predefinição para strings curtas é felt252, o que faz com que o seu comprimento máximo seja apenas 31 carateres.

// 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

Tecnicamente, qualquer tipo inteiro menor do que felt252 pode ser representado com o formato de string curta.

// 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 com mais de 31 carateres, Cairo disponibiliza ByteArray, que tem um comprimento ilimitado.

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

Os ByteArrays podem ser concatenados através do operador +:

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

Alguns carateres especiais têm de ser escapados com uma barra invertida, como \t para uma tabulação e \n para uma nova linha em strings.

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

Podes até aceder a bytes individuais dentro de um ByteArray através do seu índice.

Tem cuidado, no entanto: o tipo do byte devolvido é u8 e não ByteArray!

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

A biblioteca principal disponibiliza muitos métodos e operadores úteis para trabalhar com ByteArrays.

Para mais informações sobre os métodos de ByteArray, consulta a documentação de ByteArrayTrait.

Aqui estão alguns exemplos:

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"

Instruções

Há uma loja de eletrodomésticos chamada "Tech Palace" aqui perto. A dona da loja instalou recentemente um grande ecrã para usar em mensagens publicitárias e para mostrar uma saudação especial quando os clientes passam os cartões de fidelização à entrada. O ecrã é composto por muitas pequenas luzes LED e consegue mostrar várias linhas de texto.

A dona da loja precisa da tua ajuda com o código que é usado para gerar o texto do novo ecrã.

1. Cria a mensagem de boas-vindas

Para a maioria dos clientes que passam os cartões de fidelização, a dona da loja quer ver Welcome to the Tech Palace, seguido do nome do cliente em letras maiúsculas no ecrã.

Implementa a função welcome_message que aceita o nome do cliente como argumento, uma string curta (felt252), e devolve a mensagem pretendida como uma ByteArray.

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

2. Acrescenta uma moldura vistosa

Para os clientes fiéis que compram muito na loja, a dona quer que o ecrã de boas-vindas fique mais vistoso, acrescentando uma linha de estrelas antes e depois da mensagem de boas-vindas. Ainda não sabe ao certo quantas estrelas devem estar nas linhas, por isso quer que isso seja configurável.

Escreve uma função add_border que aceita como argumentos uma mensagem de boas-vindas (uma ByteArray) e o número de estrelas por linha (do tipo u32). Deve devolver uma ByteArray composta por 3 linhas: uma linha com o número de estrelas pretendido, depois a mensagem de boas-vindas tal como foi recebida e, por fim, outra linha de estrelas.

add_border("Welcome!", 10)

Deve devolver o seguinte:

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

3. Limpa as mensagens publicitárias antigas

Antes de instalar este novo ecrã, a loja tinha um ecrã semelhante que só conseguia mostrar linhas estáticas e não configuráveis. A dona gostaria de reutilizar algumas das mensagens publicitárias antigas no novo ecrã. No entanto, os dados já incluem uma moldura de estrelas e alguns espaços em branco indesejados. A tua tarefa é limpar as mensagens para que possam ser reutilizadas.

Implementa uma função clean_up_message que aceita a mensagem publicitária antiga como uma ByteArray. A função deve primeiro remover todas as estrelas do texto e, depois, remover os espaços em branco no início e no fim do texto restante. A função deve depois devolver a mensagem limpa.

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

clean_up_message(message)
// => BUY NOW, SAVE 10%
Editar via GitHub A ligação abre numa nova janela ou separador
Cairo Exercism

Estás pronto para começar Bem-vindo ao Tech Palace!?

Inscreve-te no Exercism para aprenderes e dominares Cairo com 25 conceitos68 exercícios, e mentoria humana real, tudo grátis.