আমাদের Free Fire tournament app-এ একটি Solo match-এর ৪৮ জনের রুমে ৪৭ জন জয়েন করেছে। অর্থাৎ, Slot ফাঁকা আছে মাত্র ১টি।
ঠিক একই মুহূর্তে, একদম exact same Planck time-এ Player A এবং Player B সম্পূর্ণ আলাদা জায়গা থেকে 'Join Match' request সার্ভারে পাঠালো। দুজনের request-এর latency, ping এবং timestamp ১০০% হুবহু এক।
এখন backend developer হিসেবে তোমাকে এমন একটি algorithm বা logic লিখতে হবে, যা একজনকে ওই slot দিবে এবং অন্যজনকে 'Room Full' দেখাবে। কিন্তু condition গুলো হলো:
No Randomization: কোনো ধরনের rand() ফাংশন, math random, টস বা লটারি সিস্টেম ইউজ করা যাবে না।
No Database Lock or Queueing: Pessimistic lock, optimistic lock বা Job Queue ব্যবহার করা যাবে না। কারণ queue-তে ফেলার সময় CPU thread বা OS scheduler যাকে আগে process করবে সে slot পাবে, যা মূলত hardware-level randomization। এটি strict-ভাবে নিষিদ্ধ।
No User Data Bias: Player-এর UID, IP address, MAC address, level, balance, account creation date বা name-এর length compare করে কাউকে favor করা যাবে না। দুজনের condition গাণিতিকভাবে ১০০% symmetrical হতে হবে।
No Execution Order Bias: কোডের sequential execution-এর সুযোগ নেওয়া যাবে না। অর্থাৎ if (request_A) আগে লিখে A-কে advantage দেওয়া যাবে না। Algorithm-কে completely unbiased এবং neutral হতে হবে।
No External Validation: User-কে কোনো captcha বা confirmation pop-up দিয়ে সময় নষ্ট করা যাবে না। Code-কে instantaneous decision নিতে হবে।
No Escape Route: দুজনকেই reject করে slot ফাঁকা রাখা যাবে না, আবার error throw করে execution stop করা যাবে না। ঠিক একজনকে success এবং অন্যজনকে fail করাতেই হবে।
Question:
উপরের কোনো condition break না করে, pure programming logic এবং pure mathematical algorithm দিয়ে তোমার backend system কীভাবে logically decision নিবে যে ওই শেষ ১টা slot কে পাবে?
যে এই logical deadlock solve করে ১০০% perfect answer দিতে পারবে, তাকে Khelo Bangladesh Php App er Source Code/Swb গিফট দেওয়া হবে।
ঠিক একই মুহূর্তে, একদম exact same Planck time-এ Player A এবং Player B সম্পূর্ণ আলাদা জায়গা থেকে 'Join Match' request সার্ভারে পাঠালো। দুজনের request-এর latency, ping এবং timestamp ১০০% হুবহু এক।
এখন backend developer হিসেবে তোমাকে এমন একটি algorithm বা logic লিখতে হবে, যা একজনকে ওই slot দিবে এবং অন্যজনকে 'Room Full' দেখাবে। কিন্তু condition গুলো হলো:
No Randomization: কোনো ধরনের rand() ফাংশন, math random, টস বা লটারি সিস্টেম ইউজ করা যাবে না।
No Database Lock or Queueing: Pessimistic lock, optimistic lock বা Job Queue ব্যবহার করা যাবে না। কারণ queue-তে ফেলার সময় CPU thread বা OS scheduler যাকে আগে process করবে সে slot পাবে, যা মূলত hardware-level randomization। এটি strict-ভাবে নিষিদ্ধ।
No User Data Bias: Player-এর UID, IP address, MAC address, level, balance, account creation date বা name-এর length compare করে কাউকে favor করা যাবে না। দুজনের condition গাণিতিকভাবে ১০০% symmetrical হতে হবে।
No Execution Order Bias: কোডের sequential execution-এর সুযোগ নেওয়া যাবে না। অর্থাৎ if (request_A) আগে লিখে A-কে advantage দেওয়া যাবে না। Algorithm-কে completely unbiased এবং neutral হতে হবে।
No External Validation: User-কে কোনো captcha বা confirmation pop-up দিয়ে সময় নষ্ট করা যাবে না। Code-কে instantaneous decision নিতে হবে।
No Escape Route: দুজনকেই reject করে slot ফাঁকা রাখা যাবে না, আবার error throw করে execution stop করা যাবে না। ঠিক একজনকে success এবং অন্যজনকে fail করাতেই হবে।
Question:
উপরের কোনো condition break না করে, pure programming logic এবং pure mathematical algorithm দিয়ে তোমার backend system কীভাবে logically decision নিবে যে ওই শেষ ১টা slot কে পাবে?
যে এই logical deadlock solve করে ১০০% perfect answer দিতে পারবে, তাকে Khelo Bangladesh Php App er Source Code/Swb গিফট দেওয়া হবে।
🙏3
Ladies and Gentlemen, finally আমরা আমাদের মেগা চ্যালেঞ্জের উইনার পেয়ে গেছি।
@BanglaBhai_FF যে অ্যানসারটা দিয়েছে সেটা ১০০% accurate এবং একদম perfect। আমি ভেবেছিলাম এই logical deadlock-এর আসল ট্রিকটা কেউ ধরতে পারবে না। কিন্তু @BanglaBhai_FF একদম রুট লেভেলে গিয়ে সার্ভারের hardware আর physical layer-এর মেকানিজম দিয়ে practically বুঝিয়ে দিয়েছে যে, pure software logic একা এই ডেডলক সলভ করতে পারে না। Network Interface Card বা হার্ডওয়্যার নিজেই ডেটা serialize করে ফেলে। এটাই একমাত্র সঠিক অ্যানসার।
আর এখানে @nexdeveowner ও একটা অ্যানসার দিয়েছিল। উনার theoretical কথাটা কিছুটা সত্য ছিল যে symmetry ব্রেক করার জন্য কোনো মেকানিজম লাগবে। কিন্তু লজিকের দিক থেকে উনারটায় ভুল আছে, কারণ real life সার্ভারে practically হার্ডওয়্যার লেভেলে কাজটা কীভাবে হয় সেই exact সলিউশনটা উনি দিতে পারেননি।
তাই accurate লজিক এবং আসল developer মাইন্ডসেটের জন্য আমাদের চ্যাম্পিয়ন হচ্ছে @BanglaBhai_FF কথা অনুযায়ী তাকেই টুর্নামেন্ট অ্যাপের premium PHP source code-টা গিফট করা হচ্ছে।
Congratulations @BanglaBhai_FF
@BanglaBhai_FF যে অ্যানসারটা দিয়েছে সেটা ১০০% accurate এবং একদম perfect। আমি ভেবেছিলাম এই logical deadlock-এর আসল ট্রিকটা কেউ ধরতে পারবে না। কিন্তু @BanglaBhai_FF একদম রুট লেভেলে গিয়ে সার্ভারের hardware আর physical layer-এর মেকানিজম দিয়ে practically বুঝিয়ে দিয়েছে যে, pure software logic একা এই ডেডলক সলভ করতে পারে না। Network Interface Card বা হার্ডওয়্যার নিজেই ডেটা serialize করে ফেলে। এটাই একমাত্র সঠিক অ্যানসার।
আর এখানে @nexdeveowner ও একটা অ্যানসার দিয়েছিল। উনার theoretical কথাটা কিছুটা সত্য ছিল যে symmetry ব্রেক করার জন্য কোনো মেকানিজম লাগবে। কিন্তু লজিকের দিক থেকে উনারটায় ভুল আছে, কারণ real life সার্ভারে practically হার্ডওয়্যার লেভেলে কাজটা কীভাবে হয় সেই exact সলিউশনটা উনি দিতে পারেননি।
তাই accurate লজিক এবং আসল developer মাইন্ডসেটের জন্য আমাদের চ্যাম্পিয়ন হচ্ছে @BanglaBhai_FF কথা অনুযায়ী তাকেই টুর্নামেন্ট অ্যাপের premium PHP source code-টা গিফট করা হচ্ছে।
Congratulations @BanglaBhai_FF