ভূমিকা :
অন্য কোনও ব্যক্তির সাথে কখনও ড্রপবক্স ব্যবহার করেছেন এবং আপনি দুজনেই একই ফাইলটি সংশোধন করেছেন? কোনও রিলেশনাল ডাটাবেস সহ কোনও বহু-ব্যবহারকারীর অ্যাপ্লিকেশন ছিল এবং দু'জন লোক একই বস্তুকে সংশোধন করছে (বা আরও খারাপ, একজন মুছে ফেলছে এবং অন্যটি সংশোধন করছে)? ঠিক আছে, আসুন আমরা এই চ্যালেঞ্জটি দিয়ে সাজান (সাজানোর)।
এই চ্যালেঞ্জের স্বার্থে, আমাদের কাছে কেবলমাত্র দুটি ব্যবহারকারী এবং এক বা দুটি প্রাসঙ্গিক ফাইল রয়েছে। উভয় ব্যবহারকারীরই সমস্ত ফাইল সিআরইউডির ( সাধারণভাবে তৈরি করুন, পড়ুন, আপডেট করুন এবং মুছুন) সুবিধে রয়েছে ।
চ্যালেঞ্জ:
ইনপুট:
আমাদের কয়েকটি ইনপুট থাকবে (ইনপুট ফর্ম্যাটটি নমনীয় এবং কোনও যুক্তিসঙ্গত বিন্যাস অনুমোদিত):
1) লকিং মোড (চালু / বন্ধ) : আশাবাদী এবং হতাশাবাদী একমত লকিংয়ের মধ্যে পার্থক্য রাখুন ।
উভয় ব্যবহারকারীকেই CRUD (তৈরি করুন, পড়ুন, আপডেট করুন এবং মুছুন) -এর অনুমতি দেওয়া হয় তবে অনেক সময় ত্রুটি বা সমস্যা দেখা দিতে পারে। বন্ধ করার সময় লকিং মোডের উপর নির্ভর করে কোনও সমস্যা চালু করা থাকলে ত্রুটি হতে পারে। এটি আউটপুট বিভাগে নীচে ব্যাখ্যা করা হয়েছে ।
2 এবং 3) দুটি ব্যবহারকারীর ক্রিয়া । এই ক্রিয়াগুলি সর্বদা দুটি জিনিস নিয়ে থাকে: ব্যবহারকারী কী করে (তৈরি করুন, পড়ুন, আপডেট করুন বা মুছুন) এবং কোন ফাইলের জন্য।
আউটপুট:
আমাদের তিনটি সম্ভাব্য আউটপুট থাকবে:
- বৈধ : উভয় ব্যবহারকারীর দ্বারা উভয় ক্রিয়া কোনও সমস্যা না ঘটাইয়া একসাথে করা যেতে পারে।
- ত্রুটি : উভয় ব্যবহারকারীর দ্বারা উভয় ক্রিয়া একই সাথে করা যায় না এবং ব্যবহারকারীদের মধ্যে একটির জন্য ত্রুটি সৃষ্টি করে (কোন ব্যবহারকারী এই চ্যালেঞ্জের জন্য অপ্রাসঙ্গিক)। এটি যখন হতে পারে:
- একটি ব্যবহারকারী একটি ফাইল পড়ে বা আপডেট করে যা অন্য ব্যবহারকারী মুছে ফেলে;
- উভয় ব্যবহারকারী লকিং মোড চালু করে একই ফাইল আপডেট করুন;
- কোনও ব্যবহারকারী একটি ফাইল তৈরি করে, যা অন্য ব্যবহারকারী পড়ে / আপডেট / মুছে ফেলে (এর অর্থ ফাইলটি ইতিমধ্যে বিদ্যমান, সুতরাং এটি তৈরি করা যায় না);
- উভয় ব্যবহারকারী একই ফাইল তৈরি করুন।
- সমস্যা : উভয় ব্যবহারকারীর দ্বারা উভয় ক্রিয়া একই সাথে করা যেতে পারে তবে অপ্রত্যাশিত সমস্যার কারণ হতে পারে। এটি যখন হতে পারে:
- উভয় ব্যবহারকারী লকিং মোডটি বন্ধ করার সময় একটি ফাইল আপডেট করেন;
- একটি ব্যবহারকারী একটি ফাইল আপডেট করে, যা অন্য ব্যবহারকারী পড়েন;
- উভয় ব্যবহারকারী একই ফাইল মুছুন (ব্যবহারিকভাবে এটি দ্বিতীয় ব্যবহারকারীর জন্য একটি ত্রুটির কারণ ঘটবে, তবে যেহেতু এটি এখনও ব্যবহারকারী মুছে ফেলা হবে তাই এই চ্যালেঞ্জের জন্য ত্রুটির পরিবর্তে এটি সমস্যা হবে)
চ্যালেঞ্জ বিধি:
- সমস্ত ইনপুট এবং আউটপুট নমনীয় এবং প্রত্যেকেরই উচিত তাদের উত্তরগুলিতে কোনটি ব্যবহার করেছে তা জানিয়ে দেওয়া উচিত!
উদাহরণস্বরূপ ইনপুট:0
/1
লকিং মোডের জন্য &31
(তৃতীয় ক্রিয়া: আপডেট; ফাইল: 1) &21
(দ্বিতীয় ক্রিয়া: পড়ুন; ফাইল: 1);true
/false
লকিং মোডের জন্য &['C','A']
(ক্রিয়া: তৈরি করুন; ফাইল: ক) &['D','B']
(ক্রিয়া: মুছুন; ফাইল: বি); ইত্যাদি
উদাহরণ ফলাফল:null
/true
/false
(নাল = বৈধ; সত্য = ত্রুটি; মিথ্যা = সমস্যা);-1
/0
/1
(-1 = ত্রুটি; 0 = সমস্যা; 1 = বৈধ); ইত্যাদি তিনটি আউটপুট তিনটি আউটপুট-টাইপের জন্য স্বতন্ত্র এবং স্বতন্ত্র হতে হবে , যদিও। - ফাইলগুলি কী বলা হয় তা অপ্রাসঙ্গিক, যা উপরের ইনপুট-উদাহরণগুলির সাথেও দেখা যায়। সুতরাং আপনার উত্তরগুলিতে কোনও একক (ASCII) চিঠি বা অঙ্ক সমন্বিত কোনও প্রকারের ফাইল নাম নির্দ্বিধায় ব্যবহার করুন। তবে আপনার সমস্ত পরীক্ষার ক্ষেত্রে এগুলি সামঞ্জস্যপূর্ণ হতে হবে, সুতরাং আপনি একটি পরীক্ষার ক্ষেত্রে / এবং অন্য কোনও ক্ষেত্রে
A
/ ব্যবহার করতে পারবেন না ।B
1
2
- সিআরইউডির জন্য চারটি ক্রিয়াটিও অনন্য এবং ধারাবাহিক মান হতে হবে। সুতরাং আপনি একটি পরীক্ষার ক্ষেত্রে / এবং অন্য / পরীক্ষার ক্ষেত্রে
'D'
/ ব্যবহার করতে পারবেন না ।'C'
4
1
- আপনি ধরে নিতে পারেন যে কোনও ব্যবহারকারী দ্বারা নির্বাচিত ফাইলটি সর্বদা উপস্থিত থাকে যখন তারা এটি পড়তে, আপডেট করতে বা মুছতে চায়।
সপ্তাহের দিন:
- এটি কোড-গল্ফ , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।
কোড-গল্ফ ভাষাগুলি আপনাকে নন-কোডগলফিং ভাষার সাথে উত্তর পোস্ট করতে নিরুৎসাহিত করবেন না। 'যে কোনও' প্রোগ্রামিং ভাষার জন্য যতটা সম্ভব সংক্ষিপ্ত উত্তর নিয়ে আসার চেষ্টা করুন। - আপনার উত্তরটির জন্য ডিফল্ট আই / ও বিধিগুলির সাথে মানক বিধিগুলি প্রযোজ্য , সুতরাং আপনাকে সঠিক পরামিতি এবং ফিরতি-টাইপ, সম্পূর্ণ প্রোগ্রাম সহ STDIN / STDOUT, ফাংশন / পদ্ধতি ব্যবহারের অনুমতি দেওয়া হবে। আপনার কল
- ডিফল্ট লুফোলগুলি নিষিদ্ধ।
- যদি সম্ভব হয় তবে দয়া করে আপনার কোডের (যেমন টিআইও ) একটি পরীক্ষার সাথে একটি লিঙ্ক যুক্ত করুন ।
- এছাড়াও, আপনার উত্তরের জন্য একটি ব্যাখ্যা যুক্ত করা অত্যন্ত প্রস্তাবিত।
সমস্ত সম্ভাব্য পরীক্ষার কেস (যেখানে ক্রিয়াগুলি ইনপুট-অর্ডারে হতে পারে † ):
। : আপনার নীচের পরীক্ষার কেসগুলির সমস্ত (চারটি পর্যন্ত) প্রকারের সমর্থন করা উচিত। সুতরাং যদি কোনও পরীক্ষার কেস বলে action1: Create file A; action2: Update file B
, সেই পরীক্ষার ক্ষেত্রেও একই ফলাফল রাখা উচিত action1: Create file B; action2: Update file A
; action1: Update file B; action2: Create file A
; এবং action1: Update file A; action2: Create file B
।
Valid use-cases:
locking mode: either; action1: Create file A; action2: Create file B
locking mode: either; action1: Create file A; action2: Read file B
locking mode: either; action1: Create file A; action2: Update file B
locking mode: either; action1: Create file A; action2: Delete file B
locking mode: either; action1: Read file A; action2: Read file A
locking mode: either; action1: Read file A; action2: Read file B
locking mode: either; action1: Read file A; action2: Update file B
locking mode: either; action1: Read file A; action2: Delete file B
locking mode: either; action1: Update file A; action2: Update file B
locking mode: either; action1: Update file A; action2: Delete file B
locking mode: either; action1: Delete file A; action2: Delete file B
Error use-cases:
locking mode: either; action1: Create file A; action2: Create file A
locking mode: either; action1: Create file A; action2: Read file A
locking mode: either; action1: Create file A; action2: Update file A
locking mode: either; action1: Create file A; action2: Delete file A
locking mode: either; action1: Read file A; action2: Delete file A
locking mode: on; action1: Update file A; action2: Update file A
locking mode: either; action1: Update file A; action2: Delete file A
Problem use-cases:
locking mode: either; action1: Read file A; action2: Update file A
locking mode: off; action1: Update file A; action2: Update file A
locking mode: either; action1: Delete file A; action2: Delete file A
B/B
আমার গণনায় সমস্ত মামলা বাদ দিয়েছি , যেহেতু আমি এগুলির মতোই বলেছি A/A
। পার্থক্য কোথা থেকে আসছে। তবে আমি অনুমান করি যে আপনার যদি ফাইলগুলির জন্য একটি নির্দিষ্ট মান থাকে তবে চিন্তাভাবনাটি ভুলভাবে হয় ..