কম্পিউটার

C++ এ একই দৈর্ঘ্যের লাইনে রূপান্তর করে শব্দের একটি সেটকে ন্যায্যতা দেওয়ার জন্য প্রোগ্রাম


ধরুন আমাদের কাছে শব্দের একটি তালিকা এবং একটি প্রস্থ k আছে, আমাদের পাঠ্যটিকে এমনভাবে সাজাতে হবে যাতে প্রতিটি লাইনে ঠিক k অক্ষর থাকে এবং পাঠ্যটি সম্পূর্ণরূপে ন্যায়সঙ্গত হয়। এখানে আমরা প্রতিটি লাইনে যতগুলি শব্দ সন্নিবেশ করতে পারি ততগুলি শব্দ প্যাক করব। এবং প্রয়োজনে আমরা অতিরিক্ত স্পেস প্যাড করব ' ' যাতে প্রতিটি লাইনে ঠিক k অক্ষর থাকে।

এখানে শব্দের মধ্যে অতিরিক্ত স্পেস যতটা সম্ভব সমানভাবে বিতরণ করা উচিত। যদি একটি লাইনে স্পেস সংখ্যা শব্দের মধ্যে সমানভাবে ভাগ না হয়, বাম দিকের খালি স্লটগুলি ডানদিকের স্লটের চেয়ে বেশি স্পেস বরাদ্দ করা হবে। পাঠ্যের চূড়ান্ত লাইনের জন্য, এটিকে ন্যায়সঙ্গত রেখে দেওয়া উচিত এবং শব্দগুলির মধ্যে কোনও অতিরিক্ত স্থান ঢোকানো হবে না।

সুতরাং যদি ইনপুট হয় ["The", "grumpy", "wizards", "make", "toxic", "brew", "for", "the", "emil", "queen", "and" , "জ্যাক"], এবং k =13

তাহলে আউটপুট হবে −

The grumpy
wizards make
toxic brew
for the evil
queen and
Jack

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

  • ফলাফল নামে একটি অ্যারে তৈরি করুন
  • 0 থেকে a আকারের রেঞ্জের জন্য, i j
      দ্বারা আপডেট করুন
    • প্রস্থ :=0
    • j-এর জন্য i থেকে a এর আকার এবং প্রস্থ + a[j] + j - i <=b,
      • প্রস্থ :=প্রস্থ + a[j]
      • এর আকার
    • স্পেস :=1, অতিরিক্ত :=0
    • যদি j – 1 !=1 এবং j !=a এর আকার হয়, তাহলে
      • স্পেস :=(b - প্রস্থ) / j – i – 1
      • অতিরিক্ত :=(b - প্রস্থ) মোড (j – i – 1)
    • লাইন :=a[i]
    • i + 1 থেকে j
        রেঞ্জে k-এর জন্য
      • রেখা সহ ফাঁকা স্থানগুলির স্পেস নম্বর সংযুক্ত করুন
      • যদি অতিরিক্ত> 0 হয়, তাহলে লাইন দিয়ে স্পেস সংযুক্ত করুন
      • অতিরিক্ত 1 কমিয়ে দিন
      • রেখা :=লাইনের সাথে a[k] সংযুক্ত করুন
    • x :=রেখার আকার
    • রেখা :=রেখা সহ শূন্যস্থানের সংখ্যা (b - x) সংযুক্ত করুন
    • ফলাফলের মধ্যে লাইন ঢোকান
  • রিটার্ন রিটার্ন

উদাহরণ (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;
}
void print_vector(vector<vector<auto> > v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << "[";
      for(int j = 0; j <v[i].size(); j++){
         cout << v[i][j] << ", ";
      }
      cout << "],";
   }
   cout << "]"<<endl;
}
class Solution {
   public:
   vector<string> fullJustify(vector<string> &a, int b) {
      vector <string> result;
      int i, j;
      for(i = 0; i < a.size(); i = j){
         int width = 0;
         for(j = i; j < a.size() && width + a[j].size() + j - i <= b; j++){
            width += a[j].size();
         }
         int space = 1;
         int extra = 0;
         if(j - i != 1 && j != a.size()){
            space = (b - width) / (j - i - 1);
            extra = (b - width) % (j - i - 1);
         }
         string line(a[i]);
         for(int k = i + 1; k < j; k++){
            line += string(space, ' ');
            if(extra-- > 0){
               line += " ";
            }
            line += a[k];
         }
         int x = line.size();
         line += string(b - x, ' ');
         result.push_back(line);
      }
      return result;
   }
};
main(){
   vector<string> v = {"The", "grumpy", "wizards", "make", "toxic", "brew", "for", "the", "evil", "queen", "and", "Jack"};
   Solution ob;
   print_vector(ob.fullJustify(v, 13));
}

ইনপুট

["I", "love", "coding.", "here", "we", "will", "write", "some", "program"]
16

আউটপুট

[The grumpy,
wizards make,
toxic brew,
for the evil,
queen and,
Jack ,]

  1. C++ এ দুটি লাইনের ছেদ বিন্দুর জন্য প্রোগ্রাম

  2. STL-এ সেট_ইউনিয়ন বাস্তবায়নের জন্য C++ প্রোগ্রাম

  3. STL-এ Set_Intersection বাস্তবায়নের জন্য C++ প্রোগ্রাম

  4. STL-এ সেট_ডিফারেন্স বাস্তবায়নের জন্য C++ প্রোগ্রাম