কোনও বিল্ট-ইন বাছাই পদ্ধতি ব্যবহার না করে স্ট্রিংগুলির তালিকা বাছাই করা


12

এই কোড গল্ফের লক্ষ্য হ'ল এমন একটি প্রোগ্রাম তৈরি করা যা কোনও বিল্ট-ইন বাছাইয়ের পদ্ধতি ব্যবহার না করে স্ট্রিংগুলির একটি তালিকা (আরোহী ক্রমে) বাছাই করে (যেমন পিএইচপি Array.Sort()তে। নেট sort(), ...)। নোট করুন যে এই বিধিনিষেধটি বিল্ট-ইন পদ্ধতি ব্যবহার করে বাদ দেয় যা একটি অ্যারে অবতরণ করে এবং তারপরে অ্যারেটিকে বিপরীত করে।

কিছু বিশদ:

  • আপনার প্রোগ্রামটি ইনপুটটির জন্য প্রম্পট করবে এবং এই ইনপুটটি কেবলমাত্র ASCII লোয়ার-কেস বর্ণমালার অক্ষরযুক্ত স্ট্রিংগুলির তালিকা a-z, ফাঁকা জায়গা ছাড়াই কমা দ্বারা পৃথক। উদাহরণ স্বরূপ:

    code,sorting,hello,golf
    
  • আউটপুটটি স্ট্রিংগুলির প্রদত্ত তালিকা হওয়া উচিত, তবে আরোহী ক্রমে সাজানো, ফাঁকা স্থান ছাড়াই কমা দ্বারা পৃথক separated উদাহরণ স্বরূপ:

    code,golf,hello,sorting
    

উত্তর:


3

গল্ফস্ক্রিপ্ট, 26 25 বাইট

","/.,{{.2$<{\}*}*]}*","*

বুদ্বুদ বাছাইয়ের সোজাসুজি বাস্তবায়ন

ওয়েব গল্ফস্ক্রিপ্ট এ এটি অনলাইন চেষ্টা করুন ।

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

","/     # Split the input string at commas.
.,       # Get the number of chunks.
{        # Do that many times:
  {      #   Reduce; for each element but the first:
    .2$< #     Push 1 if the last two strings are in descending order, 0 if not.
    {\}* #     Swap these strings that many times.
  }*]    #   Collect the strings dumped by reduce in an array.
}*       #
","*     # Join, separating by commas.

নিস! এটিকে উত্তর হিসাবে গ্রহণ করা কারণ এটি বর্তমানে গৃহীত প্রশ্নের চেয়ে কম।
প্রোগ্রামফক্স

10

রুবি 76 54 51 চর

x=gets.scan /\w+/;$><<x.dup.map{x.delete(x.min)}*?,

1
খুব সুন্দর, বোগোসর্ট : ডি
ডোরকনব

1
বাহ, এখন এটি আরও আকর্ষণীয়! কী হচ্ছে তা বুঝতে পেরে আমাকে কিছুক্ষণ এটি দেখতে হয়েছিল। আমি মনে করি এখন এটি নির্বাচনের ধরণের সামান্যতম প্রকরণ: পি
ডোরকনব

1
যেহেতু আইটেমগুলি আলফা অক্ষর হওয়ার গ্যারান্টিযুক্ত:x=gets.scan /\w+/
স্টিভেন রাম্বালস্কি

7

কে (১rs টি অক্ষর)

সম্ভবত সমস্যার চেতনা অবলম্বন করে না। কে-তে, বাছাই করা অপারেটর নেই। <xসাজানো ক্রমে x এর আইটেমের সূচকের একটি তালিকা প্রদান করে।

{x@<x}[","\:0:0]

ভাল, এটি এক ধরণের অন্তর্নির্মিত বাছাই, সুতরাং দুর্ভাগ্যক্রমে, আমি এটিকে উত্তর হিসাবে চিহ্নিত করতে পারি না। আমি যদিও ধারণাটি পছন্দ করি তাই +1!
ProgramFOX


3

রুবি, ৯৯ টি চর ( জিনোম সাজান )

a=gets.scan /\w+/
p=1
while a[p]
a[p]>a[p-1]?p+=2:(a[p],a[p-1]=a[p-1],a[p])
p-=1if p>1
end
$><<a*?,

এটি সবেমাত্র আমার বুদ্বুদ সাজানোর প্রয়োগকে মারধর করে:

রুবি, 110 104 101 অক্ষর ( বুদ্বুদ সাজান )

s=gets.scan /\w+/
(z=s.size).times{(0..(z-2)).map{|i|s[i],s[i+1]=s[i+1],s[i]if s[i]>s[i+1]}}
$><<s*?,

এটি list.lengthপুনরাবৃত্তি করে, কারণ সবচেয়ে খারাপ ক্ষেত্রে দৃশ্যের list.length - 1পুনরাবৃত্তি হয় এবং আরও একটিতে সত্যিকার অর্থে কিছু আসে যায় না এবং 2 টি অক্ষর সংরক্ষণ করে।

কেবল মজাদার জন্য, একটি কুইকোর্টের সংস্করণ:

রুবি, ১১৩ টি চর ( কুইকোর্ট )

q=->a{if a[1]
p=a.shift
l=[]
g=[]
a.map{|x|(x>p ?g:l).push x}
q[l]+[p]+q[g]
else
a
end}
$><<q[gets.scan /\w+/]*?,

আমি দেখেছি যে ইনপুট আইটেমগুলি সমস্ত অনন্য নয়, যেমন জিনোম সাজানোর এই প্রয়োগটি অসীমভাবে লুপ করে।
স্কট লিডলি

3

হাস্কেল, 141

import Data.List
m=minimum
s[]=[]
s l=m l:s(l\\[m l])
t[]=[]
t s=let(a,b)=span(/=',')s in a:t(drop 1 b)
main=interact$intercalate",".s.t.init

কমপক্ষে এটি ... দক্ষ সাজানোর


আপনি বাছাই বাছাই করে 11 টি অক্ষর সংরক্ষণ করতে পারেন: m=minimum s[]=[] s l=m l:(s$l\\[m l])(এই লাইনগুলির সাথে আপনার লাইনগুলিকে 2–4 প্রতিস্থাপন করুন)।
ব্যবহারকারী 3389669

initসেখানে তন্ন তন্ন একটি trailing নিমিত্ত আবশ্যক বলে মনে হচ্ছে না ,, কিংবা একটি trailing সম্পর্কে newline। t s=let(a,b)=span(/=',')s in a:t(drop 1 b), একটি প্যাটার্ন পাহারা ব্যবহার ব্যবহার করে সংক্ষিপ্ত করা যেতে পারে (>',')এবং তাদের মধ্যে স্থান ড্রপ 1 b: t s|(a,b)<-span(>',')s=a:t(drop 1b)
লাইকনি

সন্নিবেশ ফাংশন সহ সন্নিবেশ ব্যবহার x#(y:r)|y<x=y:x#r;x#r=x:rকরা সংক্ষিপ্ত। এটি সরাসরি ব্যবহার করা যেতে পারে tএবং এটি ব্যবহার না করে (\\)এবং intercalate","প্রতিস্থাপন করা যেতে পারে tail.((',':)=<<), আমদানি বাদ দেওয়া যেতে পারে। সব মিলিয়ে 101 বাইট: এটি অনলাইনে চেষ্টা করুন!
লাইকনি

2

ভিবিএ, 165

Sub q()
c=","
s=InputBox("?")
Z=Split(s, c)
t=UBound(Z)
For i=1 To t-1
For j=i To t
If Z(i)>Z(j) Then a=Z(i):Z(i)=Z(j):Z(j)=a
Next
Next
Debug.Print Join(Z,c)
End Sub

আমি 165 টি অক্ষর গণনা করছি ...
ডুরকনব

@ ডুরকনব, স্থির গণনা ... গ্রীস্মোনকি স্ক্রিপ্ট স্পষ্টতই আমাকে কোডটি টাইপ করার সময় আমাকে ভুল গণনা দিয়েছিল।
শনক

1
আপনি যে কোনও জায়গা থেকে মুক্তি পেতে পারেন Split
রাই-

দুবার ব্যবহার c=","এবং কল cকরা আসলে এই ক্ষেত্রে বাইট কাউন্টে যুক্ত হয়, বাইট গণনায় 7 বাইট অবদান রাখে, যেখানে কেবল "," দুবার ব্যবহার করলে 6 বাইট অবদান থাকবে। উপ কল ( sub q(s)) থেকে সরাসরি ইনপুট নিয়ে এবং বাম ধরণের ভেরিয়েন্ট \ স্ট্রিং ধরে ধরে ধরে আপনি আপনার বাইট কোডটি হ্রাস করতে পারেন । এতে পরিবর্তন করে For i=1 toআপনি আরও একটি বাইট হারাতে পারেন for i=1To। আপনি পরিবর্তন করে 5 বাইট হারাতে পারেন Debug.Print Join...করতেDebug.?Join...
টেলর স্কট

2

স্কালা, 122 বাইট

ওয়ান-লাইনার হিসাবে (88 বাইট):

.permutations.filter(_.sliding(2).map(w=>w(0)<w.last).fold(true)((a,b)=>a&&b)).toSeq(0)

(এটি কেবল করে একটি তালিকা বাছাই করবে list.permutations.fil...)

প্রোগ্রাম হিসাবে (122 বাইট):

println(readLine.split(",").toSeq.permutations.filter(_.sliding(2).map(w=>w(0)<w.last).fold(true)((a,b)=>a&&b)).toSeq(0))

আপনি যদি এটি স্টিন থেকে পড়তে চান তবে একটি দীর্ঘ সংস্করণ।

প্রদত্ত তালিকার সমস্ত ক্রিয়াকলাপের উপরে এটি পুনরাবৃত্তি করে যতক্ষণ না এটি সাজানো কোনওর উপর হোঁচট খায় না। এটি 10 ​​টি উপাদান তালিকার বাছাই করতে প্রায় 12 সেকেন্ড সময় লাগে এবং 11 উপাদানগুলির জন্য এক মিনিটেরও বেশি সময় লাগে না fast

[সম্পাদনা] আইটেমগুলি অনন্য <হতে হবে বা এটি দ্বারা প্রতিস্থাপন করা যেতে পারে <=। এছাড়াও, নেক্রো জন্য দুঃখিত।


1

জাভাস্ক্রিপ্ট 128

a=prompt().split(',');b=[];for(i in a){b.push(a[i]);k=0;for(j in b){j=k;b[j]>a[i]?[c=b[j],b.splice(j,1),b.push(c)]:k++}}alert(b)

ডেমো ভাজা

আমি একটি উপায় নির্মূল করার জন্য খোঁজ করছি b


2 টি চর সংরক্ষণ করার []পরে অংশটির চারপাশে সরিয়ে ফেলুন?
ডুরকনব

@ ডুরকনব আমি পাওয়ার আগেই এটি চেষ্টা করেছি SyntaxError: missing : in conditional expressionকারণ ?:;(শর্টহ্যান্ড if/else) ব্যবহার করার জন্য কেবল দুটি পিসি কোড নেওয়ার কথা (যেমন true?b++:b--;) ব্যবহার করা হচ্ছে [, ]এটি একটি হ্যাক, কেন এখনও এটি নিশ্চিতভাবে নিশ্চিত না যে এটি কেন কাজ করে, আমি মনে করি এটি খালি অ্যারে হিসাবে বোঝে ঘোষণা, একটি স্ট্যান্ড-অ্যালোন কমান্ড হিসাবে একটি এলোমেলো স্ট্রিং বা সংখ্যা স্থাপন মত। তবে আপনি এখনও নির্দ্বিধায় মুক্ত মনে করতে পারেন।
ম্যাথ চিলার

হুম, আমি মনে করি আমার ভুল হয়েছে। কমা অপারেটর একবারে একাধিক কোডের টুকরোগুলি কার্যকর করতে পারে। প্রথম বন্ধনী ব্যবহার করে কাজ করে, তাই আমি মনে করি ?:অপারেটরের প্রাধান্য কম,
ডোরকনব

না, আপনি চেষ্টা করেছেন? পেরেনথেসিস এখনও কাজ করে ...
ডোরকনব

@ ডোরকনব আপনার অধিকার , যদিও আমি চেষ্টা করেছিলাম {, }এবং এটি কার্যকর হয়নি - আমি পেয়েছি SyntaxError: missing : after property id। অগ্রাধিকার প্রথম বন্ধনী হিসাবে সর্বদা প্রথম। আমি এখনও একটি উত্সাহ চাই ...
ম্যাথ চিলার

1

পিএইচপি 83 বাইট

<?for($x=fgetcsv(STDIN);$x;)${$x[0]>min($x)?x:a}[]=array_shift($x)?><?=join(~Ó,$a);

একটি হে (ঢ 3 ) একটি নির্বাচন সাজানোর বাস্তবায়ন। Óচরিত্র 211 হয়; বিট-ইনভার্টেড কমা।

নমুনা ব্যবহার:

$ more in.dat
code,sorting,hello,golf

$ php list-sort.php < in.dat
code,golf,hello,sorting

1

পাইথন 3 (80 টি চর)

l=input().split(',')
m=[]
while l:m+=[l.pop(l.index(min(l)))]
print(','.join(m))

সমতুল্য দৈর্ঘ্যের সময়-বিবৃতিটির এখানে একটি পরিবর্তন রয়েছে:

while l:x=min(l);m+=[x];l.remove(x)

1

ম্যাথামেটিকাল 66 56

Row[#[[Ordering@#]]&[InputString[]~StringSplit~","],","]

বিল্ট-ইন প্রতীক ছাড়া অন্য কিছু সমাধান Ordering:

বোগোসর্ট: 84 74

NestWhile[RandomSample,InputString[]~StringSplit~",",!OrderedQ@#&]~Row~","

বুদ্বুদ বাছাই করুন: 93 83

Row[InputString[]~StringSplit~","//.{x___,i_,j_,y___}/;j~Order~i==1:>{x,j,i,y},","]

বোগোসর্টের মতো অদক্ষতার মতো আর একটি সমাধান: 82 72

#~Row~","&/@Permutations[InputString[]~StringSplit~","]~Select~OrderedQ;

1

পাইথন 3.5+, 73 বাইট

এটি স্টিভেন রাম্বালস্কির উত্তর থেকে অনুপ্রেরণা গ্রহণ করে তবে কিছু সময়ের জন্য লুপের পরিবর্তে তালিকা বোঝার ব্যবহার করে; পুনরাবৃত্তির সংখ্যা অনুলিপি করা তালিকা থেকে আসে lযার জন্য এটি অতিরিক্ত আনপ্যাকিং সাধারণীকরণ এবং পাইথন 3.5 এর প্রয়োজন হয়

l=input().split(',');print(*[l.pop(l.index(min(l)))for _ in[*l]],sep=',')

0

আর

বুদ্বুদ বাছাই করুন: 122 118 টি অক্ষর

a=scan(,"",sep=",");h=T;while(h){h=F;for(i in 1:(length(a)-1)){j=i+1;if(a[i]>a[j]){a[j:i]=a[i:j];h=T}}};cat(a,sep=",")

বোগোসর্ট: 100 টি অক্ষর

a=scan(,"",sep=",");while(any(apply(embed(a,2),1,function(x)x[1]<x[2]))){a=sample(a)};cat(a,sep=",")

0

পার্ল, 159

perl -F"," -lape "$m=$m<length()?length():$m for@F;$_{10**(2*$m)*sprintf'0.'.'%02d'x$m,map-96+ord,split//}=$_ for@F;$_=join',',map$_{$_+0},grep exists$_{$_+0},'0'.1..'0'.10**100"

এটি কখনও জয়ের সুযোগ দাঁড়ায়নি, তবে এটিকে ভাগ করে নেওয়ার সিদ্ধান্ত নিয়েছে কারণ আমি যুক্তিটি পছন্দ করলেও এটি গোলমাল করলেও :) এর পেছনের ধারণাটি হ'ল প্রতিটি শব্দকে একটি পূর্ণসংখ্যায় রূপান্তর করা ( অর্ড ফাংশনটি ব্যবহার করে ), আমরা সংখ্যাটি সংরক্ষণ করি একটি হ্যাশটির মূল কী এবং মান হিসাবে স্ট্রিং, এবং তারপরে আমরা সমস্ত সংখ্যার মাধ্যমে ক্রমবর্ধমান পুনরাবৃত্তি করি (এই ক্ষেত্রে 1..10 ** 100) এবং সেইভাবে আমরা আমাদের স্ট্রিংগুলি বাছাই করি।

সতর্কতা : আপনার কম্পিউটারে এই কোডটি চালাবেন না, যেহেতু এটি ট্রিলিয়ন + ইন্টিজারের মধ্য দিয়ে যায়। আপনি যদি এটি পরীক্ষা করতে চান তবে আপনি উপরের সীমার সীমাটি এবং ইনপুট দীর্ঘ-দৈর্ঘ্যের স্ট্রিংগুলি কম করতে পারেন। যদি কোনও কারণে এটি নিয়মের বিরুদ্ধে থাকে তবে দয়া করে আমাকে জানান এবং আমি প্রবেশটি মুছব!


0

জেএস: 107 অক্ষর - বুদ্বুদ বাছাই করুন

a=prompt().split(/,/);for(i=a.length;i--;)for(j=0;j<i;)a[j]>a[j+1]?[b=a[j],a[j]=a[++j],a[j]=b]:j++;alert(a)

আমি @ ট্রাইজিটপ্রোগ্রামিংসট্রাইটের উত্তরের দিকে চেয়েছি এবং এটি উন্নত করার চেষ্টা করেছি, তবে কিছুটা ভিন্নভাবে এটি প্রয়োগ করে শেষ করেছি।


0

জাভা, 134 বাইট

জিনোম বাছাই কার্যকর করে এমন একটি পদ্ধতি।

void s(String[]a){int m=a.length-1,i=0;while(i<m){while(i>=0&&a[i].compareTo(a[i+1])>0){String t=a[i];a[i]=a[i+1];a[i+1]=t;i--;}i++;}}

0

সুইফট, 101 বাইট

func s(a:[String])->[String]{return a.count<2 ? a:(s(a.filter{$0<a[0]})+[a[0]]+s(a.filter{$0>a[0]}))}

Ungolfed:

//quicksort
func sort(a:[String]) -> [String]
{
    //return the array if its length is less than or equal to 1
    if a.count <= 1
    {
        return a
    }
    //choose the first element as pivot
    let pivot = a[0]
    //retrieve all elements less than the pivot
    let left = a.filter{ $0 < pivot }
    //retrieve all elements greater than the pivot
    let right = a.filter{ $0 > pivot }
    //sort the left partition, append a new array containing the pivot,
    //append the sorted right partition
    return sort(left) + Array<String>(arrayLiteral: pivot) + sort(right)
}

এটি প্রদত্ত কমা-বিচ্ছিন্ন বিন্যাসে স্ট্রিংগুলি গ্রহণ করে না এবং ফেরত দেয় না।
লাইকনি

0

𝔼𝕊𝕄𝕚𝕟, 24 টি অক্ষর / 30 বাইট (অযৌক্তিক)

ï⇔Ĕ⍪;↻ïꝈ)ΞÿѨŗ ï,⇀$≔МƵï;Ξ

Try it here (Firefox only).

নির্বাচনের ধরণের ব্যবহার!

ব্যাখ্যা

ï⇔Ĕ⍪;↻ïꝈ)ΞÿѨŗ ï,⇀$≔МƵï;Ξ // implicit: ï=input, Ξ=[]
ï⇔Ĕ⍪;                    // split ï along commas and set it to ï
     ↻ïꝈ)                // while ï's length > 0
         Ξÿ              // push to Ξ:
           Ѩŗ ï,⇀$≔МƵï;  // removed minimum item(s) from ï using builtin
                       Ξ // get sorted array

মূলত পুনরাবৃত্তির সাথে ইনপুট থেকে অন্য অ্যারেতে সর্বনিম্ন সরানো হয় এবং পুশ করে।


0

সিলোন (বোগোসর্ট), 119

String s(String i)=>",".join([*i.split(','.equals)].permutations.select((p)=>!any{for([x,y]in p.paired)y<x})[0]else[]);

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

আমি permutationsপদ্ধতিটি পেয়েছি এবং এভাবে বোগোসর্ট (একটি নন-র্যান্ডম ভেরিয়েন্ট) দিয়ে শেষ হয়েছিল।

ফর্ম্যাট এবং মন্তব্য:

// a function `s` mapping a String `i` to a String
String s(String i) =>
    // the end result is created by joining the iterable in (...).
    ",".join(
        // take the input, split it on commas, make the result a sequence.
        [*
            i.split(','.equals)   // → {String+}
           ]                      // → [String+]
        // get the iterable of all permutations of this sequence.
        // Yes, this is an iterable of O(n!) sequences (though likely
        // lazily computed, we don't need all in memory at once).
        .permutations              // → {[String+]*}
        // filter this iterable for ordered sequences.
        // Using select instead of filter makes this
        // eager instead of lazy, so we are actually iterating
        // through all n! sequences, and storing the ordered
        // ones. (All of those are equal.)
        .select(
            // this is our function to check whether this sequence
            // is ordered in ascending order.
            (p)=>
               // return if none of the following iterable of booleans is true.
                !any {
                   // This is a for-comprehension. Inside an named argument list
                   // (what we have here, although there is no name) for a
                   // function which wants an iterable, this becomes an iterable,
                   // lazily built from the existing iterable p.paired,
                   // which is just an iterable with all pairs of subsequent
                   // elements.
                      for([x,y] in p.paired)
                        // for each such pair, we evaluate this expression, which
                        // is true when the sequence is not ordered correctly.
                           y < x         // → Boolean
                        // → {Boolean*}
                    }  //   → Boolean
                 //  → Boolean([String+])
               ) // → [[String+]*]
         // we now have a sequence of (correctly sorted) sequences.
         // just take the first one.
         // If we had used `.filter` before, this would have to be `.first`.
               [0]    // → [String+]|Null
         // in case this is null, which can only happen if the original array was
         // empty, so there were no permutations, just use the empty sequence
         //  again. (Actually, split never returns an empty array, so this can't
         //  happen, but the type checker can't know that.)
               else []    // → [String*]
    // so that is what we pass to the join method.
        )   // → String
    ;

বিন্যাস এবং পার্সিং ব্যতীত এটি মাত্র 90 বাইট হয়ে যায়:

String[]s(String[]i)=>i.permutations.select((p)=>!any{for([x,y]in p.paired)y<x})[0]else[];

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



0

ruby -plaF, , 70 বাইট

o=[]
$F.map{|s|i=o;s.bytes{|b|i=i[b]=[*i[b]]};i[0]=s<<?,}
$_=o*''
chop

ও (এন), আপনি যদি ভান করেন যে কোনও অ্যারেরকে পুনরায় আকার এবং সংশ্লেষ করা বিনামূল্যে (এটি খুব বেশি বিনামূল্যে নয়)।

1 [b 1 ] [b 2 ] ... [b n ] এ অ্যারেতে oবাইট বি 1 , বি 2 ... বি এন দিয়ে স্ট্রিং রেখে আমরা গভীর এবং অসমভাবে নেস্টেড অ্যারে তৈরি করি । ফলাফল দেখে মনে হচ্ছে[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,["a,",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, [,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ["abc,"], ["abd,"], ["abe,"]], ["ac,"], ["ad,"]],, ["c,"]]

তারপরে আমরা সমতল এবং আউটপুট।


0

পুনঃব্যবহার আমার নিজের উত্তর উপর সাজান একটি পূর্ণসংখ্যা তালিকা

টিসিএল , 211 বাইট

set L [split [gets stdin] ,]
set i 0
time {incr j;set x 0;while \$x<$i {if \"[lindex $L $i]"<"[lindex $L $x]" {set L [lreplace [linsert $L $x [lindex $L $i]] $j $j]};incr x};incr i} [llength $L]
puts [join $L ,]

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

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