কম্পিউটার

C++ এ পুনরুদ্ধারের পরে সম্ভাব্য সকল আইপি ঠিকানা খুঁজে বের করার প্রোগ্রাম


ধরুন আমাদের কাছে শুধুমাত্র সংখ্যা সহ একটি স্ট্রিং আছে, আমাদের সমস্ত সম্ভাব্য বৈধ আইপি ঠিকানা সমন্বয় গঠন করে এটি পুনরুদ্ধার করতে হবে। আমরা জানি যে একটি বৈধ আইপি ঠিকানায় ঠিক চারটি পূর্ণসংখ্যা থাকে (প্রতিটি পূর্ণসংখ্যা 0 থেকে 255 এর মধ্যে থাকে) একক পিরিয়ড চিহ্ন দ্বারা পৃথক করা হয়৷

সুতরাং, যদি ইনপুট ip ="25525511136" এর মত হয়, তাহলে আউটপুট হবে ["254.25.40.123", "254.254.0.123"]

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি ফাংশন convertToNum() সংজ্ঞায়িত করুন, এটি s, শুরু, শেষ,
  • সংখ্যা :=0
  • আরম্ভ করার জন্য i :=শুরু করুন, যখন i <=শেষ করুন, আপডেট করুন (i 1 দ্বারা বৃদ্ধি করুন), করুন −
    • সংখ্যা :=(সংখ্যা * 10) + (s[i] - '0' এর ASCII)
    • যদি num> 255 হয়, তাহলে −
      • 10000 ফেরত
  • রিটার্ন নম্বর
  • একটি ফাংশন সংজ্ঞায়িত করুন addDots(), এটি অবস্থান নেবে,
  • res :=ফাঁকা স্ট্রিং
  • x :=0, posIndex :=0
  • আরম্ভ করার জন্য i :=0, যখন i <অবস্থানের আকার, আপডেট করুন (i 1 দ্বারা বৃদ্ধি করুন), করুন −
    • সংখ্যা :=পদ[i]
    • একটি স্ট্রিং str1 তৈরি করুন
    • temp :=num as string
    • res :=res + temp
    • যদি i <অবস্থানের আকার, তাহলে −
      • res :=res concatenate "।"
  • রিটার্ন রিটার্ন
  • একটি ফাংশন সল্ভ() সংজ্ঞায়িত করুন, এটি s, একটি স্ট্রিং অ্যারে ফলাফল, একটি অ্যারের অবস্থান, ডটকাউন্ট, এটি 3 দিয়ে শুরু করবে, স্টার্ট ইনডেক্স, এটি 0 দিয়ে শুরু করবে,
  • যদি dotCount অ-শূন্য হয় এবং ((s - 1 এর আকার) - startIndex + 1) 1, তাহলে −
    • temp :=convertToNum(s, startIndex, s-এর আকার)
    • যদি temp> =0 এবং temp <=255 হয়, তাহলে −
      • পজিশনের শেষে তাপমাত্রা ঢোকান
      • res :=addDots(পজিশন)
      • যদি res এর আকার s এর আকারের সমান হয়, তাহলে −
        • ফলাফলের শেষে রেস সন্নিবেশ করুন
    • প্রত্যাবর্তন
  • আরম্ভ করার জন্য i :=startIndex, যখন i
  • temp :=convertToNum(s, startIndex, i)
  • যদি temp> =0 এবং temp <=255 হয়, তাহলে −
    • পজিশনের শেষে তাপমাত্রা ঢোকান
    • সমাধান(গুলি, ফলাফল, অবস্থান, ডটকাউন্ট - 1, i + 1)
    • পজিশন থেকে শেষ উপাদান মুছুন
  • একটি ফাংশন genIp সংজ্ঞায়িত করুন এতে একটি স্ট্রিং লাগবে
  • একটি অ্যারের ফলাফল সংজ্ঞায়িত করুন
  • একটি অ্যারে অবস্থান নির্ধারণ করুন
  • সমাধান(গুলি, ফলাফল, অবস্থান)
  • ফলাফল
  • প্রধান পদ্ধতি থেকে genIp(A) কল করুন
  • উদাহরণ (C++)

    আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

    #include <bits/stdc++.h>
    using namespace std;
    void print_vector(vector<auto> v){
       cout << "[";
       for(int i = 0; i<v.size(); i++){
          cout << v[i] << ", ";
       }
       cout << "]"<<endl;
    }
    typedef long long int lli;
    class Solution {
       public:
       lli convertToNum(string s,int start, int end){
          lli num = 0;
          for (int i = start; i <= end; i++) {
             num = (num * 10) + (s[i] - '0');
             if (num > 255)
                return 10000;
          }
          return num;
       }
       string addDots(vector <int> positions){
          string res = "";
          int x = 0;
          int posIndex = 0;
          for (int i = 0; i < positions.size(); i++) {
             int num = positions[i];
             ostringstream str1;
             str1 << num;
             string temp = str1.str();
             res += temp;
             if (i < positions.size() - 1)
                res += ".";
             }
             return res;
          }
          void solve(string s, vector <string> &result,vector <int> positions, int dotCount = 3, int startIndex = 0){
             if (!dotCount && ((s.size() - 1) - startIndex + 1) >= 1) {
                int temp = convertToNum(s, startIndex, s.size() - 1);
                if (temp >= 0 && temp <= 255) {
                   positions.push_back(temp);
                   string res = addDots(positions);
                   if (res.size() - 3 == s.size()) {
                      result.push_back(res);
                }
             }
             return;
          }
          for (int i = startIndex; i < s.size(); i++) {
             int temp = convertToNum(s, startIndex, i);
             if (temp >= 0 && temp <= 255) {
                positions.push_back(temp);
                solve(s, result, positions, dotCount - 1, i + 1);
                positions.pop_back();
             }
          }
       }
       vector<string> genIp(string s){
       vector<string> result;
       vector<int> position;
       solve(s, result, position);
       return result;
       }
       vector<string> get_ip(string A) {
       return genIp(A);
    }};
    main(){
       Solution ob;
       string ip = "25525511136";
       print_vector(ob.get_ip(ip));
    }

    ইনপুট

    25525511136

    আউটপুট

    [255.255.11.136, 255.255.111.36, ]

    1. সমস্ত সম্ভাব্য উপায়ে একটি পূর্ণসংখ্যার বিভাজন সম্পাদনের জন্য C++ প্রোগ্রাম

    2. LCM খুঁজে পেতে C++ প্রোগ্রাম

    3. GCD খুঁজে পেতে C++ প্রোগ্রাম

    4. একটি দ্বিঘাত সমীকরণের সমস্ত মূল খুঁজে পেতে C++ প্রোগ্রাম