बहु-उपयोगकर्ता CRUD: मान्य, समस्या या त्रुटि?


13

परिचय :

कभी कुछ अन्य लोगों के साथ ड्रॉपबॉक्स का उपयोग किया गया है और आप दोनों ने एक ही फाइल को संशोधित किया है? कभी एक संबंधपरक डेटाबेस के साथ एक बहु-उपयोगकर्ता अनुप्रयोग था, और दो लोग एक ही वस्तु को संशोधित कर रहे थे (या इससे भी बदतर, एक हटा रहा था और दूसरा संशोधन कर रहा था)? ठीक है, चलो इस चुनौती (क्रमबद्ध) के साथ अनुकरण करते हैं।

इस चुनौती के लिए, हमारे पास केवल दो उपयोगकर्ता हैं और या तो एक या दो प्रासंगिक फाइलें हैं। दोनों उपयोगकर्ताओं के पास CRUD के सामान्य विशेषाधिकार (क्रिएट, रीड, अपडेट और डिलीट) सभी फाइलें हैं।

चुनौती:

इनपुट:

हमारे पास कुछ इनपुट होंगे (इनपुट प्रारूप लचीला है, और किसी भी उचित प्रारूप की अनुमति है):

1) लॉकिंग मोड (ऑन / ऑफ) : आशावादी और निराशावादी संगरोध लॉकिंग के बीच का अंतर ।
दोनों उपयोगकर्ताओं को CRUD (क्रिएट, रीड, अपडेट और डिलीट) सब कुछ करने की अनुमति है, लेकिन कभी-कभी त्रुटियां या समस्याएं हो सकती हैं। बंद होने पर लॉकिंग मोड की समस्या के आधार पर, चालू होने पर एक त्रुटि हो सकती है। इसे आउटपुट सेक्शन में नीचे समझाया गया है ।

2 और 3) दो उपयोगकर्ता-क्रियाएं । इन कार्यों में हमेशा दो चीजें होती हैं: उपयोगकर्ता क्या करता है (बनाएं, पढ़ें, अपडेट करें या हटाएं) और किस फ़ाइल के लिए।

आउटपुट:

हमारे पास तीन संभावित आउटपुट होंगे:

  1. मान्य : दोनों उपयोगकर्ताओं द्वारा दोनों क्रियाएं बिना किसी समस्या के एक साथ की जा सकती हैं।
  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

2
मुझे लगता है कि वहाँ एक 1 बाइट समाधान होगा अगर मैं सिर्फ सही इनपुट / आउटपुट विधियों (शायद किसी प्रकार की बिट मास्किंग) के साथ आ सकता हूं
एक्सपायर्ड डेटा

2
@ExpiredData ने संभावित आउटपुट के कुछ हिस्सों को बदल दिया, कि उन्हें लगातार होना चाहिए, लेकिन जरूरी नहीं कि यह अद्वितीय हो। और यह भी कि निविष्टियाँ सुसंगत होनी चाहिए।
केविन क्रूज़सेन

1
@Arnauld आह, मैंने B/Bअपनी गिनती में सभी मामलों को छोड़ दिया , क्योंकि मैंने उन्हें इसी तरह समझा A/A। बस यहीं से अंतर आ रहा है। लेकिन मुझे लगता है कि अगर आप फ़ाइलों के लिए एक विशिष्ट मूल्य रखते हैं तो सोच गलत है ..
केविन क्रूज़सेन

जवाबों:


8

जावास्क्रिप्ट (ईएस 6), 36 बाइट्स

लुकअप टेबल के बिना

(m,a,f,A,F)=>f-F?2:a^A?a*A&8:a&4?m:a

इसे ऑनलाइन आज़माएं!

आई / ओ

  • m08
  • aA0248
  • fF
  • 028

कैसे?

2

यदि फ़ाइलें समान हैं, तो हमें वापस लौटना होगा:

  • 2
  • 8
  • m
  • 0

4×4

a ^ AaA? ? a * A & 8 : a & 4update? ? m:a

CRUD0248C00000R20280U408m0D80008


जावास्क्रिप्ट (ईएस 6),  46 45  40 बाइट्स

लुकअप टेबल के साथ

(m,a,f,A,F)=>f-F?0:[m,1,1,0][a*2+A*9&23]

इसे ऑनलाइन आज़माएं!

आई / ओ

  • 1
  • 0123
  • फ़ाइलें: किसी भी पूर्णांक
  • 01

4

रेटिना 0.8.2 , 53 बाइट्स

^(.)(?!\1).+|..RR.
V
..DD.
P
..UUL
E
.+[CD].+
E
..+
P

इसे ऑनलाइन आज़माएं! लिंक में परीक्षण सूट शामिल है। 5 वर्णों की एक स्ट्रिंग के रूप में इनपुट लेता है, फ़ाइल नाम का प्रतिनिधित्व करने वाले दो वर्ण, फिर से दो वर्ण CRUD, Lया U(लॉक / अनलॉक), और आउटपुट में से एक VPE(मान्य / समस्या / त्रुटि)। स्पष्टीकरण:

^(.)(?!\1).+|..RR.
V

विभिन्न फ़ाइल नाम हमेशा मान्य होते हैं, जैसे कि दो रीड होते हैं। अनायास, यह एकमात्र परीक्षा है जो मुझे हेडर का उपयोग करने के लिए मजबूर करती है। (हेडर को अनावश्यक बनाने के लिए अतिरिक्त बाइट का खर्च आएगा।)

..DD.
P

दो हटाना हमेशा एक समस्या है।

..UUL
E

दो लॉक किए गए अपडेट एक त्रुटि हैं।

.+[CD].+
E

कोई अन्य बनाता है या हटाता है एक त्रुटि है।

..+
P

बाकी सब समस्या है।


3

ऑक्टेव , 96 बाइट्स

@(a,b,c)[a(1)!=b(1)|a(2)+b(2)==20,mod((m=a+b+c)(2),10010)<1|mod(m(2),1020000)<1|mod(m(2),200)<1]

इसे ऑनलाइन आज़माएं!

निश्चित रूप से कम हो सकता है, लेकिन मेरे पास अभी ऐसा करने के लिए समय नहीं है

File 1 = 0
File 2 = 1
Read = 10
Delete = 100
Create = 1000 
Update = 10000
Lock on = 100000
Lock off = 1000000

Valid Values: 
[1 0] 

Problem Values: 
[0 1]


Invalid Values: 
[0 0]

इनपुट के रूप में = [फ़ाइल, एक्शन], बी = [फाइल 2, एक्शन 2], सी = लॉक

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.