বাউন্ডিং বক্সটি হাইলাইট করুন, প্রথম খণ্ড: কার্টেসিয়ান গ্রিড


19

আপনাকে অক্ষরের একটি আয়তক্ষেত্রাকার গ্রিড দেওয়া হয়েছে .এবং এর #মতো:

..........
..#.......
....#..#..
...#......
..........

আপনার কাজটি হ'ল সম্পূর্ণ অক্ষ-প্রান্তিকিত সীমানা বাক্সটি #আরও সহ পূরণ করুন #:

..........
..######..
..######..
..######..
..........

অক্ষ-সংযুক্ত বাউন্ডিং বাক্সটি সবচেয়ে ছোট আয়তক্ষেত্র যা সমস্ত ধারণ করে #

আরো চাই? দ্বিতীয় খণ্ড চেষ্টা করুন!

বিধি

আপনি ও এর স্থানে যে কোনও দুটি পৃথক মুদ্রণযোগ্য ASCII অক্ষর (0x20 থেকে 0x7E, সহ) ব্যবহার করতে পারেন । যদিও তাদের নির্দিষ্টকরণের বাকী অংশ হিসাবে এবং উল্লেখ করা চালিয়ে যাব ।#.#.

ইনপুট এবং আউটপুট হয় একক লাইনফিড-বিচ্ছিন্ন স্ট্রিং বা স্ট্রিংগুলির তালিকা (প্রতিটি লাইনের জন্য একটি) হতে পারে তবে ফর্ম্যাটটি সামঞ্জস্যপূর্ণ হতে হবে।

আপনি ধরে নিতে পারেন ইনপুটটিতে কমপক্ষে একটি রয়েছে #এবং সমস্ত লাইন একই দৈর্ঘ্য।

আপনি কোনও প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন এবং ইনপুট গ্রহণ এবং আউটপুট সরবরাহের আমাদের মানক পদ্ধতির কোনও ব্যবহার করতে পারেন ।

আপনি যে কোনও প্রোগ্রামিং ভাষা ব্যবহার করতে পারেন , তবে লক্ষ্য করুন যে এই ফাঁকগুলি ডিফল্টরূপে নিষিদ্ধ করা হয়েছে।

এটি , তাই সংক্ষিপ্ততম বৈধ উত্তর - বাইটগুলিতে মাপা - জয় w

পরীক্ষার মামলা

প্রতিটি পরীক্ষার ক্ষেত্রে একে অপরের পাশে ইনপুট এবং আউটপুট থাকে।

#    #

...    ...
#..    #..
...    ...

...    ...
#..    ###
..#    ###

.#.    ###
#..    ###
..#    ###

.....    .....
.#.#.    .###.
.....    .....

...    ...
.#.    .#.
...    .#.
.#.    .#.
...    ...

..........    ..........
..........    ..........
....#.....    ....#.....
..........    ..........

..........    ..........
..........    ..........
....#.....    ...##.....
...#......    ...##.....

..........    ..........
..#.......    ..###.....
....#.....    ..###.....
...#......    ..###.....

..........    ..........
..#.......    ..######..
....#..#..    ..######..
...#......    ..######..

.........#    ..########
..#.......    ..########
....#..#..    ..########
...#......    ..########

"ফর্ম্যাটটি ধারাবাহিক হতে হবে" বলতে কী বোঝ? ইনপুট ফর্ম্যাটটির কি আউটপুট ফর্ম্যাটটির সাথে সামঞ্জস্য হওয়া দরকার বা এর অর্থ কি ইনপুট ফর্ম্যাটটি সামঞ্জস্য হওয়া দরকার এবং আউটপুট ফর্ম্যাটটিও সামঞ্জস্যপূর্ণ হওয়া দরকার?
এমিগানা

@ এমিগানা ইনপুট এবং আউটপুট ফর্ম্যাটগুলি একই হওয়া দরকার।
মার্টিন এন্ডার

@ মার্টিনএেন্ডার আমার প্রোগ্রামটি 2D চর অ্যারের ইনপুট করে এবং এটি প্রক্রিয়া করে। ফলাফলটি এখনও একটি 2 ডি চর অ্যারে, তবে এটি ডিফল্টরূপে অ্যারের সামগ্রী হিসাবে প্রদর্শিত হবে, যেমন স্ট্রিংগুলি নিউলাইন দ্বারা পৃথক করা হয়েছে। এটা কি গ্রহণযোগ্য? অথবা প্রদর্শিত আউটপুটটি 2 ডি অ্যারের স্ট্রিং প্রতিনিধিত্ব হওয়া উচিত?
লুইস মেন্ডো

@ লুইস মেন্ডো আমি এই ধরণের একটি স্ট্রিং প্রতিনিধিত্ব আশা করি। লাইনফীড বিভাজিত স্ট্রিং কিনা হয় আমি বলতে পারব না আপনার ভাষায় নেস্টেড অ্যারের প্রাকৃতিক স্ট্রিং উপস্থাপনা। (যদিও, যেহেতু যে, একটি "উলটাকর" উপস্থাপনা হয়না কারণ আপনার ইনপুট ফরম্যাট, বিভিন্ন সম্ভবত নয় বলে মনে হচ্ছে না।)
মার্টিন Ender

গ্রাফিকাল আউটপুট অনুমোদিত?
12Me21

উত্তর:


17

ভিবিএ এক্সেল, 150 বাইট 146 বাইট

নির্দেশ:

দুটি ফাঁকা ওয়ার্কশিট সহ একটি ওয়ার্কবুক তৈরি করুন: পত্রক 1 এবং পত্রক 2। পত্রক 1 এ ইনপুট সেট করুন এবং তারপরে শীট 1 কোড মডিউলটিতে নিম্নলিখিত কোডটি রাখুন

Sub A:For Each C In UsedRange:If C.Value="#"Then Sheet2.Range(C.Address)="#"
Next:For Each C In Sheet2.UsedRange:Range(C.Address)="#":Next:End Sub

কোডটি অবহিত করা:

Sub A()

For Each C In UsedRange
    If C.Value = "#" Then Sheet2.Range(C.Address) = "#"
Next

For Each C In Sheet2.UsedRange
    Range(C.Address) = "#"
Next

End Sub

ব্যাখ্যা:

  1. ব্যবহৃত ব্যাপ্তি পত্রক 1 এর প্রতিটি ঘরে লুপ করুন
  2. থেকে কন্ডিশনাল স্টেটমেন্ট সেট কপি প্রত্যেক সেল ব্যবহৃত পরিসীমা পত্রক 1 চরিত্রের হ্যাশট্যাগ (#) রয়েছে এবং পেস্ট করুন পত্রক 1 হিসাবে একই ঠিকানা দিয়ে পত্রক 2 সেল থেকে এটি।
  3. প্রতিটি কক্ষের ঠিকানাটি অনুলিপি করতে ব্যবহৃত রেঞ্জ শিট 2 এর প্রতিটি ঘরে আবার লুপ করুন এবং তারপরে শিট 1-তে ঘরে ব্যবহৃত অক্ষর শিট 2 এর একই ঠিকানা সহ হ্যাশট্যাগ (#) অক্ষর নির্ধারণ করতে এটি ব্যবহার করুন।

আই / ও উদাহরণ:

ইনপুট

আউটপুট

সতর্কতা: আপনি প্রোগ্রামটি চালানোর সময় শিট 2 এর প্রতিটি কক্ষ সর্বদা ফাঁকা রয়েছে তা নিশ্চিত করুন।


1
গেল =C.Valueপ্রথম লাইন হতে ="#"?
রিলে

@ রিলে হ্যাঁ, এটা হতে পারে। ধন্যবাদ।
আনাস্তাসিয়া-রোমানোভা 秀

দেখে মনে হচ্ছে আমি সাব এবং শেষ উপাংশগুলি মুছে ফেলা, তারপরে তাত্ক্ষণিক উইন্ডোতে প্রোগ্রামটি চালিয়ে আরও কয়েকটি বাইট সঞ্চয় করতে পারি। আমি এটি চেষ্টা করবো না এটি কাজ করে বা না করুক mor এই মুহুর্তে এক্সেল অ্যাক্সেস করা যায়নি ...
আনাস্তাসিয়া-রোমানোভা 秀

তবে আপনি যদি তা করেন তবে তা এখনও কোনও প্রোগ্রাম বা ফাংশন হিসাবে গণ্য হবে?
নীল

আনুষ্ঠানিক সংজ্ঞা সম্পর্কে @ নীল ডান্নো তবে আমার কাছে একটি প্রোগ্রাম হ'ল নির্দেশাবলীর একটি সেট এবং এটি সীমাবদ্ধতা থাকা সত্ত্বেও যদি আমরা কোডটি তাত্ক্ষণিক উইন্ডোতে রাখি তবে এটি স্বাভাবিক প্রোগ্রামের মতো কাজ করে। এর মধ্যে একটি হ'ল এই কোডটি এখানে কার্যকর করা যায় না। হা-হা: ডি
আনস্তাসিয়া-রোমানোভা 秀

8

05AB1E , 70 68 69 61 58 60 40 বাইট

€S`¹gG~}Dg©L*0KŸ<U¹v¼y1åi®FXNå}ë0®×}J}¾ä

ব্যাখ্যা

€S`                                       # split each string in input to a charlist and place separately on stack
   ¹gG~}                                  # OR the char arrays to produce a single list with 1's in the columns that have 1's and 0 in the rest
        Dg L*                             # multiply by indices (1-indexed)
          ©                               # store row length in register
             0K                           # remove 0's (the indices which should not have 1's
               Ÿ<U                        # store a list of the indices that should have 1's in X
                  ¹v                 }    # for each string in input
                    ¼                     # increase counter
                     y1åi      ë   }      # if the row contains at least one 1
                         ®FXNå}           # push 1 for indices which should have 1 and else 0
                                0®×       # else push a row of 0's
                                    J     # join into a string
                                      ¾ä  # split the string in rows

এটি অনলাইনে চেষ্টা করুন


7

গণিত, 91 70 বাইট

21 মার্টিনএেন্ডারের কারণে 21 টি বাইট সংরক্ষণ করা হয়েছে ।

ReplacePart["."+0#,Tuples[Range@@@MinMax/@(#~Position~"#")]]->"#"]&

বেনামে ফাংশন। ইনপুট হিসাবে একটি অক্ষর ম্যাট্রিক্স গ্রহণ করে একটি আউটপুট হিসাবে একটি অক্ষর ম্যাট্রিক্স প্রদান করে। ইউনিকোড অক্ষরটি ইউ + এফ 3 সি 7 এর জন্য \[Transpose]


5

সি #, 262 251 বাইট

s=>{int l,t,r,b,i,j,k;l=t=r=b=i=-1;for(;++i<s.Length;){j=s[i].IndexOf('#');if(j>-1){k=s[i].LastIndexOf('#');l=l==-1|j<l?j:l;t=t==-1?i:t;r=k>r?k:r;b=i;}}for(i=t;i<=b;++i)for(j=l;j<=r;){var c=s[i].ToCharArray();c[j++]='#';s[i]=new string(c);}return s;};

আমার আরও সময় পেলে এটি আরও গল্ফ করবে।

এটি একটি মধ্যে সংকলন Func<string[], string[]>

ফর্ম্যাট সংস্করণ:

s =>
{
    int l, t, r, b, i, j, k;
    l = t = r = b = i = -1;

    for (; ++i < s.Length;)
    {
        j = s[i].IndexOf('#');
        if (j > -1)
        {
            k = s[i].LastIndexOf('#');

            l = l == -1 | j < l ? j : l;

            t = t == -1 ? i : t;

            r = k > r ? k : r;

            b = i;
        }
    } 

    for (i = t; i <= b; ++i)
        for (j = l; j <= r;)
        {
            var c = s[i].ToCharArray();
            c[j++] = '#';
            s[i] = new string(c);
        }

    return s;
};

5

জেলি , 21 19 18 17 বাইট

|/Tr/FṬ|
ỴµZÇZ&ÇY

এটি একটি সম্পূর্ণ প্রোগ্রাম। ইনপুট এবং আউটপুট হল 0 'গুলি এবং 1 এর স্ট্রিং, লাইনফিড দ্বারা সীমিত।

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

কিভাবে এটা কাজ করে

ỴµZÇZ&ÇY  Main link. Argument: s (string)

Ỵ         Split s at linefeeds into the array A.
 µ        Begin a new, monadic chain. Argument: A
  Z       Zip/transpose A.
   Ç      Apply the helper link to the transpose.
    Z     Zip/transpose to restore the original order.
      Ç   Apply the helper link to A.
     &    Take the bitwise AND of both results.
       Y  Join, separating by linefeeds.

|/Tr/FṬ|  Helper link. Argument: A (array of strings)

|/        Reduce A columnwise by bitwise OR. This casts to integer.
  T       Truth; yield the indices of 1's.
   r/     Reduce by range. This yields an exponentially growing, nested, ragged
          array that contains all integers between the lowest and highest index
          in the previous result, at least once but possibly multiple times.
     F    Flatten the result.
      Ṭ   Untruth; yield an array with 1's at the specified indices.
          Multiple occurrences of the same index are ignored.
       |  Take the bitwise OR of the result and each row of A.


3

স্কালা, 317 টি অক্ষর

val a=input.split("\n");val e=a.map{s=>(s.indexOf("#"),s.lastIndexOf("#"))}.zipWithIndex.filter(_._1._1!= -1);val b=(e.map{s=>s._1._1}.min,e.map{s=>s._1._2}.max,e.head._2,e.last._2);print((0 to a.length-1).map{y=>(0 to a(y).length-1).map{x=>if(x>=b._1&&x<=b._2&&y>=b._3&&y<=b._4)"#" else "."}.mkString+"\n"}.mkString)

আরও পঠনযোগ্য সংস্করণ, সম্ভবত এটি আরও গল্ফ করতে পারে:

val a=input.split("\n")
val e=a.map{s=>
    (s.indexOf("#"),s.lastIndexOf("#"))
}.zipWithIndex        // Need the indexes for the Y values
.filter(_._1._1!= -1) // Ugly because of tupleception: (actual tuple, index)

val b=(
    e.map{s=>s._1._1}.min,
    e.map{s=>s._1._2}.max,
    e.head._2,
    e.last._2)

print(
    (0 to a.length-1).map{y=>
        (0 to a(y).length-1).map{x=>
            if(x>=b._1&&x<=b._2&&y>=b._3&&y<=b._4)"#" 
            else "."
        }.mkString+"\n"
    }.mkString
)

3

জাভাস্ক্রিপ্ট (ES6), 168 বাইট

s=>/^#/gm.test(s)?/#$/gm.test(s)?s.replace(/^.*#[^]*#.*$/m,s=>s.replace(/./g,'#'))?f(s.replace(/.$/gm,'')).replace(/$/gm,'.'):f(s.replace(/^./gm,'')).replace(/^/gm,'.')

মাল্টলাইন স্ট্রিং হিসাবে ইনপুট নেয়। .কমপক্ষে একটি লাইন শুরু না হওয়া এবং একটিটি দিয়ে শেষ হওয়া অবধি সমস্ত লাইন থেকে শীর্ষস্থানীয় এবং অনুসরণকারীকে স্ট্রিপিংয়ের মাধ্যমে কাজ করে #, তারপরে যতটা সম্ভব লাইন নির্বাচন করে তবে সমাপ্ত লাইনগুলিকে শুরু করে এবং শেষ করে #সমস্ত .এসকে পরিবর্তন করে #। সম্ভবত সহজেই গল্ফযোগ্য।


3

আর, 158 155 বাইট

এই প্রোগ্রামটি ইনপুট পয়েন্ট .এবং হ্যাশট্যাগগুলি গ্রহণ করে #, লাইন লাইন।

v=c();f=which((d=matrix(strsplit(paste0(a<-scan(,""),collapse=""),"")[[1]],nr=sum(a<0),b=T))=="#",a=T);d[min(f[,1]):max(f[,1]),min(f[,2]):max(f[,2])]="#";d

অসমাপ্ত:

a<-scan(,"")             #Input

v=c()                   #Empty vector
f=which((d=(matrix(strsplit(paste0(a,collapse=""),"")[[1]],nr=length(a),b=T)))=="#",a=T) #Main work is here !


d[min(f[,1]):max(f[,1]),min(f[,2]):max(f[,2])]="#"                        #Creates 
                                                                          #the new figure

d                       #Displays it

তৃতীয় লাইনের বিশদটি এখানে:

paste0(a,collapse="") 
#Collapses the input into a single string

strsplit(paste0(a,collapse=""),"")[[1]] 
#Split this string character-wise

matrix(strsplit(paste0(a,collapse=""),"")[[1]],nr=sum(a<0),b=T) 
#Creates and fills (by row) a matrix with number of row the number of line of the input

which((d=(matrix(strsplit(paste0(a,collapse=""),"")[[1]],nr=l,b=T)))=="#",a=T)
#Gives the index of the matrix's elements that are "#"

3

পাওয়ারশেল v3 +, 215 162 148 144 139 বাইট

param($n)$n|%{(((-join(0..($n[0].length-1)|%{$i=$_;+('1'-in(0..($n.length-1)|%{$n[$_][$i]}))}))-replace'(?<=1.*?).(?=.*?1)',1),$_)[0-ge$_]}

স্ট্রিং একটি অ্যারে হিসাবে ইনপুট লাগে $n, সঙ্গে 0পরিবর্তে .এবং 1পরিবর্তে #। তারপরে, আমরা $nপ্রতিটি পুনরাবৃত্তি পরীক্ষা করে দেখি যে বর্তমান স্ট্রিংটি 0(যেমন 1এটিতে একটি আছে) এর চেয়ে ছোট কিনা এবং যদি তা হয় তবে একটি স্ট্রিং আউটপুট দেয়। কোনও / অপারেশনের জায়গায় সিউডো-টের্নারি ব্যবহার করে।ifelse

স্ট্রিংটি ইনপুট স্ট্রিংয়ের প্রস্থের মধ্য দিয়ে লুপগুলি থেকে নির্মিত হয়। প্রতিটি পুনরাবৃত্তি, আমরা সংশ্লিষ্ট উল্লম্ব কলামে কোথাও খুঁজে পাওয়া যায় কিনা তার উপর নির্ভর করে আমরা একটি 0বা তার 1উপর নির্ভর করি 1। শেষ পরীক্ষার ক্ষেত্রে, উদাহরণস্বরূপ, এর ফলে একটি স্ট্রিংয়ের মতো হবে 0011001001-inঅপারেটরের জন্য v3 + প্রয়োজন । এই স্ট্রিংটি কোনও "অভ্যন্তরীণ" 0গুলিকে 1এস এর সাথে প্রতিস্থাপন করার জন্য অভিনব-ড্যান্সি রিজেক্স প্রতিস্থাপনের সাথে যুক্ত করা হয়েছে। এতে সহায়তার জন্য আড্ডায় বিজনেস ক্যাটকে অনেক ধন্যবাদ । আমাদের স্ট্রিং 0011111111এই মুহূর্তে হবে।

অন্যথায়, বর্তমান (সমস্ত-জিরো) স্ট্রিং আউটপুট করুন $_

ফলাফলযুক্ত স্ট্রিংগুলি পাইপলাইনে রেখে যায় এবং আউটপুট অন্তর্ভুক্ত থাকে। Write-Outputস্ট্রিংগুলির অ্যারের জন্য ডিফল্ট প্রতিটি উপাদানগুলির মধ্যে একটি নতুন লাইন থাকে, যাতে দৃশ্যত যা ঘটে।

উদাহরণ

PS C:\Tools\Scripts\golfing> .\highlight-the-bounding-box-cartesian.ps1 '0000000001','0010000000','0000100100','0001000000'
0011111111
0011111111
0011111111
0011111111

PS C:\Tools\Scripts\golfing> .\highlight-the-bounding-box-cartesian.ps1 '0000000000','0000000000','0000100000','0001000000'
0000000000
0000000000
0001100000
0001100000

2

পাইথন, 219 212 বাইট

def b(a):j=len(a[0]);g=range;z=g(len(a));h=[i for i in z if'#'in a[i]];w=[i for i,c in[(i,[r[i]for r in a])for i in g(j)]if'#'in c];return[[any((r<h[0],h[-1]<r,c<w[0],w[-1]<c))and'.'or'#'for c in g(j)]for r in z]

(যদিও আমি মনে করি যে অন্য একটি পদ্ধতিও কম সংক্ষিপ্ত হতে পারে)

চরগুলির তালিকার একটি তালিকা নেয় এবং ফেরত দেয়।

আইডিয়োনে এটি পরীক্ষা করুন


2

পার্ল 6 , 62 বাইট

{.[.grep(/a/,:k).minmax;$_».grep('a',:k).flat.minmax]='a'xx*}

একটি বেনাম রুটিন যা আর্গুমেন্ট হিসাবে অক্ষরের অ্যারে (ম্যাট্রিক্স উপস্থাপন করে) এর অ্যারে পাস করা যেতে পারে এবং এটিকে জায়গায় জায়গায় সংশোধন করে যাতে কলিং স্কোপটি পরে পরিবর্তিত অ্যারে থাকে।

"অন" চরিত্রের aপরিবর্তে ব্যবহার করে #। "অফ" চরিত্রটি যে কোনও কিছু হতে পারে, এটি পাত্তা দেয় না।


2

পাইথন 3, 153 বাইট

r=lambda w:list(zip(*w[::-1]))
f=lambda w,n=4:list(map(''.join,n and(('#'in w[0])and r(r(r(f(r(w),n-1))))or[w[0]]+foo(w[1:],n))or['#'*len(w[0])]*len(w)))

ইনপুট এবং আউটপুট স্ট্রিংগুলির একটি তালিকা।

ungolfed

r=lambda w:list(zip(*w[::-1]))   # rotate grid cw 90 degrees

def f(w,n=4):
    if n:
        if '#' in w[0]:
            u = r(r(r(f(r(w), n-1))))

        else:
            u = [w[0]] + foo(w[1:], n)

    else:
        u = ['#'*len(w[0])]*len(w)

 return list(map(''.join,u))

কার্যপ্রণালীর তত্ত্ব

মূল ধারণাটি হ'ল অ্যারের বাইরের চারপাশে সারি এবং কলামগুলি সরিয়ে ফেলা যদি তাদের একটি '#' না থাকে। যা অবশিষ্ট আছে তা পূরণ করতে হবে '#' গুলি।

এটি একটি পুনরাবৃত্তি ফাংশন ব্যবহার করে প্রয়োগ করা হয়।

কেস 1: সারি 0 তে একটি '#' থাকে না। ফলাফলগুলি সারি 0 + র পুনরায় ক্রিয়াকলাপগুলিতে রয়েছে

কেস 2: সারি 0-তে একটি '#' থাকে। আর কোনও সারি মুছে ফেলা যাবে না। অ্যারে সিডব্লিউটি ঘোরান যাতে column কলামটি এখন 0 সারি হয় Then ফলাফলটি সিসিডব্লু ঘোরা হয়।

বেস কেস: অ্যারেটি 4 বার আবর্তিত হয়েছে, এর অর্থ যদি সম্ভব হয় তবে সমস্ত বাহ্যিক সারি / কলামগুলি সরানো হয়েছে। যা অবশিষ্ট রয়েছে তা '#' এর সাথে পূরণ করা উচিত


2

পার্ল, 51 বাইট

জন্য +2 অন্তর্ভুক্ত -0p

STDIN এ ইনপুট দিন, অফ অক্ষর হয় A, অক্ষর হয়a , যেমন:

bounding.pl
AAAAAAAAAA
AAaAAAAAAA
AAAAaAAaAA
AAAaAAAAAA
AAAAAAAAAA
^D

bounding.pl:

#!/usr/bin/perl -0p
s%(?=\D*a).+%$a|=$&%eg;s%.*a.*%$a%g;s/a.*a/\L$&/g

একই দৈর্ঘ্য:

#!/usr/bin/perl -0p
s%.+%${a./a/g}|=$&%eg;s%.*a.*%$a1%g;s/a.*a/\L$&/g

1

পাইথন 2, 184 বাইট

def c(i):
 m=n=();e,z=enumerate,'for j,r in e(i):\n for k,c in e(r):%s'
 exec z%'\n  if"#"==c:m+=j,;n+=k,'
 exec z%'\n  if min(m)<=j<=max(m)<[]>min(n)<=k<=max(n):i[j][k]="#"'
 return i

ইনপুট এবং আউটপুট স্ট্রিংগুলির একটি তালিকা।

আইডিয়নে এটি ব্যবহার করে দেখুন (জোনাথন অ্যালানের পরীক্ষার পৃষ্ঠার কাঁটাচামচ)


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.