আর্টিকেল:JavaScript Counter Function- A Comprehensive Problem-Solving Guide for Incrementing Values.

আর্টিকেল:JavaScript Counter Function- A Comprehensive Problem-Solving Guide for Incrementing Values.

Master JavaScript problem-solving on LeetCode with practical tips, solutions, and examples in this comprehensive Bangla guide.

তুমি কখনো জাভাস্ক্রিপ্ট দিয়ে কাউন্টার ফাঙ্কশন বানিয়েছো যা ,একটা ইনিশিয়াল ভ্যালু দিয়ে শুরু করে এবং পরবর্তীতে প্রতিটি ফাঙ্কশন কলের মাধ্যমে ইনিশিয়াল ভ্যালুকে এক এক করে বৃদ্ধি করে ?

আমরা এই article এ ,leedCode এর ২৬২০ counter নামের একটি প্রব্লেম এর মাধ্যমে শিখব কিভাবে counter ফাঙ্কশন কাজ করে এবং আমাদের প্রব্লেম সলভিং স্কিল ইম্প্রুভ করব।

#Problem_2620_Counter:

নিচে দেয়া এই লিংক এ গেলে পুরো প্রব্লেম দেখতে পাবে এবং সল্ভ করতে পারবে :

Problem Link: https://leetcode.com/problems/counter/

আমরা জাভাস্ক্রিপ্ট প্রোগ্রামিং ল্যাংগুয়েজ এর মাধ্যমে প্রব্লেমটিকে সল্ভ করার চেষ্টা করব। সেই সাথে এক্সপ্লেইনশন এর মাধ্যমে বোঝার চেষ্টা করব কি চাচ্ছে।

#Question:

উপরের ছবিতে দেয়া প্রশ্নের দিকে খেয়াল করলে দেখতে পাবে ,আমাদের কে বলা হচ্ছে, একটি counter ফাংশন তৈরি করতে হবে যা ইনপুট হিসাবে একটি পূর্ণসংখ্যা n নিবে এবং একটি ফাংশন return করবে ।

এই কাউন্টার ফাংশনটি starting এ ভ্যালু n রিটার্ন দিয়ে শুরু করবে এবং প্রত্যেক call সাথে, এটি একটি ইন্টিজার ভ্যালু রিটার্ন দিবে যা আগের ভ্যালুর থেকে 1 বেশি (যেমন, n, n + 1, n + 2, এমন আরকি )।

#Examples:

একটা সম্ভাব্য ইনপুট ও আউটপুট এর এক্সাম্পল দেয়া হয়েছে :

এক্সাম্পল ১ এ আমাদের বলা হচ্ছে , n এর ভ্যালু বা ইনপুর যদি ১০ হয় তবে তবে পরবর্তী প্রত্যেক কলে এক করে বৃদ্ধি পেয়ে ১০,১১,১২ এমন হবে। যা আমরা আউটপুট হিসেবে একটা array তে রাখব।

এবং

এক্সাম্পল ২ তে বলা হচ্ছে যদি আমাদের ইনপুট মানে, n এর প্রথম অবস্থায় যদি ভ্যালু -২(negative ভ্যালু ) হয় তবে আউটপুট আসবে [-২,-১,০,১,২] । আগের মতো ১ করে বাড়বে ইনিশিয়াল ভ্যালুর সাথে।

#Constraints:

LeetCode এ constraints হচ্ছে rules যা আমাদের গাইড করে solution এর performance, memory usage,এবং behavior । এটি বুজতে সাহায্য করে আমাদের code বিভিন্ন ইনপুট এর সাথে কি ভাবে ইফেক্টিভলি কাজ করবে।

  1. -1000 <= n <= 1000: এই লাইন টি মিন করে initial number (let's call it 'n') যার ভ্যালু -1000 থেকে 1000 এর মধ্যে হতে হবে। So, আমরা আমাদের counting -1000 থেকে শুরু করে , -999, -998, এবং up to 1000 পর্যন্ত নিয়ে যেতে পারি।

  2. At most 1000 calls to counter() will be made: এই দ্বিতীয় এই লাইন বুঝাচ্ছে আমরা আমাদের counting function কে সর্বোচ্চ 1000 বার কল করতে পারি।

basically আমরা যখন কোড leedCode এ সাবমিট করব আমাদের leedcode এর অনলাইন jugde বিহাইন্ড দা সীন এই ক্রাইটেরিয়া গুলো ফলো করে ডায়নামিকলী আমাদের কোড test করবে।

#Problem_Explanation:

আচ্ছা তাহলে প্রব্লেম যা বলছে তার মানে দাঁড়াচ্ছে , আমাদের একটা ফাঙ্কশন দরকার ,ধরে নিচ্ছি createCounter এবং এর পেরামিটার আকারে থাকবে n সংখ্যা। এবার এই ফাঙ্কশন আমাদের কে counter নামের একটা ফাঙ্কশন return করবে যা প্রতিটি call এ এক এক করে ইনিশিয়াল ভ্যালু থেকে বাড়াবে। এবং আমরা দেখেছি এক্সাম্পল এ result বা আউটপুট একটা array এর মধ্যে থাকবে।

#How_We'll_Do_It:

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

তবে leadcode ,তাদের usecase এর উপর ডিপেন্ট করে সল্ভ করা কোড আউটপুট নিয়ে আসতে পারে কিনা সেটাকেই ফলো করে ।

Writing the JavaScript Code:

function createCounter(n) {
  let current = n;
  return function () {
    return current++;
  };
}

আমাদের প্রব্লেম এর প্রশ্ন অনুযায়ী প্রথমে createCounter নামে একটা ফাঙ্কশন নিয়েছি এবং ইনিশিয়াল ভ্যালুর জন্য n পেরামিটার নিয়েছি।

আমাদের যেহেতু ভ্যালু ইনক্রেস করতে হবে তাই n কে current ভ্যারিয়েবল এ স্টোর করেছি। এবারে তুমি যদি প্রব্লেম এর question এ খেয়াল করো সেখানে বলেছিল আমাদের createCounter একটা ফাঙ্কশন রিটার্ন করবে। এখানে মূলত জাভাস্ক্রিপ্ট এর closure থিওরি applay হচ্ছে।

so, createCounter যেহেতু একটা anonymous ফাঙ্কশন হবে তাই আমাদের ফাইনাল রেজাল্ট আমরা এখন থেকেই রিটার্ন করে দিবো । যেমন আমাদের প্রশ্নে বলেছিল প্রতিটি কল এ এক করে বাড়বে ,তাই current ভ্যারিয়েবল মানে ,বর্তমান ভ্যালু এর সাথে (++) করে এক এক বাড়িয়ে দিচ্ছি।

তুমি চাইলে এটাকে অন্য ভাবেও লিখতে পার : current = current+1

#Explain_in_Action:

Let's see how to use our counting function:

উপরের অংশে আমরা আমাদের ফাঙ্কশন ডিক্লারেশন করেছি এবারে আমাদের কাজ হচ্ছে ইম্প্লিমেন্টেশন করা :

const counter = createCounter(10);

const results = [];

results.push(counter());
results.push(counter());
results.push(counter());

createCounter নিজে একটা ফাঙ্কশন এবং সে রিটার্ন করে একটা anonymous ফাঙ্কশন মানে , counter নামে ভ্যারিয়েবল এ আমাদের createCounter কে রেখে দিলে counter as a ফাঙ্কশন হিসেবে পাব।

তুমি যদি এক্সাম্পল এর দিকে খেয়াল কর দেখবে আমাদের আউটপুট গুলি array আকারে থাকবে তাই প্রথমেই results নামে একটা এম্পটি array ডিক্লার করে নিয়েছি।

এবারে কাজ সহজ , array তে আমাদের ফাঙ্কশন কে কল করে push করে দিব যতবার দরকার।

#Final_Code_Is:

function createCounter(n) {
  let current = n;// This variable is part of the closure.
  return function () {
    return current++;// This function can access and modify the 'count' variable.
  };
}
const counter = createCounter(10);
const results = [];
results.push(counter());
results.push(counter());
results.push(counter());

ভিডিও দেখলে আশাকরি ক্লিয়ার হয়ে যাবে কিভাবে সাবমিট করতে হবে leedcode এ :

https://youtu.be/M7714Xohjqc

#Where_Can_You_Use_It?

You might wonder where you can use such a counting function. It can be handy in various scenarios like creating unique identifiers, tracking iterations in loops, or implementing certain game mechanics.

#What's_Next?:

Note: Try creating your own counting function in JavaScript, and experiment with it in different scenarios. If you have any questions or thoughts, feel free to share them in the comments below.

Happy coding! 🚀

💡
শেয়ার ও কমেন্ট করে আমায় ফিডব্যাক দিতে ভুলনা