স্ক্র্যাবেলে চিঠিগুলির ব্যাগ থেকে কোনও শব্দ না টানার সম্ভাবনা


27

ধরুন আপনার কাছে একটি ব্যাগ রয়েছে যার সাথে টাইলস রয়েছে এবং এর প্রতিটি চিঠি রয়েছে। আছে চিঠি 'এ', সঙ্গে টাইল 'বি' সঙ্গে, ইত্যাদি, এবং 'ওয়াইল্ডকার্ড' টাইলস (আমরা আছে )। মনে করুন আপনার কাছে সীমাবদ্ধ সংখ্যার শব্দযুক্ত একটি অভিধান রয়েছে। আপনি ব্যাগ থেকে টাইলস প্রতিস্থাপন ছাড়াই বেছে নিন । নির্বাচিত টাইলস দিয়ে আপনি অভিধান থেকে শূন্য শব্দ গঠন করতে পারেন এমন সম্ভাবনা আপনি কীভাবে গণনা (বা অনুমান) করবেন ?এন একজন এন বি এন * এন = একটি + + এন বি + + ... + + এন জেড + + *nnAnBnn=nA+nB++nZ+nkk

স্ক্র্যাবল (টিএম) এর সাথে পরিচিত নয় তাদের জন্য, ওয়াইল্ডকার্ড চরিত্রটি যে কোনও বর্ণের সাথে মিলে যায়। সুতরাং [ BOOT ] শব্দটি 'বি', '*', 'ও', 'টি' টাইলগুলির সাথে 'বানান' হতে পারে।

সমস্যার স্কেল সম্পর্কে কিছু ধারণা দেওয়ার জন্য, ছোট, 7 এর মতো , 100 এর কাছাকাছি এবং অভিধানটিতে প্রায় 100,000 শব্দ আকারের বা ছোট থাকে।knk

সম্পাদনা: 'একটি শব্দ গঠন' দ্বারা, আমি দৈর্ঘ্যের একটি শব্দ চেয়ে বড় নয় । সুতরাং, অভিধানে যদি [ ] শব্দটি থাকে , তবে ব্যাগ থেকে এমনকি একটি 'এ' আঁকিয়ে, কেউ 'শব্দ তৈরি করেছে'। অভিধানে 1 দৈর্ঘ্যের শব্দ আছে এমন কেউ যদি ধরে নিতে পারে তবে ওয়াইল্ডকার্ডগুলির সমস্যাটি মূলত সরল করা হয়েছে। যদি সেখানে থাকে তবে কোনও ওয়াইল্ডকার্ডের কোনও অঙ্কন স্বয়ংক্রিয়ভাবে একটি দৈর্ঘ্যের 1 শব্দের সাথে মেলে এবং এইভাবে যে কোনও ওয়াইল্ডকার্ড নেই এমন ক্ষেত্রে মনোনিবেশ করতে পারে। সুতরাং সমস্যার আরও পিচ্ছিল আকারে অভিধানে কোনও 1-অক্ষরের শব্দ নেই।k

এছাড়াও, আমার স্পষ্টরূপে বলা উচিত যে ব্যাগ থেকে চিঠিগুলি আঁকানো ক্রমটি অবিরাম। শব্দের 'সঠিক' ক্রমে অক্ষরগুলি আঁকতে হবে না।


এটি কি ' প্রতিস্থাপন ছাড়া পিক টাইলস ' হওয়া উচিত নয়? খুব মজার প্রশ্ন।

উফ। আসলে এটা করা উচিত।
shabbychef

যতদূর আমি মনে করি স্ক্র্যাবল একটি অক্ষরের শব্দের অনুমতি দেয় না, তাই সমস্যাটির অন্তত অংশটি সমাধান হয়ে যায়;)
নিকো

1
@নিকো ভাল বিষয়, তবে আমি মনে করি এটি কেবল মধ্য-গেমের জন্য। ১ টি অক্ষরের শব্দের জন্য একটিতে একটি চিঠি বাজানোর প্রয়োজন হয় না বা বোর্ডে যে কোনও জায়গায় একটি করে চিঠি স্থাপনের অনুমতি দেওয়া হয়, উভয়ই স্পষ্টত অগ্রহণযোগ্য। তবে আমি উদ্বোধনী পদক্ষেপের কথা ভাবছিলাম। আসলে, স্ক্র্যাবলের সাথে পরিচিতদের জন্য প্রশ্নটি সংবিধানে বলা যেতে পারে, "প্রথম খেলোয়াড়ের পাস হওয়ার সম্ভাবনা কী?"
shabbychef

@nico এই স্পষ্টির জন্য আপনাকে ধন্যবাদ। তাত্ত্বিকভাবে একটি অনুরূপ ইস্যু শব্দের হিসাবে সম্ভাব্য দুটি-অক্ষরের সংমিশ্রণ সম্বলিত অভিধানগুলিতে সম্পর্কিত: যখন এটি হয়, 2 বা ততোধিক অক্ষরের যে কোনও হাতে স্বয়ংক্রিয়ভাবে একটি শব্দ থাকে। মিড-গেম সম্পর্কে শাব্বিচেফের মন্তব্যটি দেখায় যে বেশিরভাগ স্ক্র্যাবলের কাছে আসল প্রশ্নটি কতটা অপ্রাসঙ্গিক, কারণ মিড-গেমটিতে আপনি আপনার letters টি বর্ণের পাশাপাশি শব্দের অংশের (উপসর্গ, প্রত্যয় এবং এমনকি মাঝারি বিভাগ) সরবরাহ করতে পারেন your হাত. এটি একটি শব্দ তৈরি করতে সক্ষম হবার সম্ভাবনা ব্যাপকভাবে বৃদ্ধি করে।
হোবার

উত্তর:


14

@Vqv এই থ্রেডটিতে পোস্ট করা চমৎকার কাজের বিষয়ে এটি একটি (দীর্ঘ!) মন্তব্য। এটির একটি সুনির্দিষ্ট উত্তর পাওয়ার লক্ষ্য। তিনি অভিধানকে সহজ করার কঠোর পরিশ্রম করেছেন। যা থেকে যায় তা পুরোপুরি কাজে লাগানো। তার ফলাফলগুলি বোঝায় যে একটি হিংস্র শক্তি সমাধান সম্ভব । সর্বোপরি, একটি ওয়াইল্ডকার্ড সহ, সর্বাধিক শব্দ characters টি অক্ষর দিয়ে তৈরি করতে পারে এবং এগুলির মধ্যে 1/10000 -রও কম লাগে - বলে, প্রায় মিলিয়ন - কিছু বৈধ অন্তর্ভুক্ত করতে ব্যর্থ হবে শব্দ। 277=10,460,353,203

প্রথম পদক্ষেপটি একটি ওয়াইল্ডকার্ড চরিত্রের সাথে ন্যূনতম অভিধান বৃদ্ধি করা, "?"। 22 টি বর্ণ দুটি-অক্ষরের শব্দের সাথে উপস্থিত হয় (সমস্ত সি, কিউ, ভি, জেড ছাড়া) ২২ টি বর্ণগুলিতে একটি ওয়াইল্ডকার্ড যুক্ত করুন এবং অভিধানে এগুলি যুক্ত করুন: {a, b ?, d ?, ..., y? Now এখন রয়েছে। একইভাবে আমরা ন্যূনতম তিন-অক্ষরের শব্দগুলিও পরিদর্শন করতে পারি, যার ফলে কিছু অতিরিক্ত শব্দ যুক্ত হয় অভিধানে প্রদর্শিত। অবশেষে, আমরা "??" যুক্ত করব অভিধানে ফলস্বরূপ পুনরাবৃত্তিগুলি সরানোর পরে, এতে 342 ন্যূনতম শব্দ রয়েছে।

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

{a2,ab,ad,...,ozψ,wxψ,ψ2}

(যেখানে, বিভ্রান্তি এড়ানোর জন্য, আমি ওয়াইল্ডকার্ড চরিত্রের জন্য লিখেছি )।ψ

একটি রাকের মধ্যে একটি বৈধ শব্দ থাকে এবং কেবল যদি সেই শব্দটি র্যাকটিকে ভাগ করে দেয়।

আরও বিমূর্ত, তবে অত্যন্ত শক্তিশালী, এটি বলার উপায় হ'ল বহুবর্ষীয় রিং একটি আদর্শ উত্পন্ন করে এবং বৈধ সহ র‌্যাকগুলি শব্দগুলি ভাগফলের রিং আইতে শূন্য হয়ে যায় , অন্যদিকে বৈধ শব্দ ছাড়া র‌্যাকগুলি ভাগফলে অঞ্জুর হয়। আমরা যদি সমস্ত র্যাকের যোগফল গঠন করি এবং এই ভাগফলের রিংয়ে এটি গণনা করি, তবে শব্দ ছাড়াই র‌্যাকের সংখ্যাটি ভাগফলে পৃথক মনোমাল্যের সংখ্যার সমান হয়।আর = জেড [ , বি , ... , জেড , ψ ] আর / আই আরIR=Z[a,b,,z,ψ]R/IR

তদ্ব্যতীত, মধ্যে সমস্ত র্যাকের যোগফল প্রকাশ করা সহজ। যাক বর্ণমালায় সব বর্ণের সমষ্টি হও। প্রতিটি র‌্যাকের জন্য একটি করে মনোমিয়াল থাকে। (একটি অতিরিক্ত বোনাস হিসাবে, এর সহগগুলি প্রতিটি র্যাকটি কীভাবে গঠন করা যায় তার সংখ্যা গণনা করে, যদি আমাদের পছন্দ হয় তবে এটির সম্ভাবনাগুলি গণনা করার অনুমতি দেয়))α = একটি + + + + + + z- র + + ψ α 7Rα=a+b++z+ψα7

একটি সাধারণ উদাহরণ হিসাবে (এটি কীভাবে কাজ করে তা দেখতে) ধরুন, (ক) আমরা ওয়াইল্ডকার্ড ব্যবহার করি না এবং (খ) "এ" থেকে "এক্স" এর মাধ্যমে সমস্ত অক্ষর শব্দ হিসাবে বিবেচিত হয়। তারপরে কেবলমাত্র সম্ভাব্য র‌্যাকগুলি যা থেকে শব্দগুলি তৈরি করা যায় না তা অবশ্যই সম্পূর্ণরূপে y এবং z এর সমন্বিত। আমরা গণনা করি mod মডুলো time একবারে এক ধাপে উত্পন্ন আদর্শ : { a , b , c , , x }α=(a+b+c++x+y+z)7{a,b,c,,x}

α0=1α1=a+b+c++x+y+zy+zmodIα2(y+z)(a+b++y+z)(y+z)2modIα7(y+z)6(a+b++y+z)(y+z)7modI.

আমরা চূড়ান্ত উত্তর থেকে একটি শব্দহীন রাক পাওয়ার সুযোগটি পড়তে পারি, : প্রতিটি সহগ তার সাথে সম্পর্কিত র্যাকটি কীভাবে আঁকতে পারে সেগুলি গণনা করে। উদাহরণস্বরূপ, 2 ys এবং 5 z এর আঁকার 21 টি উপায় (সম্ভাব্য 26 ^ 7 এর মধ্যে) রয়েছে কারণ এর সহগ 21 এর সমান হয়।y7+7y6z+21y5z2+35y4z3+35y3z4+21y2z5+7yz6+z7y2z5

প্রাথমিক গণনা থেকে এটি সুস্পষ্ট যে এটি সঠিক উত্তর। পুরো বিষয়টি হ'ল অভিধানের বিষয়বস্তু নির্বিশেষে এই পদ্ধতিটি কাজ করে।

লক্ষ্য করুন যে প্রতিটি পর্যায়ে পাওয়ার মডুলোর আদর্শ কীভাবে হ্রাস করা যায় তা গণনা হ্রাস করে: এটিই এই পদ্ধতির মাধ্যমে প্রকাশিত শর্টকাট। (উদাহরণের শেষে।)

বহুপদী বীজগণিত সিস্টেমগুলি এই গণনাগুলি প্রয়োগ করে । উদাহরণস্বরূপ, এখানে গাণিতিক কোড:

alphabet =  a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + 
            p + q + r + s + t + u + v + w + x + y + z + \[Psi];
dictionary = {a^2, a b, a d, a e, ..., w z \[Psi], \[Psi]^2};
next[pp_] := PolynomialMod[pp alphabet, dictionary];
nonwords = Nest[next, 1, 7];
Length[nonwords]

(অভিধানটি @ vqv এর min.dict থেকে সোজা পদ্ধতিতে তৈরি করা যেতে পারে; আমি এখানে একটি লাইন রেখে দেখিয়েছি যে এটি যদি আপনার পছন্দ হয় তবে সরাসরি উল্লেখ করা যথেষ্ট সংক্ষিপ্ত।)

আউটপুট - যা গণনার দশ মিনিট সময় লাগে - 577958. আছে ( বিশেষ দ্রষ্টব্য এই বার্তার একটি পূর্ববর্তী সংস্করণ আমি একটি ক্ষুদ্র ভুল অভিধান প্রস্তুত করেছিল এবং 577940. প্রাপ্ত আমি প্রতিফলিত আমি যা আশা করি এখন টেক্সট সম্পাদনা করার পরে সঠিক ফলাফল!) মিলিয়ন বা তাই আমি প্রত্যাশার চেয়ে কিছুটা কম, তবে একই ক্রমের পরিমাণ।

এই জাতীয় রেক পাওয়ার সম্ভাবনা গণনা করার জন্য, আমাদের র্যাকটি কীভাবে আঁকতে পারে তার জন্য অ্যাকাউন্ট করতে হবে। যেমন আমরা উদাহরণে দেখেছি, এটি co এর সহগের সমান । এই জাতীয় কিছু রাক আঁকার সুযোগ হ'ল এই সমস্ত সহগের যোগফল, সহজেই সমস্ত অক্ষর 1 এর সমান সেট করে পাওয়া যায়:α7

nonwords /. (# -> 1) & /@ (List @@ alphabet)

উত্তরটি 1066056120 এর সমান, একটি র্যাক আঁকার জন্য 10.1914% সুযোগ দেয় যা থেকে কোনও বৈধ শব্দ তৈরি করা যায় না (যদি সমস্ত অক্ষর সমানভাবে সম্ভাবনা থাকে)।

যখন অক্ষরের সম্ভাবনাগুলি পৃথক হয়, কেবল প্রতিটি অক্ষর আঁকার সম্ভাবনার সাথে এটি প্রতিস্থাপন করুন:

tiles = {9, 2, 2, 4, 12, 2, 3, 2, 9, 1, 1, 4, 2, 6, 8, 2, 1, 6, 4, 6, 
         4, 2, 2, 1, 2, 1, 2};
chances = tiles / (Plus @@ tiles);
nonwords /. (Transpose[{List @@ alphabet, chances}] /. {a_, b_} -> a -> b)

আউটপুটটি 1.079877553303%, সঠিক উত্তর ( পরিবর্তনের সাথে অঙ্কন করে আনুমানিক মডেল ব্যবহার করে ) using পিছনে ফিরে তাকালে, তথ্য প্রবেশের জন্য চারটি লাইন লেগেছিল (বর্ণমালা, অভিধান এবং বর্ণমালা ফ্রিকোয়েন্সি) এবং কাজটি করার জন্য কেবল তিনটি লাইন: মডুলো পরবর্তী শক্তি কীভাবে গ্রহণ করতে হবে তা বর্ণনা করুন , 7th ম শক্তিটি পুনরাবৃত্তভাবে গ্রহণ করুন এবং বিকল্প হিসাবে স্থান পাবেন অক্ষরের সম্ভাবনা।αI


+1 অভিধানের সংযুক্তি এবং তারপরে এটি পুনরায় নূন্যতম করা একটি চতুর ধারণা। বীজগণিতটি আমার বাইরে, তবে মনে হয় আপনি হাইপারজমেট্রিকের পরিবর্তে বহু-জাতীয় সম্ভাবনা গণনা করছেন। সুতরাং সম্ভাবনা প্রতিস্থাপনের সাথে নমুনা দেওয়ার জন্য । আমি মনে করি এটি ব্যাখ্যা করে যে কেন আপনার উত্তর ০.০৮% আমার অনুমানের তুলনায় ০.৪% এর চেয়ে অনেক বেশি বড়। প্রতিস্থাপন ছাড়াই স্যাম্পলিং পরিচালনা করার জন্য আপনার পদ্ধতির পরিবর্তন করার কোনও উপায় আছে কি?
ভিকভিভি

2
@vqv হ্যাঁ এখন যখন আমাদের কাছে অর্ধ মিলিয়ন বা কোনও শব্দ ছাড়াই র‌্যাকের একটি তালিকা রয়েছে, তবে প্রতিটি র‌্যাকের (প্রতিস্থাপন ছাড়াই) সম্ভাবনা গণনা করা এবং হাইপারজমেট্রিক ফলাফল প্রাপ্ত করার জন্য এটি সোজা (কোডের শেষ দুটি লাইন পরিবর্তন করে) ward সঠিক উত্তরটি সমান 349870667877/80678106432000 = 0.43366% । এন = 100 কে ট্রায়ালগুলির সাথে আপনার এসই 0.021%, সুতরাং আপনার উত্তরটি 0.38% এবং 0.49% (দ্বিমুখী 99% সিআই) এর মধ্যে হওয়া উচিত। আমাদের উত্তরগুলি সম্মত হওয়ায় আমি খুব আনন্দিত!
whuber

@ কী আপনি ওয়ার্ডস উইথ ফ্রেন্ডস (ডাব্লুডাব্লুএফ) টাইল বিতরণ ব্যবহার করে গণনা চালাতে পারবেন? আমার 0.4% এর অনুমান ডাব্লুডাব্লুএফ অভিধান এবং ডাব্লুডাব্লুএফ টাইল বিতরণের উপর ভিত্তি করে। আমি মনে করি আপনি ডাব্লুডাব্লুএফ অভিধানের সাথে স্ক্র্যাবল টাইল বিতরণ ব্যবহার করছেন।
vqv

উফ। সঠিক উত্তরটি আসলে 349870675899 (আমার অভিধানে একটি ত্রুটির কারণে আমি 8022 বন্ধ ছিলাম)) এটি ভাগ্যক্রমে কোনও ব্যবহারিক পার্থক্য তৈরি করে না।
whuber

@vqv আমি বিভিন্ন টাইল বিতরণের সাথে পরিচিত নই। আমি সরাসরি আপনার কোড থেকে আমার অনুলিপি করেছি (এবং আমি আপনার অভিধান ব্যবহার করেছি) :-)। যদি আপনার বিতরণটি অসম্প্রিলিটি / 2010 / 01 / 01 /… এ বোঝায় , তবে আমি 1.15444% (প্রতিস্থাপন সহ), 0.43366% (প্রতিস্থাপন ছাড়াই) পেয়েছি । দ্বিতীয় সংখ্যাটি আসলে স্ক্রাবল ফ্রিকোয়েন্সি থেকে 8 তম উল্লেখযোগ্য চিত্রের চেয়ে আলাদা।
whuber

14

স্ক্র্যাবল এবং এর রূপগুলিতে কোনও বৈধ শব্দ নেই এমন একটি র‌্যাক আঁকানো খুব শক্ত। নীচে একটি আর প্রোগ্রাম আমি লিখেছিলাম যে সম্ভাবনাটি অনুমান করার জন্য যে প্রাথমিক 7-টাইলের র্যাকটিতে কোনও বৈধ শব্দ নেই। এটি মন্টি কার্লো অ্যাপ্রোচ এবং ওয়ার্ডস উইথ ফ্রেন্ডস লিক্সিকন ব্যবহার করে (আমি সরল স্ক্র্যাবল অভিধানটি সহজ ফর্ম্যাটে খুঁজে পাইনি)। প্রতিটি পরীক্ষায় একটি 7-টাইল রাক আঁকানো থাকে এবং তারপরে র্যাকটিতে কোনও বৈধ শব্দ রয়েছে কিনা তা পরীক্ষা করে দেখানো হয়।

নূন্যতম শব্দ

র‌্যাকটিতে একটি বৈধ শব্দ রয়েছে কিনা তা পরীক্ষা করতে আপনাকে পুরো অভিধানটি স্ক্যান করতে হবে না। আপনার কেবলমাত্র ন্যূনতম শব্দের সমন্বিত একটি ন্যূনতম লেসিকন স্ক্যান করতে হবে । সাবসেট হিসাবে অন্য কোনও শব্দ না থাকলে কোনও শব্দ ন্যূনতম। উদাহরণস্বরূপ 'Em' একটি ন্যূনতম শব্দ; 'খালি' নয়। এর মুল বক্তব্যটি হ'ল যদি কোনও র‌্যাকটিতে x শব্দ থাকে তবে এতে অবশ্যই কোনও এক্স এর উপসেট থাকতে হবে । অন্য কথায়: একটি র্যাকের কোনও শব্দ নেই তবে যদি এতে কোনও ন্যূনতম শব্দ থাকে না। ভাগ্যক্রমে, অভিধানের বেশিরভাগ শব্দ ন্যূনতম নয়, তাই এগুলি মুছে ফেলা যায়। আপনি ক্রম সমমানের শব্দগুলিকেও মার্জ করতে পারেন। আমি ওয়ার্ডস উইথ ফ্রেন্ডস লিক্সিকনটি 172,820 থেকে 201 ন্যূনতম শব্দে হ্রাস করতে সক্ষম হয়েছি।

চিঠিগুলির উপর বিতরণ হিসাবে র্যাক এবং শব্দের ব্যবহার করে ওয়াইল্ডকার্ডগুলি সহজেই পরিচালনা করা যায়। অন্যটি থেকে একটি বিতরণ বিয়োগ করে কোনও র্যাকটিতে একটি শব্দ রয়েছে কিনা তা আমরা পরীক্ষা করি। এটি আমাদের র্যাক থেকে অনুপস্থিত প্রতিটি অক্ষরের সংখ্যা দেয়। যদি এই সংখ্যাটির যোগফল হয় ওয়াইল্ডকার্ডের সংখ্যা, তবে শব্দটি র‌্যাকটিতে রয়েছে।

মন্টি কার্লো পদ্ধতির একমাত্র সমস্যাটি হ'ল যে ইভেন্টটি আমরা আগ্রহী তা খুব বিরল। সুতরাং একটি ছোট যথেষ্ট স্ট্যান্ডার্ড ত্রুটির সাথে অনুমান করতে অনেকগুলি, অনেকগুলি ট্রায়াল নেওয়া উচিত। আমি ট্রায়াল সহ আমার প্রোগ্রামটি (নীচে অংশে আটকানো) চালিয়েছি এবং 0.004 এর আনুমানিক সম্ভাবনা পেয়েছি যে প্রাথমিক র‌্যাকটিতে একটি বৈধ শব্দ নেই । এই অনুমানের আনুমানিক স্ট্যান্ডার্ড ত্রুটি 0.0002। অভিধানটি ডাউনলোড সহ আমার ম্যাক প্রোতে চালাতে কয়েক মিনিট সময় লেগেছিল।N=100,000

আমি যদি কেউ দক্ষ নির্ভুল অ্যালগরিদম নিয়ে আসতে পারি তা জানতে আগ্রহী। অন্তর্ভুক্তি-বর্জনের উপর ভিত্তি করে একটি নিষ্পাপ দৃষ্টিভঙ্গি দেখে মনে হচ্ছে এটি কোনও সংযুক্ত বিস্ফোরণকে জড়িত করতে পারে।

অন্তর্ভুক্তি-বর্জন

আমি মনে করি এটি একটি খারাপ সমাধান, তবে এখানে যাইহোক একটি অসম্পূর্ণ স্কেচ। নীতিগতভাবে আপনি গণনাটি করতে একটি প্রোগ্রাম লিখতে পারেন তবে স্পেসিফিকেশনটি জঘন্য হতে পারে।

আমরা যে সম্ভাবনাটি গণনা করতে চাই তা হ'ল ডান পাশের সম্ভাবনার ভিতরে থাকা ইভেন্টগুলি হ'ল ইভেন্টগুলির সংঘ: যেখানে একটি সর্বনিম্ন শব্দকোষ। অন্তর্ভুক্তি-বাদ দেওয়ার সূত্রটি ব্যবহার করে আমরা এটিকে প্রসারিত করতে পারি। এটিতে উপরের ইভেন্টগুলির সমস্ত সম্ভাব্য ছেদগুলি বিবেচনা করে। যাক শক্তি সেট বোঝাতে , এর সম্ভাব্য সব সাব-সেট নির্বাচন সেট অর্থাৎ । তারপর

P(k-tile rack does not contain a word)=1P(k-tile rack contains a word).
P(k-tile rack contains a word)=P(xM{k-tile rack contains x}),
MP(M)MM
P(k-tile rack contains a word)=P(xM{k-tile rack contains x})=j=1|M|(1)j1SP(M):|S|=jP(xS{k-tile rack contains x})

নির্দিষ্ট করার জন্য শেষ জিনিসটি কীভাবে উপরের শেষ লাইনে সম্ভাব্যতা গণনা করতে হয়। এটিতে একটি মাল্টিভারিয়েট হাইপারজেমেট্রিক জড়িত। এমন ঘটনা যা প্রতিটি শব্দ থাকে । ওয়াইল্ডকার্ডের কারণে এটি মোকাবেলা করতে ব্যথা। আমাদের নীচের প্রতিটি ক্ষেত্রে কন্ডিশনার করে বিবেচনা করতে হবে: রাকে কোনও ওয়াইল্ডকার্ড নেই, রাকে 1 টি ওয়াইল্ডকার্ড রয়েছে, রাকে 2 টি ওয়াইল্ডকার্ড রয়েছে ...

xS{k-tile rack contains x}
S

তারপরে

P(xS{k-tile rack contains x})=w=0nP(xS{k-tile rack contains x}|k-tile rack contains w wildcards)×P(k-tile rack contains w wildcards).

আমি এখানে থামতে যাচ্ছি, কারণ বিস্তৃতিগুলি লেখার জন্য কঠোর এবং কোনও আলোকিত নয়। এটি করার জন্য একটি কম্পিউটার প্রোগ্রাম লিখতে আরও সহজ। তবে এখনই আপনার দেখতে পাওয়া উচিত যে অন্তর্ভুক্তি-বর্জন পদ্ধতিটি অক্ষম। এটি পদগুলির সাথে জড়িত , যার প্রতিটিও খুব জটিল। শব্দকোষ আমি উপরে বিবেচিত ।2|M|2|M|3.2×1060

সমস্ত সম্ভাব্য র‌্যাকগুলি স্ক্যান করা হচ্ছে

আমি মনে করি এটি গণনাগতভাবে আরও সহজ, কারণ ন্যূনতম শব্দের সম্ভাব্য সাবসেটের চেয়ে কম সম্ভাব্য র্যাক রয়েছে। আমরা ক্রমান্বয়ে সম্ভাব্য সেট হ্রাস করিk-টাইল র‌্যাকগুলি যতক্ষণ না আমরা র‌্যাকগুলির কোনও সেট না পেয়ে সেট পাই। স্ক্র্যাবলের জন্য (বা বন্ধুদের সাথে শব্দগুলি) সম্ভাব্য 7-টাইল র্যাকের সংখ্যা কয়েক বিলিয়ন। যে শব্দটিতে একটি সম্ভাব্য শব্দ নেই সেগুলির সংখ্যা গণনা করা কয়েক কোডের কয়েক লাইন আর কোডের সাথে করণীয় হওয়া উচিত। তবে আমি মনে করি কেবল সমস্ত সম্ভাব্য র্যাকগুলি গণনার চেয়ে আপনার আরও ভাল করা উচিত। উদাহরণস্বরূপ, 'আ' একটি ন্যূনতম শব্দ। এটি তত্ক্ষণাত একাধিক 'এ' যুক্ত সমস্ত র্যাকগুলি সরিয়ে দেয়। আপনি অন্য শব্দ দিয়ে পুনরাবৃত্তি করতে পারেন। আধুনিক কম্পিউটারগুলির জন্য মেমরির সমস্যা হওয়া উচিত নয়। একটি 7-টাইল স্ক্র্যাবল র্যাকের জন্য 7 বাইটের চেয়ে কম স্টোরেজ দরকার। সবচেয়ে খারাপভাবে আমরা সম্ভাব্য সমস্ত র‌্যাকগুলি সঞ্চয় করতে কয়েকটি গিগাবাইট ব্যবহার করব, তবে আমার মনে হয় না এটিও খুব ভাল ধারণা। কেউ এই সম্পর্কে আরও চিন্তা করতে চাইতে পারেন।

মন্টি কার্লো আর প্রোগ্রাম

# 
#  scrabble.R
#  
#  Created by Vincent Vu on 2011-01-07.
#  Copyright 2011 Vincent Vu. All rights reserved.
# 

# The Words With Friends lexicon
# http://code.google.com/p/dotnetperls-controls/downloads/detail?name=enable1.txt&can=2&q=
url <- 'http://dotnetperls-controls.googlecode.com/files/enable1.txt'
lexicon <- scan(url, what=character())

# Words With Friends
letters <- c(unlist(strsplit('abcdefghijklmnopqrstuvwxyz', NULL)), '?')
tiles <- c(9, 2, 2, 5, 13, 2, 3, 4, 8, 1, 1, 4, 2, 5, 8, 2, 1, 6, 5, 7, 4, 
           2, 2, 1, 2, 1, 2)
names(tiles) <- letters

# Scrabble
# tiles <- c(9, 2, 2, 4, 12, 2, 3, 2, 9, 1, 1, 4, 2, 6, 8, 2, 1, 6, 4, 6, 4, 
#            2, 2, 1, 2, 1, 2)


# Reduce to permutation equivalent words
sort.letters.in.words <- function(x) {
  sapply(lapply(strsplit(x, NULL), sort), paste, collapse='')
}

min.dict <- unique(sort.letters.in.words(lexicon))
min.dict.length <- nchar(min.dict)

# Find all minimal words of length k by elimination
# This is held constant across iterations:
#   All words in min.dict contain no other words of length k or smaller
k <- 1
while(k < max(min.dict.length))
{
  # List all k-letter words in min.dict
  k.letter.words <- min.dict[min.dict.length == k]

  # Find words in min.dict of length > k that contain a k-letter word
  for(w in k.letter.words)
  {
    # Create a regexp pattern
    makepattern <- function(x) {
      paste('.*', paste(unlist(strsplit(x, NULL)), '.*', sep='', collapse=''), 
            sep='')
    }
    p <- paste('.*', 
               paste(unlist(strsplit(w, NULL)), 
                     '.*', sep='', collapse=''), 
               sep='')

    # Eliminate words of length > k that are not minimal
    eliminate <- grepl(p, min.dict) & min.dict.length > k
    min.dict <- min.dict[!eliminate]
    min.dict.length <- min.dict.length[!eliminate]
  }
  k <- k + 1
}

# Converts a word into a letter distribution
letter.dist <- function(w, l=letters) {
  d <- lapply(strsplit(w, NULL), factor, levels=l)
  names(d) <- w
  d <- lapply(d, table)
  return(d)
}

# Sample N racks of k tiles
N <- 1e5
k <- 7
rack <- replicate(N,
                  paste(sample(names(tiles), size=k, prob=tiles), 
                        collapse=''))

contains.word <- function(rack.dist, lex.dist)
{
  # For each word in the lexicon, subtract the rack distribution from the 
  # letter distribution of the word.  Positive results correspond to the 
  # number of each letter that the rack is missing.
  y <- sweep(lex.dist, 1, rack.dist)

  # If the total number of missing letters is smaller than the number of 
  # wildcards in the rack, then the rack contains that word
  any(colSums(pmax(y,0)) <= rack.dist[names(rack.dist) == '?'])
}

# Convert rack and min.dict into letter distributions
min.dict.dist <- letter.dist(min.dict)
min.dict.dist <- do.call(cbind, min.dict.dist)
rack.dist <- letter.dist(rack, l=letters)

# Determine if each rack contains a valid word
x <- sapply(rack.dist, contains.word, lex.dist=min.dict.dist)

message("Estimate (and SE) of probability of no words based on ", 
        N, " trials:")
message(signif(1-mean(x)), " (", signif(sd(x) / sqrt(N)), ")")

বাহ ... খুব সুন্দর ফলোআপ
ম্যাট পার্কার

আমি কিছুটা অবাক হয়েছি এটি 201 শব্দে হ্রাস পেয়েছে। যদিও প্রথম শব্দটি ব্যবহৃত হয়েছে, আমাদের ঘরের নিয়মগুলি 'আমি' এবং 'এ' শব্দ হিসাবে গ্রহণ করে, এটি সম্ভবত ন্যূনতম শব্দের সংখ্যা আরও কমাবে। আমি কাউকে অন্তর্ভুক্তি-বাদ দেওয়ার বিশ্লেষণটি দেখতে পাব বলে আশা করছিলাম, যা বেশ লোমশ হওয়া উচিত ...
শ্যাবিচেফ

@ শ্যাববিচেফ অভিধানটিতে 1 অক্ষরের শব্দ নেই। সর্বাধিক ন্যূনতম শব্দগুলি 2- এবং 3-অক্ষরের শব্দ। এখানে ন্যূনতম শব্দের দৈর্ঘ্যের সম্পূর্ণ বিতরণ: 2: 73, 3:86, 4:31, 5: 9, 6: 2। 6-অক্ষরের শব্দগুলি হ'ল: GLYCYL এবং SYZYGY।
vqv

@ শ্যাববিচেফ আমি সঠিক উত্তর-বহির্ভূত পদ্ধতির স্কেচ অন্তর্ভুক্ত করার জন্য আমার উত্তর আপডেট করেছি। এটি লোমশ চেয়ে খারাপ।
vqv

মহান কাজ! আমি ভালবাসি যে এই প্রশ্নটি, যা একটি বাক্য হিসাবে প্রমাণিত হতে পারে (পর্যাপ্ত ব্যাকগ্রাউন্ডযুক্ত তাদের কাছে), মন্টি কার্লো, অন্তর্ভুক্তি-বর্জন, ডিএজি, গাছ সন্ধান, বহুপদী বীজগণিত প্রকাশ করেছে এবং আপনার অনুকরণগুলি @ এর তাত্ত্বিক দ্বারা নিশ্চিত হয়েছে whuber। চিয়ার্স!
shabbychef

7

শ্রীকান্ত ঠিক বলেছেন: একটি মন্টি কার্লো অধ্যয়ন করার উপায়। এর দুটি কারণ রয়েছে। প্রথমত, উত্তরটি অভিধানের কাঠামোর উপর দৃ .়ভাবে নির্ভর করে। দুটি চূড়ান্ত শব্দটি হল (1) অভিধানে প্রতিটি সম্ভাব্য একক-বর্ণের শব্দ রয়েছে। এই ক্ষেত্রে, বা আরও বেশি অক্ষরের অঙ্কনে একটি শব্দ না করার সম্ভাবনা শূন্য। (2) অভিধানের শুধুমাত্র একটি একক অক্ষর আউট গঠিত শব্দ ( যেমন , "একটি", "এএ", "AAA", ইত্যাদি ।)। অক্ষরের কোনও শব্দ না বানানোর সুযোগটি সহজেই নির্ধারিত হয় এবং স্পষ্টতই ননজারো। যে কোনও নির্দিষ্ট বন্ধ-ফর্ম উত্তরের পুরো অভিধান কাঠামো সংযুক্ত করতে হবে এবং এটি সত্যই একটি ভয়াবহ এবং দীর্ঘ সূত্র হবে।1k

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

একটি উপায় অভিধান হিসাবে শব্দটিকে গাছ হিসাবে উপস্থাপন করে। গাছটি পুরো খালি খালি প্রতীক এবং প্রতিটি অক্ষরের শাখাগুলিতে গোড়া হয়; এর পাতাগুলি (অবশ্যই) এগুলি শব্দ। তবে, আমরা গাছের মধ্যেও প্রতিটি শব্দের সমস্ত অনানুষ্ঠানিক অনুমতিগুলি সন্নিবেশ করতে পারি ( প্রতিটি শব্দের জন্য পর্যন্ত) to এটি দক্ষতার সাথে সম্পন্ন করা যেতে পারে কারণ সেই সমস্ত অনুমতি সংরক্ষণের জন্য কোনওকেই সংরক্ষণ করতে হয় না; কেবলমাত্র গাছের কিনারা যুক্ত করা দরকার। পাতা একই থাকে। আসলে গাছটিকে বর্ণানুক্রমিক ক্রমে অনুসরণ করা উচিত বলে জোর দিয়ে আরও সহজ করা যায় ।k!1

অন্য কথায়, অভিধানে অক্ষরের একটি মাল্টিসেট রয়েছে কিনা তা নির্ধারণ করতে প্রথমে উপাদানগুলিকে সাজানো ক্রমে সাজান,kতারপরে মূল অভিধানে শব্দের বাছাই করা প্রতিনিধিদের কাছ থেকে তৈরি গাছে এই সাজানো "শব্দ" সন্ধান করুন। এটি আসলে মূল গাছের চেয়ে ছোট হবে কারণ এটি শর্ট-সমতুল্য শব্দের সমস্ত সেটকে একত্রিত করে যেমন sort স্টপ, পোস্ট, হাঁড়ি, অপটস, স্পট} আসলে, একটি ইংরেজি অভিধানে এই শ্রেণীর শব্দের কোনওভাবেই পৌঁছানো যেত না কারণ "তাই" প্রথমে পাওয়া যায়। আসুন এটি কার্যকরভাবে দেখুন। সাজানো মাল্টিসিটটি "অপস্ট"; "o" কেবলমাত্র {o, p, ..., z the অক্ষরযুক্ত সমস্ত শব্দের সাথে শাখা করে, "p" কেবলমাত্র {o, p, ..., z} এবং সর্বাধিক সংখ্যক শব্দের সাথে শাখা করে একটি "ও", এবং অবশেষে "গুলি" পাতায় শাখা "তাই"! (আমি ধরে নিয়েছি যে চঞ্চল প্রার্থীদের কেউই "ও", "অপ", "

ওয়াইল্ডকার্ডগুলি পরিচালনা করার জন্য একটি পরিবর্তন প্রয়োজন: আমি আপনার মধ্যে প্রোগ্রামার প্রকারগুলিকে সে সম্পর্কে ভাবতে দেব। এটি অভিধানের আকার বাড়াবে না (আসলে এটি হ্রাস করা উচিত); এটি গাছের আবর্তনকে কিছুটা কমিয়ে দেবে, তবে কোনও মৌলিক উপায়ে পরিবর্তন না করে। ইংরেজী ("a", "i") এর মতো একক অক্ষরের শব্দযুক্ত যে কোনও অভিধানে কোনও জটিলতা নেই: ওয়াইল্ডকার্ডের উপস্থিতি মানে আপনি একটি শব্দ গঠন করতে পারেন! (এটি ইঙ্গিত দেয় যে আসল প্রশ্নটি যতটা শোনাচ্ছে তত আকর্ষণীয় হতে পারে না))

আপশটটি হ'ল একক অভিধান অনুসন্ধানের জন্য (ক) -লেটর মাল্টিসেট বাছাই করা এবং (খ) গাছের প্রান্ত ছাড়া আর কোনও ট্র্যাভারস করা দরকার । চলমান সময় হ'ল । আপনি যদি চালাকভাবে বাছাইকৃত ক্রমে এলোমেলো মাল্টিসেটগুলি উত্পন্ন করেন (আমি এটি করার জন্য বেশ কয়েকটি দক্ষ উপায় সম্পর্কে ভাবতে পারি), চলমান সময়টি কমিয়ে দেয় । মোট চলমান সময় পেতে পুনরাবৃত্তির সংখ্যা দ্বারা এটি গুণ করুন।kkO(klog(k))O(k)

আমি বাজি ধরছি আপনি এই স্টাডিকে সত্যিকারের স্ক্র্যাবল সেট এবং কয়েক মিলিয়ন মিলিয়ন ইটারেশন দিয়ে সেকেন্ডের মধ্যে পরিচালনা করতে পারবেন।


@ শুভ্র গাছটি একটি ঝরঝরে ধারণা (সেই ধারণার জন্য উত্সাহিত) তবে এর জন্য কি খুব বেশি স্মৃতির প্রয়োজন হবে না? আমি অনুমান করি যে এটি অভিধানটি কতটা বিচিত্র তার উপর নির্ভর করে তবে আমি অনুমান করছি যে একটি যুক্তিসঙ্গত বিভাজন অভিধানে অনেক গাছের প্রয়োজন হবে উদাহরণস্বরূপ, 'বি' গাছটি সমস্ত শব্দের জন্য 'ক' এর পরিবর্তে 'বি' অক্ষর দিয়ে শুরু হবে যা এই শব্দগুলিতে নয় তাদের মধ্যে 'ক' আছে। একইভাবে, 'গ' গাছ যে শব্দগুলির 'ক' এবং 'বি' নয় তবে 'সি' রয়েছে সেই শব্দগুলির জন্য 'গ' অক্ষর দিয়ে শুরু হবে। আমার প্রস্তাবিত প্রত্যক্ষ পদ্ধতিটি সহজ বলে মনে হচ্ছে কারণ এর অভিধানে সমস্ত শব্দের এককালীন ট্র্যাভারসাল দরকার, না?

1
@ শ্রীকান্ত: পুরো অভিধানটি শুরু করার জন্য গাছটি সম্ভবত কম র‍্যামের প্রয়োজন হয়। আপনি কি সত্যিই কয়েকটি মেগাবাইট র‍্যাম সম্পর্কে উদ্বিগ্ন? বিটিডাব্লু, কেবল একটি গাছ আছে, অনেকগুলি নয়: এগুলি সবই শূন্য শব্দের সাথে জড়িত। আপনার দৃষ্টিভঙ্গি, যেমনটি আমি এটি বুঝতে পেরেছি, প্রতিটি পুনরাবৃত্তির উপর অভিধানের একাধিক অনুসন্ধান (এদের মধ্যে 7 টি পর্যন্ত) দরকার , এটি @ শ্যাবিচেফ ভয় হিসাবে অকার্যকর করে তোলে। আপনি যদি লেখেন যে "আপনারা কোনও শব্দ গঠন করতে পারেন কিনা" লিখেন তখন আপনি যে অ্যালগরিদমটি বিশদভাবে ব্যাখ্যা করতে পারেন তা সাহায্য করবে: যা অনেকগুলি গুরুত্বপূর্ণ বিবরণ গোপন করে!
হোবার

@ শুভ: আমি আমার মন্তব্য পোস্ট করার পরে বুঝতে পারি যে একটি মাত্র গাছ আছে। আমার পদ্ধতির রেজিস্ট্রেশন করুন - আমি সম্মত হই যে আমার মন্টি কার্লো প্রস্তাবটি অস্পষ্ট এবং আপনার উত্তরটি শিখায় যে কীভাবে কেউ এই সেটিংয়ে মন্টি কার্লো বাস্তবায়িত করতে পারে। আমি প্রকৃতপক্ষে বোঝাতে চাইছিলাম যে সরাসরি পদ্ধতির (আমার উত্তরটি দেখুন) আসলে সহজ হতে পারে কারণ এই পদ্ধতির অভিধানে এককালীন ক্রিয়াকলাপ যেমন মন্টে কার্লো প্রয়োজন তার জন্য গাছটিতে কয়েক হাজার পুনরাবৃত্তি প্রয়োজন। পদ্ধতির আপেক্ষিক গুণাবলী সম্পর্কে কেবল অবাক হচ্ছি।

@ শ্রীকান্ত আমি আপনার প্রত্যক্ষ পদ্ধতির বিষয়ে মন্তব্য করা থেকে বিরত ছিলাম কারণ আমার সন্দেহ হয় যে এটির ভুল উত্তর পেয়েছে। অভিধানের কাঠামোর জন্য এটি অ্যাকাউন্টে উপস্থিত হয় না: এটি শব্দের মধ্যে সাবসেট সম্পর্ক। উদাহরণস্বরূপ, আপনার সূত্রটি সমস্ত অভিধানে শূন্যের সঠিক উত্তর পাবে যেটিতে সম্ভাব্য এক-অক্ষরের সমস্ত শব্দ রয়েছে?
whuber

@ হু হুম মম পয়েন্ট সম্ভবত, আমি ভুল প্রশ্নের উত্তর দিচ্ছি!

2

মন্টি কার্লো অ্যাপ্রোচ

দ্রুত এবং নোংরা পদ্ধতির একটি মন্টি কার্লো অধ্যয়ন করা। আঁকুন টাইল কাল ও প্রতিটি ড্র টাইল দেখতে আপনি একটি শব্দ গঠন করতে পারেন। দ্বারা আপনি কতবার শব্দ তৈরি করতে পারবেন তা । পছন্দসই সম্ভাবনাটি হ'ল:kmkmw

1mwm

সরাসরি অভিগমন

অভিধানে শব্দের সংখ্যা দ্বারা দেওয়া হোক । কে আমরা যে পদ্ধতিতে শব্দটি তৈরি করতে পারি তার সংখ্যা হতে দিন । প্রয়োজনীয় অক্ষর সংখ্যা যাক শব্দ দ্বারা প্রকাশ করা (অর্থাত, শব্দ দরকার 'একটি' বর্ণের সংখ্যা ইত্যাদি)। শব্দের সংখ্যা আমরা সব টাইলস সঙ্গে গঠন করতে পারেন বোঝাতে ।Stssthsthma,mb,...,mzsthmaN

N=(nk)

এবং

ts=(nama)(nbmb)...(nzmz)

(ওয়াইল্ডকার্ড টাইলসের প্রভাব সহ কিছুটা কৌশলযুক্ত। আমি এখনই এই সমস্যাটি পিছিয়ে দেব)

সুতরাং, পছন্দসই সম্ভাবনা হ'ল:

1stsN

দ্রুত এবং নোংরা পদ্ধতির এত দ্রুত নাও হতে পারে! অভিধানে ১,০০,০০০ শব্দ থাকতে পারে এবং প্রদত্ত টাইলগুলির একটি মিলের জন্য অনুসন্ধান কোডিং দুর্যোগ হতে পারে।
shabbychef

@ শ্যাববিচেফ এটি বানান চেকারদের জন্য উপযুক্ত কিছু something উদাহরণস্বরূপ দেখুন n3labs.com/pdf/lexicon-squeeze.pdf

@ শ্যাববিচেফ রেজিস্ট মন্টি-কার্লো- যদি অভিধানটি বাছাই করা হয় তবে ম্যাচটি মোটামুটি দ্রুত হওয়া উচিত? যাই হোক না কেন, আমি আগে প্রকাশিত প্রত্যক্ষ পদ্ধতির ত্রুটি ছিল। আমি এটা ঠিক করেছি. আমার আগের সমাধানটিতে সমস্যাটি ছিল একই শব্দটি একাধিক উপায়ে গঠিত হতে পারে (যেমন, 'ব্যাট', 'বি * টি' ইত্যাদি)।

1
@ শ্যাববিচেফ আরও প্রতিবিম্বিত করার জন্য, আমি আপনার সাথে সম্মত হই যে মন্টে কার্লো পদ্ধতির কাজ হবে না। একটি সমস্যা হ'ল আপনি কে টাইলসের সাহায্যে কোন শব্দটি গঠন করতে পারবেন তা বোঝার দরকার এবং দ্বিতীয়টি হ'ল আপনি কে টাইলসের সাহায্যে একাধিক শব্দ গঠন করতে পারেন। কে টাইলস থেকে এই সংমিশ্রণের গণনা করা সম্ভবত এতটা সহজ নয়।

1
@ শ্রীকান্ট ধন্যবাদ আপনার সূত্র ধরে মনে হচ্ছে শব্দের গঠনের জন্য আপনাকে সমস্ত কে অক্ষর ব্যবহার করতে হবে, তবে আমি মনে করি না যে ওপি এটি জিজ্ঞাসা করছে। (যাইহোক, স্ক্র্যাবল কীভাবে খেলানো হয় তা নয়)) এই অন্তর্নিহিত অনুমানের সাথে আপনি সঠিক পথে রয়েছেন তবে আপনাকে অ্যালগরিদমটি সংশোধন করতে হবে: আপনাকে অভিধানে শব্দের জন্য গণনা পুনরাবৃত্তি করতে হবে না যা একে অপরের অনুমানের অনুমতি। উদাহরণস্বরূপ, আপনার সূত্রে আপনাকে টি_ {স্টপ} এবং টি_ {পোস্ট both উভয়ই বিয়োগ করতে হবে না। (এই বাস্তবায়ন একটি সহজ পরিবর্তন হয়।)
whuber
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.