ট্র্যাক
/
Crystal
Crystal
/
অনুশীলনী
/
Luton-এর লাইব্রেরি
Luton-এর লাইব্রেরি

Luton-এর লাইব্রেরি

লার্নিং অনুশীলনী

ভূমিকা

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 রিটার্ন করে, এবং Char#pred, যা ইউনিকোড টেবিলের পূর্ববর্তী char রিটার্ন করে।

'a'.succ
# => 'b'

'z'.pred
# => 'y'

concatenation

যেহেতু Chars কেবল একটি ৩২-বিট ইউনিকোড প্রকাশের জন্য বোঝানো হয়েছে, তাই দুটি char concatenate করা যায় না। তাই Chars কেবল Strings-এর সাথে concatenate করা যায়।

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

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

বৈশিষ্ট্যের মেথড

একটি Character সম্পর্কে তথ্য পাওয়ার জন্য Crystal-এ কয়েকটি মেথড আছে, যেমন সেটি একটি সংখ্যা বা অক্ষর কি না, কিংবা সেটি uppercase বা lowercase কি না। এখানে এমন কিছু মেথডের তালিকা দেওয়া হলো, সম্পূর্ণ তালিকার জন্য Char API দেখুন:

মেথড বর্ণনা
Char#number? Char একটি সংখ্যা হলে true রিটার্ন করে
Char#letter? Char একটি অক্ষর হলে true রিটার্ন করে
Char#lowercase? Char lowercase হলে true রিটার্ন করে
Char#uppercase? Char uppercase হলে true রিটার্ন করে
Char#ascii? Char একটি ASCII অক্ষর হলে true রিটার্ন করে
Char#whitespace? Char একটি হোয়াইটস্পেস অক্ষর হলে true রিটার্ন করে

রূপান্তর

কোড পয়েন্ট ও Chars-এর মধ্যে রূপান্তর

যেহেতু Chars একটি ৩২-বিট ইউনিকোড পয়েন্ট, তাই Chars ও কোড পয়েন্টের (Int) মধ্যে রূপান্তর করা যায়। এটি করা যায় Char#ord মেথড দিয়ে, যা Char-এর কোড পয়েন্ট রিটার্ন করবে, অথবা Int#chr মেথড দিয়ে, যা কোড পয়েন্টের Char রিটার্ন করবে।

'a'.ord
# => 97

97.chr
# => 'a'

টাইপের মধ্যে রূপান্তর

অন্য ডেটা টাইপের মতোই, char-এর মধ্যে টাইপের মধ্যে রূপান্তর করার কয়েকটি মেথড আছে। সবচেয়ে বেশি ব্যবহৃতটি হলো Char#to_s মেথড, যা Char-কে একটি String-এ রূপান্তর করে। তবে 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

Luton-এর লাইব্রেরি শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Crystal ট্র্যাকের 26টি কনসেপ্ট142টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।