ট্র্যাক
/
F#
F#
/
অনুশীলনী
/
পাসওয়ার্ড চেকার
পাসওয়ার্ড চেকার

পাসওয়ার্ড চেকার

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

ভূমিকা

Result টাইপ একটি ফাংশনকে একটি একক মান রিটার্ন করা সম্ভব করে, যা নিচের সবকিছু নির্দেশ করে:

  • অপারেশনটি সফল হয়েছে নাকি ব্যর্থ হয়েছে
  • সফল হলে, অপারেশনের ফলস্বরূপ মান
  • ব্যর্থ হলে, ব্যর্থতার কারণ

ব্যবহার

Result টাইপ একটি জেনেরিক টাইপ, যার ভিতরে দুটি অন্তর্নিহিত টাইপ থাকে:

  • সফল অপারেশনে ফলাফল মানের টাইপ
  • ব্যর্থতায় এররের টাইপ

Result টাইপটি একটি [ডিসক্রিমিনেটেড ইউনিয়ন][discriminated-union]-ও, যার নিচের কেসগুলো থাকতে পারে:

  • Ok <value> যা একটি সফল ফলাফল বোঝায়
  • Error <reason> যা একটি ব্যর্থতা বোঝায়

নিচের ফাংশনটি দেখায় কীভাবে একটি Result মান তৈরি করতে হয়:

let validateName (name: string) : Result<string, string> = 
    match name with
    | null -> Error "Name not found."
    | "" -> Error "Name is empty."
    | _ -> Ok name

এই উদাহরণে, Ok মানটি একটি স্ট্রিং (প্রদত্ত নাম), আর Error মানটিও একটি স্ট্রিং (এররের কারণ, মানুষের পড়ার উপযোগী রূপে)।

একটি Result মানের বিষয়বস্তু পড়া

নিচের টাইপ ডেফিনিশন ও ফাংশন সিগনেচারটি খেয়াল করুন:

type FileOpenError = 
| NotFound
| AccessDenied
| FileLocked

let openFile (filename: string) : Result<int, FileOpenError> =

openFile ফাংশনটি কল করা কোড প্যাটার্ন ম্যাচিং ব্যবহার করে সফল ও ব্যর্থ কেসগুলো সামলাতে পারে, যেমনটি নিচের উদাহরণে দেখানো হয়েছে:

match openFile(filename) with
| Ok handle -> doSomethingWithFile(handle)
| Error NotFound -> printfn $"Error: file {filename} was not found."
| Error AccessDenied -> printfn $"Error: you do not have permission to open the file {filename}."
| Error FileLocked -> printfn $"Error: file {filename} is already in use."

নির্দেশনা

আপনার কাজ হলো একটি পাসওয়ার্ড চেকার তৈরি করা। একটি পাসওয়ার্ড চেকার ব্যবহারকারীর প্রস্তাবিত পাসওয়ার্ড যাচাই করে নিশ্চিত করে যে তা প্রদত্ত রিসোর্সে অ্যাক্সেস নিয়ন্ত্রণকারী প্রতিষ্ঠান কর্তৃক নির্ধারিত কিছু শর্ত পূরণ করে।

এই অনুশীলনীর জন্য পাসওয়ার্ডের শর্তগুলো হলো:

  • ১২টি বা তার বেশি ক্যারেক্টার থাকতে হবে
  • কমপক্ষে একটি বড় হাতের অক্ষর থাকতে হবে
  • কমপক্ষে একটি ছোট হাতের অক্ষর থাকতে হবে
  • কমপক্ষে একটি ডিজিট থাকতে হবে
  • !@#$%^&* সেটের মধ্যে কমপক্ষে একটি সিম্বল থাকতে হবে

আপনার সমাধানে সফলতা বা ব্যর্থতার অবস্থা এনক্যাপসুলেট করতে একটি Result ব্যবহার করতে হবে। সফলতার ক্ষেত্রে Result-কে ভ্যালিডেট করা পাসওয়ার্ডটি একটি স্ট্রিং হিসেবে প্রকাশ করতে হবে। ব্যর্থতার ক্ষেত্রে Result-কে সেই নিয়মটি প্রকাশ করতে হবে যা ব্যর্থতার ক্ষেত্রে লঙ্ঘন করা হয়েছে।

Note

এই অনুশীলনীর জন্য পাসওয়ার্ড চেকারটি হবে সরল। এটি কেবল তখনই নির্দেশ করবে যখন একটি মাত্র নিয়ম লঙ্ঘন করা হয়েছে। পরবর্তী একটি অনুশীলনীতে আরও বাস্তবসম্মত পাসওয়ার্ড চেকার নিয়ে আলোচনা করা হবে, যা একই সাথে একাধিক নিয়ম লঙ্ঘন করা হলে তা নির্দেশ করতে পারবে।

1. checkPassword ফাংশনটি ইমপ্লিমেন্ট করুন

checkPassword ফাংশনটি প্রদত্ত পাসওয়ার্ডটি উপরে উল্লিখিত নিয়মগুলোর সাথে যাচাই করে। ব্যর্থ হলে, এটি রেজাল্ট ভ্যালুর মধ্যে PasswordRule মানগুলোর একটি এনক্যাপসুলেট করে যে নিয়মটি লঙ্ঘন করা হয়েছে তা নির্দেশ করে।

checkPassword "abcdefghij5#"
// => Error MissingUppercaseLetter

2. ``getStatusMessage` ফাংশনটি ইমপ্লিমেন্ট করুন

getStatusMessage ফাংশনটি একটি স্ট্রিং রিটার্ন করে, যার মধ্যে checkPassword থেকে রিটার্ন করা ফলাফলের অর্থ বোঝানো হয় এমন একটি মানুষের পড়ার উপযোগী বার্তা থাকে।

getStatusMessage (Error MissingDigit)
// => "Error: does not have at least one digit"
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
F# Exercism

পাসওয়ার্ড চেকার শুরু করতে প্রস্তুত?

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