परिचय :
कभी कुछ अन्य लोगों के साथ ड्रॉपबॉक्स का उपयोग किया गया है और आप दोनों ने एक ही फाइल को संशोधित किया है? कभी एक संबंधपरक डेटाबेस के साथ एक बहु-उपयोगकर्ता अनुप्रयोग था, और दो लोग एक ही वस्तु को संशोधित कर रहे थे (या इससे भी बदतर, एक हटा रहा था और दूसरा संशोधन कर रहा था)? ठीक है, चलो इस चुनौती (क्रमबद्ध) के साथ अनुकरण करते हैं।
इस चुनौती के लिए, हमारे पास केवल दो उपयोगकर्ता हैं और या तो एक या दो प्रासंगिक फाइलें हैं। दोनों उपयोगकर्ताओं के पास CRUD के सामान्य विशेषाधिकार (क्रिएट, रीड, अपडेट और डिलीट) सभी फाइलें हैं।
चुनौती:
इनपुट:
हमारे पास कुछ इनपुट होंगे (इनपुट प्रारूप लचीला है, और किसी भी उचित प्रारूप की अनुमति है):
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किसी अन्य रूप में। - CRUD के लिए चार क्रियाओं के साथ-साथ अद्वितीय और सुसंगत मूल्य होने चाहिए। तो आप उपयोग कर सकते नहीं
'D'/'C'एक परीक्षण के मामले में, और फिर4/1एक और परीक्षण के मामले में। - आप यह मान सकते हैं कि उपयोगकर्ता द्वारा चुनी गई फ़ाइल हमेशा तब मौजूद होती है जब वे इसे पढ़ना, अपडेट या हटाना चाहते हैं।
सामान्य नियम:
- यह कोड-गोल्फ है , इसलिए बाइट्स जीत में सबसे छोटा जवाब है।
कोड-गोल्फ भाषाओं को गैर-कोडगॉल्फिंग भाषाओं के साथ उत्तर पोस्ट करने से हतोत्साहित न करें। 'किसी भी' प्रोग्रामिंग भाषा के लिए यथासंभव संक्षिप्त उत्तर के साथ आने का प्रयास करें। - डिफ़ॉल्ट I / O नियमों के साथ आपके उत्तर के लिए मानक नियम लागू होते हैं , इसलिए आपको उचित पैरामीटर और रिटर्न-प्रकार, पूर्ण कार्यक्रमों के साथ STDIN / STDOUT, फ़ंक्शन / विधि का उपयोग करने की अनुमति है। तुम्हारा कॉल।
- डिफ़ॉल्ट लूपोल्स वर्जित हैं।
- यदि संभव हो, तो कृपया अपने कोड (यानी TIO ) के लिए एक परीक्षण के साथ एक लिंक जोड़ें ।
- साथ ही, आपके उत्तर के लिए स्पष्टीकरण जोड़ने की अत्यधिक अनुशंसा की जाती है।
सभी संभव परीक्षण मामलों (जहां कार्रवाई या तो इनपुट-क्रम में हो सकता है † ):
Support : आपको नीचे दिए गए परीक्षण मामलों की सभी (चार तक) विविधताओं का समर्थन करना चाहिए। इसलिए यदि कोई टेस्ट केस बताता है 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। बस यहीं से अंतर आ रहा है। लेकिन मुझे लगता है कि अगर आप फ़ाइलों के लिए एक विशिष्ट मूल्य रखते हैं तो सोच गलत है ..