কম্পিউটার টিউটোরিয়াল

C++-এ স্ট্রিং-এ সিগন্যাল সব পজিশনে পৌঁছাতে কতক্ষণ লাগে সেটা বের করা

এই টিউটোরিয়ালে, আমরা একটি প্রোগ্রাম লিখব যা একটি স্ট্রিং-এ সিগন্যাল সব পজিশনে পৌঁছাতে কতক্ষণ লাগে সেটা ক্যালকুলেট করবে। একটি উদাহরণ দিয়ে ব্যাখ্যা করি।

আমাদের একটি স্ট্রিং থাকবে যেটে শুধু s এবং p ক্যারেক্টার থাকবে। s হলো সিগন্যাল (signal) এবং p হলো স্ট্রিং-এ পজিশন (position)। একটি সিগন্যাল s-থেকে শুরু হয় এবং বাম ও ডান দুটি দিকে ট্রাভেল করে। আমরা ধরে নিচ্ছি স্ট্রিং-এ নেক্সট পজিশনে যেতে এক ইউনিট টাইম লাগে। আমাদের কাজ হলো সব পজিশন-কে সিগন্যাল-এ রূপান্তর করতে কতটুকু টাইম লাগবে সেটা ক্যালকুলেট করা।

কিছু উদাহরণ দেখি।

ইনপুট - pppppspss

আউটপুট - 5

ইনপুট - pspspsps

আউটপুট - 1

ইনপুট - ssssss

আউটপুট - 0

সমস্যাটি সমাধানের ধাপগুলো:

  • একটি স্ট্রিং এবং টাইম (০) ইনিশিয়ালাইজ করুন
  • স্ট্রিংয়ের ওপর ইটারেট করুন।
    • কন্টিনিউয়াস p ক্যারেক্টার গণনা করুন এবং কাউন্ট একটি ভেরিয়েবলে স্টোর করুন।
    • যদি কারেন্ট ক্যারেক্টার s হয় এবং p কাউন্ট প্রিভিয়াস টাইমের চেয়ে বেশি হয় তবে চেক করুন s বাম পাশে আছে কিনা।
    • যদি s দুপাশেই থাকে, তবে কাউন্ট দুভাগ করুন কারণ s দুদিকেই ট্রাভেল করতে পারে।
    • p কাউন্ট রিসেট করুন।

উদাহরণ

কোডটি দেখি।

#include <bits/stdc++.h>
using namespace std;

int timeToConvertToSignalString(string sample_string, int string_len) {
    int p_count = 0, time = 0;
    for (int i = 0; i <= string_len; i++) {
        if (sample_string[i] == 'p') {
            p_count++;
        } else {
            if (p_count > time) {
                bool is_present_left_side = false;
                if (((i - p_count) > 0) && (sample_string[i - p_count - 1] == 's')) {
                    is_present_left_side = 1;
                }
                if (is_present_left_side) {
                    p_count = ceil((double)p_count / 2);
                }
                time = max(time, p_count);
            }
            p_count = 0;
        }
    }
    return time;
}

int main() {
    string sample_string = "pppppspss";
    int n = sample_string.size();
    cout << timeToConvertToSignalString(sample_string, n) << endl;
    return 0;
}

আউটপুট

5

প্রোগ্রামটি অন্য কেসের সাথে রান করে চেক করুন।

উপসংহার

টিউটোরিয়ালে যদি কোনো প্রশ্ন থাকে, তবে কমেন্ট সেকশনে জানান।

  1. C++-এ এনক্রিপ্টেড স্ট্রিং (Decrypted String)-এর k-তম ক্যারেক্টার খুঁজে বের করা

  2. সি++ প্রোগ্রাম: দিয়ে থাকা স্ট্রিং-এ "1(0+)1" প্যাটার্নের সব.matches খুঁজে বের করা

  3. সি++ প্রোগ্রাম: ডিকশনারি থেকে নির্দিষ্ট প্যাটার্ন মিলে যাওয়া সব স্ট্রিং খুঁজে বের করা

  4. C++-এ সিকোয়েন্স সেটে লংগেস্ট কমন সাবসিকোয়েন্স (LCS) খুঁজে বের করা