Trilhas
/
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 usando aspas simples e ByteArray usando aspas duplas.

Uma string curta é uma string ASCII em que cada caractere é codificado em um byte.

O tipo que o Cairo usa para strings curtas por padrão é felt252, o que faz com que o comprimento máximo seja de apenas 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

Tecnicamente, qualquer tipo inteiro menor que felt252 pode ser representado usando 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 caracteres, o Cairo oferece o ByteArray, que tem comprimento ilimitado.

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

ByteArrays podem ser concatenados com o operador +:

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

Alguns caracteres especiais precisam ser escapados com uma barra invertida no início, como \t para uma tabulação e \n para uma quebra de linha em strings.

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

Você pode até acessar bytes individuais dentro de um ByteArray usando o índice dele.

Mas atenção: o tipo do byte retornado é u8, e não ByteArray!

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

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

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

Veja 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. O dono da loja instalou recentemente um grande painel para usar em mensagens de marketing e para mostrar uma saudação especial quando os clientes passam o cartão de fidelidade na entrada. O painel é formado por muitas luzes de LED pequenas e pode mostrar várias linhas de texto.

O dono da loja precisa da sua ajuda com o código usado para gerar o texto do novo painel.

1. Crie a mensagem de boas-vindas

Para a maioria dos clientes que passam o cartão de fidelidade, o dono da loja quer ver Welcome to the Tech Palace, seguido do nome do cliente em letras maiúsculas no painel.

Implemente a função welcome_message que aceita o nome do cliente como argumento de string curta (felt252) e retorna a mensagem desejada como um ByteArray.

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

2. Adicione uma borda chique

Para os clientes fiéis que compram bastante na loja, o dono quer deixar o painel de boas-vindas mais chique, adicionando uma linha de estrelas antes e depois da mensagem de boas-vindas. Ele ainda não decidiu quantas estrelas deve haver nas linhas, então quer que essa quantidade seja configurável.

Escreva uma função add_border que aceita uma mensagem de boas-vindas (um ByteArray) e o número de estrelas por linha (do tipo u32) como argumentos. Ela deve retornar um ByteArray com 3 linhas: uma linha com o número desejado de estrelas, depois a mensagem de boas-vindas como foi passada e, por fim, outra linha de estrelas.

add_border("Welcome!", 10)

Deve retornar o seguinte:

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

3. Limpe mensagens de marketing antigas

Antes de instalar esse novo painel, a loja tinha um painel parecido que só mostrava linhas estáticas e não configuráveis. O dono gostaria de reaproveitar algumas das mensagens de marketing antigas no novo painel. Porém, os dados já incluem uma borda de estrelas e alguns espaços em branco indesejados. Sua tarefa é limpar as mensagens para que possam ser reaproveitadas.

Implemente uma função clean_up_message que aceita a mensagem de marketing antiga como um ByteArray. A função deve primeiro remover todas as estrelas do texto e, depois, remover os espaços em branco do início e do fim do texto restante. Em seguida, a função deve retornar a mensagem limpa.

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

clean_up_message(message)
// => BUY NOW, SAVE 10%
Editar via GitHub O link abre em uma nova janela ou aba
Cairo Exercism

Tudo pronto para começar Bem-vindo ao Tech Palace!?

Crie sua conta no Exercism para aprender e dominar Cairo com 25 conceitos68 exercícios e mentoria humana de verdade, tudo de graça.