ট্র্যাক
/
F#
F#
/
অনুশীলনী
/
পাখি পর্যবেক্ষক
পাখি পর্যবেক্ষক

পাখি পর্যবেক্ষক

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

ভূমিকা

অ্যারে

F#-এ একটি array হলো শূন্য বা তার বেশি মানের একটি মিউটেবল কালেকশন, যার দৈর্ঘ্য নির্দিষ্ট। এর মানে হলো, একবার একটি অ্যারে তৈরি হয়ে গেলে তার আকার আর পরিবর্তন করা যায় না, কিন্তু তার মানগুলো পরিবর্তন করা যায়। একটি অ্যারেতে থাকা সব মানের টাইপ একই হতে হবে। অ্যারে নিচের মতো করে ডিফাইন করা যায়:

let empty = [| |]
let emptyAlternative = Array.empty

let singleValue = [| 5 |]
let singleValueAlternative = Array.singleton 5

let threeValues = [| "a"; "b"; "c" |]

এলিমেন্টগুলো একটি ইনডেক্স ব্যবহার করে অ্যারেতে অ্যাসাইন করা যায় বা অ্যারে থেকে পড়া যায়। F#-এর অ্যারে জিরো-বেজড, অর্থাৎ প্রথম এলিমেন্টের ইনডেক্স সবসময় শূন্য:

let numbers = [| 2; 3; 5 |]

// Update value in array
numbers[2] <- 9

// Read value from array
numbers[2]
// => 9

অ্যারে হয় Array মডিউলে ডিফাইন করা ফাংশন ও অপারেটর দিয়ে ম্যানিপুলেট করা হয়, অথবা অ্যারে প্যাটার্ন ব্যবহার করে প্যাটার্ন ম্যাচিংয়ের মাধ্যমে ম্যানুয়ালি করা হয়:

let describe array =
    match array with
    | [| |] -> "Empty"
    | [| 1; 2; three |] -> sprintf "1, 2, %d" three
    | _ -> "Other"

describe [| |]         // => "Empty"
describe [| 1; 2; 4 |] // => "1, 2, 4"
describe [| 5; 7; 9 |] // => "Other"

প্যাটার্ন ম্যাচিংয়ের সময় আপনি একটি মান বাদ দিতেও পারেন; যখন কোনো নির্দিষ্ট কেসে কোনো মান নিয়ে আপনার কিছু যায় আসে না (অর্থাৎ মানটি আপনি ব্যবহার করবেন না), তখন এটি বোঝাতে একটি আন্ডারস্কোর ('_') ব্যবহার করতে পারেন:

let describe array =
    match array with
    | [| |] -> "Empty array"
    | [| x |] -> "Array with one item"
    | [| _; y |] -> "Array with two items (first item ignored)"
    | _ -> "Array with many items (all items ignored)"

describe [| |]          // => "Empty array"
describe [| 1 |]        // => "Array with one item"
describe [| 5; 7 |]     // => "Array with two items (first item ignored)"
describe [| 5; 7; 9 |]  // => "Array with many items (all items ignored)"

প্যাটার্ন ম্যাচিংয়ের সময় একক '_' সর্বদা সবার শেষে আসা উচিত; অন্য কোনো কেসের সাথে মিলে না এমন প্রতিটি মান এই কেসটি দিয়ে হ্যান্ডেল করা হবে।

নির্দেশনা

আপনি একজন উৎসাহী পাখি-পর্যবেক্ষক, যিনি গত সাত দিনে আপনার বাগানে কতটি পাখি এসেছে তার হিসাব রাখেন।

আপনার ছয়টি কাজ আছে, সবগুলোই আপনার বাগানে আসা পাখির সংখ্যা নিয়ে।

1. গত সপ্তাহের সংখ্যাগুলো কী ছিল তা যাচাই করুন

তুলনার সুবিধার জন্য আপনি সবসময় গত সপ্তাহের সংখ্যাগুলোর একটি কপি কাছে রাখেন, যেগুলো ছিল: 0, 2, 5, 3, 7, 8 এবং 4। গত সপ্তাহের সংখ্যাগুলো ধারণ করে এমন lastWeek বাইন্ডিংটি ডিফাইন করুন:

lastWeek
// => [| 0; 2; 5; 3; 7; 8; 4 |]

2. গতকাল কতটি পাখি এসেছিল তা দেখুন

গতকাল আপনার বাগানে কতটি পাখি এসেছিল, তা রিটার্ন করার জন্য yesterday ফাংশনটি ইমপ্লিমেন্ট করুন। পাখির সংখ্যাগুলো দিন অনুসারে সাজানো, যেখানে প্রথম এলিমেন্টটি সবচেয়ে পুরোনো দিনের সংখ্যা আর শেষ এলিমেন্টটি আজকের সংখ্যা।

yesterday [| 3; 5; 0; 7; 4; 1 |]
// => 4

3. আসা পাখির মোট সংখ্যা হিসাব করুন

আপনার বাগানে যত পাখি এসেছে তার মোট সংখ্যা রিটার্ন করার জন্য total ফাংশনটি ইমপ্লিমেন্ট করুন:

total [| 3; 5; 0; 7; 4; 1 |]
// => 20

4. কোনো দিনে একটিও পাখি আসেনি কিনা দেখুন

dayWithoutBirds ফাংশনটি ইমপ্লিমেন্ট করুন, যা true রিটার্ন করে যদি এমন কোনো দিন থাকে যেদিন বাগানে শূন্য পাখি এসেছিল; অন্যথায় false রিটার্ন করুন:

dayWithoutBirds [| 3; 5; 0; 7; 4; 1 |]
// => true

5. আজকের সংখ্যা এক বাড়ান

আজকের সংখ্যা এক বাড়িয়ে হালনাগাদ সংখ্যাগুলো রিটার্ন করার জন্য incrementTodaysCount ফাংশনটি ইমপ্লিমেন্ট করুন:

let birdCount = [| 3; 5; 0; 7; 4; 1 |]
incrementTodaysCount birdCount
// => [| 3; 5; 0; 7; 4; 2 |]

6. অস্বাভাবিক সপ্তাহ কিনা দেখুন

গত এক বছরে আপনি লক্ষ্য করেছেন, কিছু সপ্তাহে একই রকম অস্বাভাবিক প্যাটার্ন দেখা যায়:

  • সপ্তাহের প্রতিটি জোড় দিনে কোনো পাখি ছিল না
  • সপ্তাহের প্রতিটি জোড় দিনে ঠিক ১০টি পাখি দেখা গেছে
  • সপ্তাহের প্রতিটি বিজোড় দিনে ঠিক ৫টি পাখি দেখা গেছে

unusualWeek ফাংশনটি ইমপ্লিমেন্ট করুন, যা true রিটার্ন করে যদি এই সপ্তাহের পাখি-সংখ্যার প্যাটার্নটি ওই অস্বাভাবিক প্যাটার্নগুলোর একটির সাথে মেলে:

unusualWeek [| 1; 0; 5; 0; 12; 0; 2 |]
// => true

unusualWeek [| 5; 0; 5; 12; 5; 3; 5|]
// => true

(লক্ষ্য করুন, দিনের জোড়-বিজোড় হিসাব 1-ইনডেক্সড, 0-ইনডেক্সড নয়। অ্যারের প্রথম এলিমেন্টটি একটি বিজোড় দিনের সাথে মেলে)

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
F# Exercism

পাখি পর্যবেক্ষক শুরু করতে প্রস্তুত?

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