मेरे रहस्यों को बचाओ!


14

मेरे पास बहुत सारे रहस्य हैं और उन्हें रखने के लिए कहीं नहीं!

लक्ष्य सरल है: एक प्रोग्राम लिखें जो आपको एक स्ट्रिंग को सहेजने देता है और इसे पासवर्ड द्वारा संरक्षित किया जाना चाहिए।

कार्यक्रम मापदंडों के रूप में एक उपनाम, पासवर्ड और (वैकल्पिक) गुप्त ले जाएगा।

यदि यह पहली बार है जब प्रोग्राम को किसी दिए गए उपनाम के साथ बुलाया जाता है, तो यह गुप्त स्टोर करेगा / याद रखेगा, और जो चाहे आउटपुट कर सकता है।

यदि प्रोग्राम को एक उपनाम के साथ कहा जाता है जो पहले उपयोग किया गया है, तो यह उस उपनाम के लिए गुप्त आउटपुट देगा यदि पासवर्ड पहली बार उस उपनाम के साथ चलाया गया था।

अन्य मामले

  • अगर इसकी पहली बार एक निश्चित उपनाम के साथ बुलाया जा रहा है और कोई रहस्य नहीं दिया गया है - कुछ भी नहीं स्टोर करें।

  • यदि प्रोग्राम का उपयोग किए गए उपनाम के साथ कहा जाता है, और पासवर्ड गलत है - किसी भी तरह की त्रुटि या कुछ भी नहीं लौटाएं।

  • यदि प्रोग्राम का उपयोग किए गए उपनाम के साथ कॉल किया जाता है, तो पासवर्ड सही है और एक नया रहस्य आपूर्ति किया जाता है - पुराने रहस्य को आउटपुट करता है और इसे नए के साथ बदल देता है ताकि अगली बार केवल नया रहस्य आउटपुट हो।

  • यदि प्रोग्राम का उपयोग किया गया एक उपनाम के साथ कहा जाता है, तो पासवर्ड सही है और कोई नया रहस्य नहीं दिया गया है - पुराने रहस्य को आउटपुट करें और सुनिश्चित करें कि यह प्रतिस्थापित नहीं होता है।

नोट: इन रहस्यों / पासवर्डों को सुरक्षित रूप से संग्रहीत करने की आवश्यकता नहीं है

यह भी ध्यान दें: उपनाम पासवर्ड और रहस्यों के लिए किसी भी अल्फ़ान्यूमेरिक इनपुट को स्वीकार किया जाना चाहिए

मानक नियम लागू होते हैं, अच्छी किस्मत!


1
हां, इसे स्टोर करने के लिए किसी भी चीज़ का उपयोग करें - जैसा कि उपनामों के लिए मुझे लगता है कि इसे किसी भी अल्फ़ान्यूमेरिक इनपुट को स्वीकार करना चाहिए
क्विन

1
क्या हम एक पूर्ण कार्यक्रम के बजाय एक फ़ंक्शन का उपयोग कर सकते हैं?
अरनौलड

1
@ अरनल्ड मैं इसकी अनुमति दूंगा
क्विन

1
क्या हम मान सकते हैं कि पासवर्ड और सीक्रेट खाली स्ट्रिंग नहीं हैं?
xnor

1
क्या हम किसी भी स्थिति में एक शून्य उत्तर (जैसे 0 या कोई नहीं) का उत्पादन करते हैं, जहां हम गुप्त उत्पादन नहीं करते हैं?
xnor

जवाबों:


10

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

@JonasWilms की बदौलत 10 बाइट्स बचाए !

(alias,password,secret)या तो इनपुट लेता है या (alias,password)। रिटर्न अपरिभाषित पहली बार एक गुप्त संग्रहीत किया जाता है, या गलत है, तो पासवर्ड गलत है।

f=(a,p,s,[P,v]=f[a]||[p])=>p==P&&(f[a]=[P,s||v],v)

एक 1 परीक्षण मामले की कोशिश करो ऑनलाइन!

ऑनलाइन एक 2 परीक्षण का प्रयास करें!

कैसे?

हम एक नामित समारोह को परिभाषित जिसका अंतर्निहित वस्तु भी पासवर्ड और रहस्यों को स्टोर करने के लिए प्रयोग किया जाता है।f

टिप्पणी की गई

f = (             // f = named function whose underlying object is used for storage
  a,              // a = alias
  p,              // p = password
  s,              // s = optional secret
  [P, v] = f[a]   // if f[a] is defined, retrieve the password P and the secret v
           || [p] // otherwise, copy p in P
) =>              //
  p == P && (     // if p is not equal to P, yield false; else:
    f[a] = [      //   update f[a]:
      P,          //     save the new password (or leave it unchanged)
      s || v      //     save the new secret if it's defined, or keep the previous one
    ],            //
    v             //   return the previous secret
  )               //

मुझे दूसरी जगह ले गए कि आप चीजों को कैसे स्टोर कर रहे हैं!
झबरा

हम्म, क्या यह सही है?
NGN

1
@ng यह वास्तव में गलत होने की संभावना है। यह रिपोर्ट करने के लिए धन्यवाद। अब तय होना चाहिए।
अरनौलद

-7 बाइट्स ऑब्जेक्ट के अंदर एक [पासवर्ड, मान] एरे को स्टोर करके।
जोनास विल्म्स

@JonasWilms अच्छी तरह से किया! मैं किसी भी स्थिति के बारे में नहीं सोच सकता जहाँ p&&आवश्यकता हो। तो, यह एक और -3 बाइट्स है।
अरनौलड

6

पायथन 2 , 94 93 बाइट्स

def f(a,p,s=0,d={}):
 q,t=d.get(a,(0,0))
 if q==p:d[a]=p,s or t;return t
 elif q<1<s:d[a]=p,s

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

एक बार, पायथन के अजीब डिफ़ॉल्ट तानाशाह मेरे पक्ष में काम करता है ...


प्रतीक्षा करें, एक डिफ़ॉल्ट तर्क का उपयोग करने से यह फ़ंक्शन कॉल पर एक नए के बजाय सिर्फ एक ऑब्जेक्ट बनाता है? हम्म् ... यह बहुत सारे डिबगिंग की व्याख्या करता है जो मुझे पहले लोल को करना था।
हाइपरएन्यूट्रीनो



1

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 140 138 134 बाइट्स

-2 बाइट्स @ धन्यवाद डेटा का धन्यवाद

a=>p=>s=>(a=P.ContainsKey(a)?P[a]:P[a]=new[]{p,s},o:p==a[0]?a[1]:p,s==""?s:p==a[0]?a[1]=s:s).o;var P=new Dictionary<string,string[]>()

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



1
@ExpiredData 134, जैसा Pकि dynamicअब होना जरूरी नहीं है
मेरा सर्वनाम


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