Track
/
Crystal
Crystal
/
Esercizi
/
La biblioteca di Luton
La biblioteca di Luton

La biblioteca di Luton

Esercizio di apprendimento

Introduzione

Char è un tipo di dato in Crystal che rappresenta un punto di codice Unicode a 32 bit. Le sue dimensioni lo rendono efficiente in termini di memoria e gli conferiscono proprietà specifiche che le stringhe non hanno. Si crea usando virgolette singole (') e consente di inserirvi un solo punto di codice Unicode.

'a' # => 'a'
'a'.class # => Char

È piuttosto comune lavorare con i Char quando si lavora con le stringhe in Crystal, dato che parecchi metodi della classe String restituiscono Char o accettano Char come argomenti. Per esempio, il metodo String#[] restituisce un Char, oppure il metodo String#chars restituisce una collezione di Char.

Incremento e decremento

Dato che un Char è un punto Unicode a 32 bit, supporta l'incremento e il decremento: questo fa sì che, se hai 'a', puoi ottenere 'b' aggiungendo uno.

'a' + 5
# => 'f'

'z' - 25
# => 'a'

Esiste anche un metodo chiamato Char#succ, che restituisce il carattere successivo nella tabella Unicode, e Char#pred, che restituisce il carattere precedente nella tabella Unicode.

'a'.succ
# => 'b'

'z'.pred
# => 'y'

Concatenazione

Dato che i Char servono solo a rappresentare un punto Unicode a 32 bit, due Char non possono essere concatenati. Di conseguenza, i Char possono essere concatenati solo con le stringhe.

'a' + "bc"
# => "abc"

'a' + 'b'
# => error: expected argument #1 to 'Char#+' to be Int or String, not Char

Metodi per le proprietà

Crystal ha alcuni metodi per ottenere informazioni su un carattere, come se è un numero o una lettera, oppure se è maiuscolo o minuscolo. Ecco un elenco di alcuni dei metodi; per un elenco completo, consulta l'API di Char:

Metodo Descrizione
Char#number? Restituisce true se il Char è un numero
Char#letter? Restituisce true se il Char è una lettera
Char#lowercase? Restituisce true se il Char è minuscolo
Char#uppercase? Restituisce true se il Char è maiuscolo
Char#ascii? Restituisce true se il Char è un carattere ASCII
Char#whitespace? Restituisce true se il Char è un carattere di spazio

Conversione

Convertire tra punti di codice e Char

Dato che un Char è un punto Unicode a 32 bit, puoi convertire tra Char e punti di codice (Int). Puoi farlo usando il metodo Char#ord, che restituisce il punto di codice del Char, oppure il metodo Int#chr, che restituisce il Char del punto di codice.

'a'.ord
# => 97

97.chr
# => 'a'

Convertire tra tipi

Come per gli altri tipi di dato, i Char hanno alcuni metodi per convertire tra tipi. Il più comune è il metodo Char#to_s, che converte il Char in una stringa. Esiste però anche il metodo Char#to_i, che converte il Char in un Int, e il metodo Char#to_f, che converte il Char in un Float.

'a'.to_s
# => "a"

'4'.to_i
# => 4

'a'.to_i
# => Error: Invalid integer: a (ArgumentError)

Istruzioni

La biblioteca di Luton è una grande biblioteca con una vasta collezione di letteratura, che va dai libri all'arte. La biblioteca ha una sezione in cui si studia la letteratura e si aggiungono libri al sistema informatico.

Alcune parti mirano a essere automatizzate e ti viene chiesto di dare una mano. Tra le cose da fare ci sono l'automazione dei moduli del processo di registrazione e la decifratura dei testi.

1. Ottenere la prima lettera del titolo

I libri di una biblioteca dovrebbero essere facili da trovare, quindi sono ordinati per la prima lettera del titolo.

Implementa il metodo Library.first_letter, che prende un argomento title contenente il titolo del libro. Il metodo deve restituire la prima lettera del titolo.

Library.first_letter("Mystery of the Crystal Skull")
# => 'M'

2. Ottenere le iniziali dell'autore

La biblioteca ha molti libri scritti da autori diversi. Spesso ci si riferisce agli autori con le loro iniziali, quindi la biblioteca ha chiesto un sistema che restituisca le iniziali dell'autore partendo dal suo nome e dal suo cognome. Le iniziali devono essere formattate così: {first_letter_of_first_name}.{first_letter_of_last_name}

Implementa il metodo Library.initials, che prende due argomenti first_name e last_name contenenti il nome e il cognome dell'autore. Il metodo deve restituire le iniziali dell'autore.

Library.initials("William", "Shakespeare")
# => "W.S"

3. Decifrare una lettera

Parte della letteratura è cifrata e la biblioteca ha molti testi cifrati. La biblioteca vorrebbe un nuovo sistema di decifratura per questa cifratura speciale.

La cifratura funziona prendendo la lettera e sostituendola con la lettera che la precede nell'alfabeto. Per esempio, a diventa z, b diventa a, c diventa b e così via.

La biblioteca vorrebbe che fosse in grado di decifrare sia le lettere maiuscole sia quelle minuscole, mantenendo lo stesso caso della lettera originale.

Implementa il metodo Library.decrypt_character, che prende un argomento character contenente la lettera da decifrare. Il metodo deve restituire la lettera decifrata.

Library.decrypt_character('a')
# => 'z'

4. Decifrare un testo

La biblioteca vorrebbe anche decifrare un intero testo con questa cifratura, quella che prende la lettera precedente nell'alfabeto.

Il decifratore deve decifrare solo le lettere e lasciare invariati tutti gli altri caratteri.

Implementa il metodo Library.decrypt_text, che prende un argomento text contenente il testo da decifrare. Il metodo deve restituire il testo decifrato.

Library.decrypt_text("Ifmmp Xpsme!")
# => "Hello World!"
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Crystal Exercism

Vuoi iniziare La biblioteca di Luton?

Iscriviti a Exercism per imparare e padroneggiare Crystal con 26 concetti142 esercizi e il mentoring di persone reali, tutto gratis.