مسیرها
/
Crystal
Crystal
/
تمرین‌ها
/
کتابخانه‌ی لوتون
کتابخانه‌ی لوتون

کتابخانه‌ی لوتون

تمرین یادگیری

مقدمه

Char یک نوع داده در Crystal است که یک نقطه‌ی کد یونیکد ۳۲ بیتی را نمایش می‌دهد. اندازه‌ی آن‌ها باعث می‌شود از نظر حافظه به‌صرفه باشند و ویژگی‌های خاصی داشته باشند که رشته‌ها ندارند. آن‌ها با گیومه‌ی تک (') ساخته می‌شوند و فقط اجازه می‌دهند یک نقطه‌ی کد یونیکد درونشان قرار بگیرد.

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

در Crystal، وقتی با رشته‌ها کار می‌کنید، کار کردن با Char بسیار رایج است، چون تعداد قابل‌توجهی از متدهای کلاس String یا Char برمی‌گردانند یا Char را به عنوان آرگومان می‌گیرند. برای مثال، متد String#[] یک Char برمی‌گرداند، یا متد String#chars مجموعه‌ای از Char را برمی‌گرداند.

افزایش و کاهش

چون Char یک نقطه‌ی کد یونیکد ۳۲ بیتی است، از افزایش و کاهش پشتیبانی می‌کند؛ به این ترتیب اگر 'a' داشته باشید، با اضافه کردن یک، 'b' به دست می‌آید.

'a' + 5
# => 'f'

'z' - 25
# => 'a'

همچنین متدی به اسم Char#succ وجود دارد که کاراکتر بعدی در جدول یونیکد را برمی‌گرداند و Char#pred که کاراکتر قبلی در جدول یونیکد را برمی‌گرداند.

'a'.succ
# => 'b'

'z'.pred
# => 'y'

الحاق

چون Char فقط برای نمایش یک نقطه‌ی کد یونیکد ۳۲ بیتی به کار می‌رود، دو کاراکتر را نمی‌توان به هم الحاق کرد. بنابراین Char را فقط می‌توان به رشته الحاق کرد.

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

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

متدهای ویژگی

Crystal چند متد برای گرفتن اطلاعات درباره‌ی یک کاراکتر دارد؛ مثلاً اینکه عدد است یا حرف، یا اینکه حرف بزرگ است یا کوچک. در ادامه فهرستی از برخی از این متدها آمده است؛ برای فهرست کامل، API مربوط به Char را ببینید:

متد توضیح
Char#number? اگر Char عدد باشد true برمی‌گرداند
Char#letter? اگر Char حرف باشد true برمی‌گرداند
Char#lowercase? اگر Char حرف کوچک باشد true برمی‌گرداند
Char#uppercase? اگر Char حرف بزرگ باشد true برمی‌گرداند
Char#ascii? اگر Char یک کاراکتر ASCII باشد true برمی‌گرداند
Char#whitespace? اگر Char یک کاراکتر فضای سفید باشد true برمی‌گرداند

تبدیل

تبدیل بین نقطه‌های کد و Char

چون Char یک نقطه‌ی کد یونیکد ۳۲ بیتی است، می‌توانید بین Char و نقطه‌های کد (Int) تبدیل انجام دهید. این کار با استفاده از متد Char#ord انجام می‌شود که نقطه‌ی کد Char را برمی‌گرداند، یا متد Int#chr که Char متناظر با آن نقطه‌ی کد را برمی‌گرداند.

'a'.ord
# => 97

97.chr
# => 'a'

تبدیل میان انواع

مانند سایر انواع داده، Char هم چند متد برای تبدیل میان انواع دارد. رایج‌ترین آن‌ها متد Char#to_s است که Char را به رشته تبدیل می‌کند. علاوه بر آن، متد Char#to_i هم وجود دارد که Char را به Int تبدیل می‌کند و متد Char#to_f که Char را به Float تبدیل می‌کند.

'a'.to_s
# => "a"

'4'.to_i
# => 4

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

دستورالعمل‌ها

کتابخانه‌ی لوتون کتابخانه‌ای بزرگ است با مجموعه‌ی گسترده‌ای از ادبیات، از کتاب تا آثار هنری. کتابخانه بخشی دارد که در آن ادبیات را مطالعه می‌کنند و کتاب‌ها را به سیستم رایانه‌ای اضافه می‌کنند.

قرار است بخش‌هایی از آن خودکار شود و از شما خواسته شده کمک کنید. این کار از خودکارسازی فرم‌های فرایند ثبت کتاب تا کمک به رمزگشایی متن‌ها را در بر می‌گیرد.

1. گرفتن اولین حرف عنوان

کتاب‌های یک کتابخانه باید به‌راحتی پیدا شوند، بنابراین آن‌ها را بر اساس اولین حرف عنوان مرتب می‌کنند.

متد Library.first_letter را پیاده‌سازی کنید که آرگومانی به اسم title می‌گیرد که عنوان کتاب را در خود نگه می‌دارد. متد باید اولین حرف عنوان را برگرداند.

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

2. گرفتن حروف اول اسم نویسنده

کتابخانه کتاب‌های زیادی دارد که نویسندگان مختلف نوشته‌اند. نویسندگان را اغلب با حروف اول اسمشان می‌شناسند، بنابراین کتابخانه سیستمی خواسته که با وارد کردن اسم کوچک و فامیل نویسنده، حروف اول اسم او را بدهد. حروف اول باید به این شکل قالب‌بندی شوند: {first_letter_of_first_name}.{first_letter_of_last_name}

متد Library.initials را پیاده‌سازی کنید که دو آرگومان first_name و last_name می‌گیرد که اسم کوچک و فامیل نویسنده را در خود نگه می‌دارند. متد باید حروف اول اسم نویسنده را برگرداند.

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

3. رمزگشایی حرف

بعضی از ادبیات رمزگذاری شده است و کتابخانه متن‌های رمزگذاری‌شده‌ی زیادی دارد. کتابخانه یک سیستم رمزگشایی تازه برای این رمزگذاری ویژه می‌خواهد.

رمزگذاری این‌طور کار می‌کند که حرف را برمی‌دارد و آن را با حرف پیش از خودش در الفبا جایگزین می‌کند. برای مثال a می‌شود z، b می‌شود a، c می‌شود b و به همین ترتیب.

کتابخانه می‌خواهد بتواند هم حروف بزرگ و هم حروف کوچک را رمزگشایی کند و بزرگی و کوچکی حرف اصلی را حفظ کند.

متد Library.decrypt_character را پیاده‌سازی کنید که آرگومانی به اسم character می‌گیرد که حرف مورد رمزگشایی را در خود نگه می‌دارد. متد باید حرف رمزگشایی‌شده را برگرداند.

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

4. رمزگشایی متن

کتابخانه همچنین می‌خواهد یک متن کامل را که با همین رمزگذاری، حرف پیشین الفبا را برمی‌دارد، رمزگشایی کند.

رمزگشا باید فقط حروف را رمزگشایی کند و همه‌ی نویسه‌های دیگر را همان‌طور که هستند رها کند.

متد Library.decrypt_text را پیاده‌سازی کنید که آرگومانی به اسم text می‌گیرد که متن مورد رمزگشایی را در خود نگه می‌دارد. متد باید متن رمزگشایی‌شده را برگرداند.

Library.decrypt_text("Ifmmp Xpsme!")
# => "Hello World!"
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Crystal Exercism

آماده‌اید کتابخانه‌ی لوتون را شروع کنید؟

در Exercism ثبت‌نام کنید تا Crystal را همراه با 26 مفهوم142 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.