Track
/
Cairo
Cairo
/
Esercizi
/
Benvenuto al Tech Palace!
Benvenuto al Tech Palace!

Benvenuto al Tech Palace!

Esercizio di apprendimento

Introduzione

Cairo non ha un tipo nativo per le stringhe, ma offre due modi per gestirle: stringhe corte con virgolette singole e ByteArray con virgolette doppie.

Una stringa corta è una stringa ASCII in cui ogni carattere è codificato su un byte.

Il tipo che Cairo usa per le stringhe corte per impostazione predefinita è felt252, il che rende la loro lunghezza massima di soli 31 caratteri.

// 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, qualsiasi tipo intero più piccolo di felt252 può essere rappresentato usando il formato stringa corta.

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

Per stringhe più lunghe di 31 caratteri, Cairo fornisce ByteArray, che ha una lunghezza illimitata.

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

I ByteArray possono essere concatenati tramite l'operatore +:

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

Alcuni caratteri speciali devono essere preceduti da una barra rovesciata, come \t per una tabulazione e \n per una nuova riga nelle stringhe.

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

Puoi persino accedere ai singoli byte all'interno di un ByteArray usando il suo indice.

Fai attenzione però: il tipo del byte restituito è u8 e non ByteArray!

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

La libreria principale fornisce molti metodi e operatori utili per lavorare con i ByteArray.

Per maggiori informazioni sui metodi di ByteArray, consulta la documentazione di ByteArrayTrait.

Ecco alcuni esempi:

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"

Istruzioni

Nei paraggi c'è un negozio di elettrodomestici chiamato «Tech Palace». Il proprietario del negozio ha recentemente installato un grande display da usare per i messaggi di marketing e per mostrare un saluto speciale quando i clienti scansionano la carta fedeltà all'ingresso. Il display è composto da tante piccole luci LED e può mostrare più righe di testo.

Il proprietario del negozio ha bisogno del tuo aiuto con il codice che serve a generare il testo per il nuovo display.

1. Crea il messaggio di benvenuto

Per la maggior parte dei clienti che scansionano la carta fedeltà, il proprietario del negozio vuole vedere sul display Welcome to the Tech Palace, seguito dal nome del cliente in lettere maiuscole.

Implementa la funzione welcome_message che accetta come argomento il nome del cliente, una stringa breve (felt252), e restituisce il messaggio desiderato come ByteArray.

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

2. Aggiungi un bordo decorativo

Per i clienti fedeli che acquistano molto nel negozio, il proprietario vuole che il display di benvenuto sia più elaborato, aggiungendo una riga di stelle prima e dopo il messaggio di benvenuto. Non è ancora sicuro di quante stelle debbano esserci nelle righe, quindi vuole che il numero sia configurabile.

Scrivi una funzione add_border che accetta come argomenti un messaggio di benvenuto (un ByteArray) e il numero di stelle per riga (di tipo u32). Deve restituire un ByteArray composto da 3 righe: una riga con il numero di stelle desiderato, poi il messaggio di benvenuto così com'è stato passato, poi un'altra riga di stelle.

add_border("Welcome!", 10)

Dovrebbe restituire quanto segue:

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

3. Ripulisci i vecchi messaggi di marketing

Prima di installare questo nuovo display, il negozio ne aveva uno simile che poteva mostrare solo righe statiche e non configurabili. Il proprietario vorrebbe riutilizzare alcuni dei vecchi messaggi di marketing sul nuovo display. Tuttavia, i dati includono già un bordo di stelle e qualche spazio bianco indesiderato. Il tuo compito è ripulire i messaggi in modo che possano essere riutilizzati.

Implementa una funzione clean_up_message che accetta il vecchio messaggio di marketing come ByteArray. La funzione deve prima rimuovere tutte le stelle dal testo, poi rimuovere gli spazi bianchi all'inizio e alla fine dal testo rimanente. Infine, la funzione deve restituire il messaggio ripulito.

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

clean_up_message(message)
// => BUY NOW, SAVE 10%
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Cairo Exercism

Vuoi iniziare Benvenuto al Tech Palace!?

Iscriviti a Exercism per imparare e padroneggiare Cairo con 25 concetti68 esercizi e il mentoring di persone reali, tutto gratis.