Kurzusok
/
Crystal
Crystal
/
Feladatok
/
Luton könyvtára
Luton könyvtára

Luton könyvtára

Tanulófeladat

Bevezetés

A Char egy adattípus a Crystalben, amely egy 32 bites Unicode kódpontot reprezentál. A méretük miatt memóriahatékonyak, és olyan tulajdonságokkal rendelkeznek, amelyekkel a stringek nem. Egyes idézőjelekkel (') hozod létre őket, és csak egyetlen Unicode-kódpont kerülhet bele.

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

A Crystalben elég gyakori, hogy Char értékekkel dolgozol, amikor stringekkel foglalkozol, mivel a String osztály jó néhány metódusa Char értéket ad vissza, vagy Char értéket vár argumentumként. Például a String#[] metódus egy Char értéket ad vissza, a String#chars metódus pedig Char értékek gyűjteményét.

Növelés / csökkentés

Mivel a Char egy 32 bites Unicode-kódpont, támogatja a növelést és a csökkentést, így ha van egy 'a', akkor egyet hozzáadva a 'b' karaktert kapod.

'a' + 5
# => 'f'

'z' - 25
# => 'a'

Létezik egy Char#succ nevű metódus is, amely a Unicode-táblázatban a következő karaktert adja vissza, valamint a Char#pred, amely az előző karaktert adja vissza.

'a'.succ
# => 'b'

'z'.pred
# => 'y'

Összefűzés

Mivel a Char csak egy 32 bites Unicode-kódpont reprezentálására szolgál, két Char értéket nem lehet összefűzni. Ezért Char értékeket csak stringekkel lehet összefűzni.

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

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

Tulajdonságmetódusok

A Crystalben néhány metódus segít információt szerezni egy karakterről, például hogy szám vagy betű-e, illetve hogy kis- vagy nagybetű-e. Íme néhány metódus listája, a teljes listát a Char API oldalon találod:

Metódus Leírás
Char#number? true-t ad vissza, ha a Char egy szám
Char#letter? true-t ad vissza, ha a Char egy betű
Char#lowercase? true-t ad vissza, ha a Char kisbetű
Char#uppercase? true-t ad vissza, ha a Char nagybetű
Char#ascii? true-t ad vissza, ha a Char ASCII-karakter
Char#whitespace? true-t ad vissza, ha a Char whitespace-karakter

Konvertálás

Konvertálás kódpontok és Char értékek között

Mivel a Char egy 32 bites Unicode-kódpont, át tudsz konvertálni Char és kódpont (Int) között. Erre a Char#ord metódust használhatod, amely a Char kódpontját adja vissza, vagy az Int#chr metódust, amely a kódponthoz tartozó Char értéket adja vissza.

'a'.ord
# => 97

97.chr
# => 'a'

Konvertálás típusok között

Ahogy a többi adattípusnál, a Char értékeknél is van néhány metódus a típusok közötti konvertálásra. A leggyakoribb a Char#to_s metódus, amely a Char értéket stringgé alakítja. Emellett ott van a Char#to_i metódus, amely a Char értéket Int értékké alakítja, és a Char#to_f metódus, amely Float értékké.

'a'.to_s
# => "a"

'4'.to_i
# => 4

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

Utasítások

A lutoni könyvtár egy nagy könyvtár, hatalmas irodalmi gyűjteménnyel, amely a könyvektől a művészetig terjed. A könyvtárban van egy részleg, ahol irodalmat tanulmányoznak, és könyveket visznek fel a számítógépes rendszerbe.

Bizonyos részeket szeretnének automatizálni, és téged kértek meg, hogy segíts nekik. Ez sok mindent felölel, a beírási folyamat űrlapjainak automatizálásától a szövegek visszafejtéséig.

1. A cím első betűjének lekérése

A könyvtárban a könyveknek könnyen megtalálhatónak kell lenniük, ezért a cím első betűje szerint rendezik őket.

Valósítsd meg a Library.first_letter metódust, amely egy title argumentumot vesz át, ami a könyv címét tartalmazza. A metódusnak a cím első betűjét kell visszaadnia.

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

2. A szerző monogramjának lekérése

A könyvtárban rengeteg könyv van, amelyeket különböző szerzők írtak. A szerzőkre gyakran a monogramjukkal hivatkoznak, ezért a könyvtár egy olyan rendszert kért, amely a szerző kereszt- és vezetéknevének megadásával kiadja a szerző monogramját. A monogram formátuma a következő: {first_letter_of_first_name}.{first_letter_of_last_name}

Valósítsd meg a Library.initials metódust, amely két argumentumot vesz át, a first_name és a last_name értéket, amelyek a szerző kereszt- és vezetéknevét tartalmazzák. A metódusnak a szerző monogramját kell visszaadnia.

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

3. Betű visszafejtése

Néhány irodalmi mű titkosítva van, és a könyvtárban sok titkosított szöveg található. A könyvtár egy új visszafejtő rendszert szeretne egy különleges titkosításhoz.

A titkosítás úgy működik, hogy veszi a betűt, és lecseréli az ábécében előtte álló betűre. Például az a-ból z lesz, a b-ből a, a c-ből b, és így tovább.

A könyvtár szeretné, ha mind a nagy-, mind a kisbetűket vissza tudná fejteni, és megtartaná az eredeti betű kis- vagy nagybetűs írásmódját.

Valósítsd meg a Library.decrypt_character metódust, amely egy character argumentumot vesz át, ami a visszafejtendő betűt tartalmazza. A metódusnak a visszafejtett betűt kell visszaadnia.

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

4. Szöveg visszafejtése

A könyvtár szeretne egy egész szöveget is visszafejteni azzal a titkosítással, amely az ábécében előtte álló betűt veszi.

A visszafejtő csak a betűket fejtse vissza, és minden más karaktert hagyjon úgy, ahogy van.

Valósítsd meg a Library.decrypt_text metódust, amely egy text argumentumot vesz át, ami a visszafejtendő szöveget tartalmazza. A metódusnak a visszafejtett szöveget kell visszaadnia.

Library.decrypt_text("Ifmmp Xpsme!")
# => "Hello World!"
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Crystal Exercism

Készen állsz elkezdeni a(z) Luton könyvtára feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Crystal nyelvet 26 fogalom142 feladat segítségével, valódi emberi mentorálással, mindez ingyen.