सत्र-बचत क्वीन


12

इस सवाल से प्रेरित ।

एक प्रोग्राम बनाएं जो उपयोगकर्ता को कुछ डेटा स्टोर करने के लिए प्रेरित करता है, और जब प्रोग्राम छोड़ रहा है, तो प्रोग्राम डेटा को छोड़कर, प्रोग्राम को स्वयं थूक दें।

उपयोगकर्ता तब नए उत्पन्न प्रोग्राम को खोलता है, और पिछले प्रोग्राम के डेटा को याद कर सकता है।

आदेश

  • KEY VALUE: के लिए सत्र चर सेट करता KEYहैVALUE
  • *: सभी डेटा को साफ़ करें
  • ! KEY: हटाओ KEY
  • ? KEY: क्वेरी KEY(यदि मौजूद नहीं है: कुछ भी नहीं छापें और आगे बढ़ें)
  • अन्यथा, कार्यक्रम छोड़ दें

किसी भी कुंजी या मान में कोई स्थान नहीं हो सकता। नवनिर्मित प्रोग्राम के फ़ाइलनाम को प्रोग्राम के संस्करण की पहचान करनी चाहिए, आप दिनांक या काउंटर का उपयोग कर सकते हैं।

उदाहरण बातचीत:

 name test                    store name = test
                              data is now { name: test }
 0 1                          data is now { name: test, 0: 1 }
 ? name                       output: test
 ! 0                          delete 0
                              data is now { name: test }
 hello good world             data is now { name: test, hello: good }
                              the extra word "world" is ignored
 egiwiwegiuwe                 the "otherwise" case: quit program

उपयोगकर्ता नव निर्मित प्रोग्राम खोलता है

 ? name                       output: test
 name retest                  data is now { name: retest }
 *                            clear
                              data is now { }

नमूना कार्यान्वयन: https://gist.github.com/1128876

नियम

  • आपको क्वैन्ड प्रोग्राम में टिप्पणियों या महत्वहीन व्हाट्सएप को संरक्षित करने की आवश्यकता नहीं है: बस कार्यक्षमता और डेटा को संरक्षित करें
  • आप किसी भी बाहरी संग्रहण का उपयोग नहीं कर सकते।
  • कोई धोखा नहीं देता है, अन्य किसी भी तरह की समस्या।
  • सबसे छोटा कोड जीतता है।

यह मुझे उस समय की याद दिलाता है जब मैंने SQL सर्वर में एक दृश्य लिखा था जो INSERT / UPDATE / DELETE ट्रिगर्स का उपयोग करके एक तालिका की तरह काम करता था और डेटा को स्वयं के रूप में संग्रहीत करता हैSELECT 1 AS ID, NAME AS BLAH UNION...
mellamokb

क्या माना जाता है धोखा देने वाली रानी?
केसी चू

केसी, खुद के सोर्स कोड को पढ़ना, आमतौर पर।
जॉय

आह। मेरा जेएस समाधान करने के लिए करीब आता है, वूप्स। ओह ठीक है, क्योंकि यह कल्पना उस बारे में स्पष्ट नहीं है, मैं इसे नीचे किए जाने के जोखिम पर छोड़ दूँगा।
केसी चू

जवाबों:


1

रूबी 1.9, 159 156

यह प्रोग्राम "1", "2", "3" और इसी तरह की अन्य फाइलों को जनरेट करता है।

b={}
I=1
eval T="loop{c,d=gets.split
c==?*?b={}:d ?c==?!?b.delete(d):c==???puts(b[d]):b[c]=d :break}
open(I.to_s,?w){|f|f<<'b=%p
I=%d
eval T=%p'%[b,I+1,T]}"

1

D (419 वर्ण)

enum c=q{string[string] m;import std.stdio;import std.array;void main(){foreach(string s;lines(stdin)){auto a=s.split;if(!a.length)goto e;switch(a[0]){case "*":m.clear;break;case "!":m.remove(a[1]);break;case "?":writeln(m.get(a[1],""));break;default:if(a.length<2){goto e;}m[a[0]]=a[1];}stdout.flush;}e:write("static this(){");foreach(i,v;m)writef("m[`%s`]=`%s`;",i,v);write("}enum c=q{",c,"};mixin(c);");}};mixin(c);

स्वरूपित:

enum c=q{
    string[string] m;
    import std.stdio;
    import std.array;
    void main(){
        foreach(string s;lines(stdin)){
            auto a=s.split;
            if(!a.length)goto e;
            switch(a[0]){
                case "*":m.clear;break;
                case "!":m.remove(a[1]);break;
                case "?":writeln(m.get(a[1],""));break;
                default:if(a.length<2){goto e;}m[a[0]]=a[1];
            }
            stdout.flush;
        }
        e:write("static this(){");
        foreach(i,v;m)writef("m[`%s`]=`%s`;",i,v);
        write("}enum c=q{",c,"};mixin(c);");
    }
};mixin(c);

मेरी डी क्वीन का संस्करण

*आदेश पर निर्भर करता है m.clear;सही ढंग से काम जो इसे (संकलक में बग) डीएमडी 2.52 में नहीं करने के लिए

के लिए की जरूरत stdout.flush;पर निर्भर करता है ऑटो फ्लश सक्षम है या नहीं (यह मेरे मशीन पर नहीं है)


1

जावास्क्रिप्ट, 245

(function(o,N){while(a=prompt()){a=a.split(' ')
b=a[0]
c=a[1]
if(b=='*')o={}
else if(b=='?'){if(o[c]!=N)alert(o[c])}
else if(b=='!')delete o[a[1]]
else if(c!=N)o[b]=c
else break}alert('('+arguments.callee+')('+JSON.stringify(o)+')')}({}))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.