4k डेटा URI में आप क्या कर सकते हैं? [बन्द है]


44

बाउंटी खत्म हो गया है, एफिडेवलपर्स कॉनवे के गेम ऑफ लाइफ के साथ जीतता है

वेब प्लेटफॉर्म आज तेजी से आगे बढ़ रहा है। जैसी सुविधाओं CSS3 एनिमेशन , रूपांतरण , ड्रॉप छाया और ढ़ाल , <canvas>, <audio>और <video>टैग, एसवीजी , WebGL , और कई और अधिक मतलब है कि आप ब्राउज़र में कहीं अधिक कर सकते हैं, और अब तक कम कोड में, पहले से कहीं। बेशक, कई डेवलपर्स को उन नई सुविधाओं का उपयोग करने की ज़रूरत नहीं है, क्योंकि वे जिन साइटों और एप्लिकेशन पर काम करते हैं, वे IE6 जैसे प्राचीन, पतंगे खाने वाले ब्राउज़रों के साथ पीछे की ओर संगत होने की आवश्यकता है।

तो, क्या होगा यदि आप हार्नेस को बंद कर दें? अपने आप को किसी भी और सभी नई सुविधाओं का उपयोग करने की अनुमति दें जो आपको पसंद हैं? थोड़ा जियो, पागल हो जाओ, अजीब ब्लीडिंग एज फीचर्स का उपयोग करें जो आपके उपयोगकर्ताओं में से केवल 1% ही लाभ उठा पाएंगे?

बेशक, असीमित संसाधनों और एक सर्वर से बात करने की क्षमता के साथ, आप सभी तरह के काम कर सकते हैं - कोड और पुस्तकालयों और वीडियो के मेगाबाइट लोड करें, और इसी तरह - लेकिन बाधाओं के बिना चुनौतियां बहुत दिलचस्प नहीं हैं। इस प्रतियोगिता के लिए मुख्य बाधा यह है: आप एक एकल, स्व-निहित, 4k यूआरआई में क्या कर सकते हैंdata:? स्व-निहित का मतलब है कि यह किसी भी बाहरी संसाधनों को संदर्भित नहीं करना चाहिए, किसी भी सर्वर को WebSockets या XHR या किसी भी प्रकार का उपयोग करके कनेक्ट करना चाहिए। यदि आप पीएनजी या एमपी 3 जैसे संसाधनों को एम्बेड करना चाहते हैं, तो अपने डेटा यूआरआई के भीतर डेटा यूआरआई को शामिल करने के लिए स्वतंत्र महसूस करें, या उप-संसाधनों को एम्बेड करने के कुछ अन्य चतुर तरीके के साथ आएं। 4k का मतलब 4096 बाइट्स, ठीक से यूआरआई-एनकोडेड, एएससीआईआई टेक्स्ट (यदि आप चुनते हैं, तो आप यूआरआई एन्कोडिंग से बचने के लिए बेस 64 एनकोडेड डेटा यूआरआई का उपयोग कर सकते हैं, लेकिन आमतौर पर यूआरआई एनकोडेड टेक्स्ट सादे टेक्स्ट के लिए बेस 64 से छोटा होगा)।

प्रेरणा प्रदान करने के लिए, प्रतियोगिता का विषय StackOverflow memes है । एक यूनिकॉर्न-जेस्टिंग गेम, एक जॉन स्कीट तथ्य जनरेटर, एक फ्रीहैंड-सर्कल आधारित ड्राइंग प्रोग्राम, या लोकप्रिय StackOverflow & meta.so मेम में से एक के साथ कुछ भी बनाने के लिए बनाएं।

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

आपका प्रवेश कम से कम 5 प्रमुख ब्राउज़रों (IE, फ़ायरफ़ॉक्स, क्रोम, सफारी, ओपेरा) में से एक सार्वजनिक रिलीज़ में चलना चाहिए। केवल मेनलाइन रिलीज़ (शाखाओं से नहीं बनता है या पैच का निर्माण नहीं करता है), जिसमें कोई विशेष कॉन्फ़िगरेशन सेटिंग्स, प्लगइन्स, या स्टॉक ब्राउज़र के साथ आने वाली कोई भी चीज़ की अनुमति नहीं है। नाइटली बिल्ड, बेटास, और रिलीज के उम्मीदवार ठीक हैं। कृपया अपनी प्रविष्टि में निर्दिष्ट करें कि आपने किन ब्राउज़रों के साथ अपनी प्रविष्टि का परीक्षण किया है। आप उन बाधाओं के भीतर किन तकनीकों का उपयोग कर सकते हैं, इस पर कोई सीमा नहीं है; आप एक शुद्ध एसवीजी एनीमेशन, एक शुद्ध सीएसएस एनीमेशन, वेबलॉग का उपयोग करके जावास्क्रिप्ट में कुछ कर सकते हैं, या बिल्ली, यहां तक ​​कि एक्सएमएल और एक्सएसएलटी का उपयोग करने वाले कुछ भी अगर यह आपके फैंसी को मारता है। यदि आप इसे बिना किसी बाहरी निर्भरता के साथ एक वैध डेटा यूआरआई में रट सकते हैं, और इसे चलाने के लिए एक ब्राउज़र प्राप्त कर सकते हैं, तो यह उचित खेल है।

यहां प्रतियोगिता में जोड़ने के लिए, 21 मार्च, सोमवार को, मैं इस प्रश्न पर एक इनाम दूंगा। जब मेरे पास केवल 101 प्रतिनिधि हों तो मैं एक इनाम कैसे खरीद सकता हूं? खैर, सभी प्रतिनिधि मैं अब और सोमवार के बीच इस सवाल के लिए upvotes से लाभ (एक सीमा के लिए अनुमति दी 500 की सीमा तक) जाएगा, यह मेरे लिए बहुत मुश्किल होगा कि सीमा को मारा, हालांकि, प्रतिनिधि दिया टोपी)। उसके बाद 6 दिनों के लिए प्रवेश स्वीकार किए जाएंगे; बाउंटी की समय सीमा समाप्त होने से पहले सभी प्रविष्टियाँ कम से कम 24 घंटे में होनी चाहिए, जिससे मुझे उन सभी की जाँच करने और उनका मूल्यांकन करने का समय मिल सके। उस बिंदु पर, मैं उच्चतम मत वाले उत्तर को स्वीकार करूंगा, और अपने पसंदीदा उत्तर को इनाम दूंगा (जो उच्चतम मत वाले के समान नहीं हो सकता है या नहीं)। इनाम देने के लिए मेरे मानदंड में सौंदर्य, मज़ा, चतुर तकनीक, नई विशेषताओं का दिलचस्प उपयोग, अन्तरक्रियाशीलता और आकार शामिल होंगे।

यहाँ कुछ प्रेरणा के स्रोत हैं, आपको आरंभ करने के लिए:

  • क्रोम प्रयोग , आधुनिक वेब प्लेटफॉर्म के प्रदर्शनों का एक संग्रह
  • मोज़िला हैक्स , फ़ायरफ़ॉक्स 4 में नई सुविधाओं के कई डेमो के साथ आधुनिक वेब प्लेटफॉर्म के बारे में एक ब्लॉग
  • JS1k , 1k जावास्क्रिप्ट डेमो के लिए एक प्रतियोगिता
  • 10k इसके अलावा , 10k प्रतियोगिता में एक वेबपेज
  • gl64k , 64k WebGL डेमो के लिए वर्तमान में एक डेमो प्रतियोगिता चल रही है
  • शैडर टॉय , आप वेबलॉग शेड्स के साथ क्या कर सकते हैं, इसका एक सेट

प्रविष्टियों के लिए प्रारूप:

प्रवेश का नाम

डेटा: पाठ / html, आपका% 20data% 20URI

फ़ायरफ़ॉक्स 4 आरसी, क्रोम 10 और ओपेरा 11 में काम करता है

आपके प्रवेश का विवरण; यह क्या करता है, क्यों यह साफ-सुथरा है, आपने कौन सी चतुर तकनीकों का उपयोग किया है।

<script>
  // code in expanded form to more easily see how it works
</script>

प्रेरणाओं के लिए कोई क्रेडिट, आपके द्वारा उधार लिया गया कोई भी कोड आदि।

(StackExchange लिंक में डेटा URI को स्वीकार नहीं करता है, इसलिए आपको इसे सीधे <pre>टैग में एम्बेड करना होगा )


@ जॉय I ने संदर्भ के लिए SO मेम पर एक सूत्र से जोड़ा , किसी के लिए भी परिचित नहीं। यहाँ कुछ और अधिक लोकप्रिय हैं जिन्हें आपने शुरू किया है: यूनिकॉर्न्स, वेफल्स, फ्रीहैंड सर्कल (यानी, सर्कल या अन्य चित्र जो एमएस पेंट या इसी तरह के अनुप्रयोगों में फ्रीहैंड खींचे जाते हैं, आमतौर पर किसी प्रकार के यूजर इंटरफेस बग को उजागर करने के लिए उपयोग किया जाता है), जॉन स्कीट और चक नॉरिस-शैली "तथ्य" उसके बारे में
ब्रायन कैंपबेल

वैसे, प्रविष्टियों को सामान्य रूप से StackOverflow memes के बारे में होने की आवश्यकता नहीं है; सिर्फ एक मेम चुनें, जैसे गेंडा। वास्तव में, मैं थीम को यूनिकॉर्न बनाने की सोच रहा था, लेकिन किसी भी स्टैकऑवरफ्लो मेम को अनुमति देकर इसे थोड़ा खोलने का फैसला किया। और बिल्ली, यदि आपके पास एक शांत डेमो है जो विषय को फिट नहीं करता है, तो इसे किसी भी तरह सबमिट करें। विषय ज्यादातर प्रेरणा प्रदान करने के लिए है, न कि आप जो करते हैं उसे प्रतिबंधित करने के लिए।
ब्रायन कैंपबेल

मुझे एक विचार मिला है, लेकिन मुझे लगता है कि इसे लागू करने में 6 से 8 सप्ताह लगेंगे, क्या आप समय सीमा को थोड़ा बढ़ा सकते हैं?
आआआआआआआआआआ आआआआआ आआआआआ

@eBusiness हा हा! नहीं, स्टैक ओवरफ्लो के विपरीत, यहां वास्तव में समय सीमाएं हैं।
ब्रायन कैंपबेल

अधिक प्रविष्टियाँ कृपया?
मौरीस

जवाबों:


33

SO मेम: सब कुछ एक मेम है

सब कुछ एक मेम है। पर्याप्त कथन।

जीवन का कॉनवे गेम, HTML5 + CSS3 + JS,

3,543 3,561 3,555 बाइट्स

data:text/html,<!DOCTYPE%20html>%0A<html><head><title>Conway's%20Game%20of%20Life%20by%20Sam-Mauris%20Yong</title><style>body{margin:20px;padding:0;font:12px/1.6%20tahoma,sen-serif;}.clr{clear:both}#ftr{padding:10px;border-top:1px%20solid%20#DDD;margin-top:10px}input[type="submit"],input[type="button"],a.btn,a.btn:visited{color:#999;-moz-border-radius:5px;-webkit-border-radius:5px;border:1px%20solid%20#EEE;color:#333;cursor:pointer;padding:4px%208px;text-decoration:none;border:1px%20solid%20#EEE;background-color:#DDD}input[type="submit"]:hover,input[type="button"]:hover,a.btn:hover{background-color:#666;border:1px%20solid%20#EEE;color:#EEE;text-shadow:#000%201px%201px%200}a.btn.%20a.btn:visited{padding:5px%208px}input[type="submit"]:focus,input[type="button"]:focus,a.btn:focus{outline:none;border:1px%20solid%20#099}</style></head><body><h1>Conway's%20Game%20of%20Life</h1><canvas%20id="c"%20width="800"%20height="600"></canvas><div%20class="clr"></div><div%20style="margin-top:5px;"><input%20type="button"%20value="Start"%20id="ctrlStart"><input%20type="button"%20value="Stop"%20id="ctrlStop"><input%20type="button"%20value="Next"%20id="ctrlNext"></div><div%20id="ftr"><i>App%20requires%20awesome%20browsers%20supporting%20HTML5.</i><br>Written%20by%20@<a%20href="http://twitter.com/thephpdeveloper">thephpdeveloper</a>%20aka%20Sam-Mauris%20Yong.</div><script>eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return%20r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new%20RegExp('\\b'+e(c)+'\\b','g'),k[c]);return%20p}('7%20$(b){j%20Q.R(b)}7%20p(b){j%20S(b)}5%20k=$("c");5%20a=k.T("U");5%209={x:V,y:W};5%20s=10;5%206=t%20B(9.x);5%20X=Y;5%20i=-1;l(i++<6.h-1){6[i]=t%20B(9.y)}7%20C(b,c){a.D="Z";a.E(b*s,c*s,s,s);a.F="11";a.G(b*s,c*s,s,s)}7%20u(b){5%20c=t%2012();4(g(b)=="H"){4(g(b.h)!="I"){5%20c=[]}13(5%20d%2014%20b){4(g(b[d])=="H"){c[d]=u(b[d])}v{4(g(b[d])=="15"){c[d]=b[d]}v{4(g(b[d])=="16"){c[d]=b[d]}v{4(g(b[d])=="17"){((b[d]==m)?c[d]=m:c[d]=n)}}}}}}j%20c}7%208(b){j%20g(b)=="I"||!b?n:m}7%20J(b,d){5%20c=0;4(b>0){4(8(6[b-1][d])){c++}4(d>0){4(8(6[b-1][d-1])){c++}}4(d<9.y-1){4(8(6[b-1][d+1])){c++}}}4(b<9.x-1){4(8(6[b+1][d])){c++}4(d>0){4(8(6[b+1][d-1])){c++}}4(d<9.y-1){4(8(6[b+1][d+1])){c++}}}4(d>0){4(8(6[b][d-1])){c++}}4(d<9.y-1){4(8(6[b][d+1])){c++}}j%20c}7%20K(){5%20d=u(6);5%20c=0;l(c<6.h){5%20f=0;l(f<6[c].h){5%20b=6[c][f];5%20e=J(c,f);4(e<2||e>3){d[c][f]=n}4(e==3){d[c][f]=m}f++}c++}6=d}7%20o(){a.D="#18";a.E(0,0,p(k.19),p(k.1a));5%20b=0;l(b<6.h){5%20c=0;l(c<6[b].h){a.F="#1b";a.G(b*s,c*s,s,s);4(6[b][c]){C(b,c)}c++}b++}}5%20q;7%20w(){K();o()}7%20L(){q=M.1c(w,1d)}7%20N(){q=M.1e(q)}7%20z(c){4(r){5%20b=O.P((c.1f-p(k.1g))/s);5%20d=O.P((c.1h-p(k.1i))/s);6[b][d]=!6[b][d];o()}}5%20r=n;o();k.1j=7(b){r=m};k.1k=7(b){z(b)};k.1l=7(b){z(b);r=n};$("1m").A=N;$("1n").A=w;$("1o").A=L;',62,87,'||||if|var|space|function|evalbool|max|||||||typeof|length||return||while|true|false|draw||time_var|dodrawing||new|deepObjCopy|else|next|||editorDraw|onclick|Array|drawCell|fillStyle|fillRect|strokeStyle|strokeRect|object|undefined|countAliveNeighbours|update|start|window|stop|Math|floor|document|getElementById|parseInt|getContext|2d|80|60|lastSpace|null|black||white|Object|for|in|string|number|boolean|fff|width|height|ccc|setInterval|250|clearInterval|pageX|offsetLeft|pageY|offsetTop|onmousedown|onmousemove|onmouseup|ctrlStop|ctrlNext|ctrlStart'.split('|'),0,{}))</script></body></html>

यह कॉनवे का गेम ऑफ लाइफ है जो खुद को कैनवास और CSS3 के साथ HTML5 के लिए लिखा गया है। मैंने इसे 10K अतिरिक्त प्रतियोगिता की अवधि के दौरान मज़े के लिए लिखा था लेकिन मैंने प्रतियोगिता के लिए इसे प्रस्तुत नहीं किया।

Base64 एन्कोडेड संस्करण डेटा के 4.61KB से अधिक फैला हुआ है, जबकि मूल संस्करण ~ 3543 बाइट्स है।

आकार को संपीड़ित करने के लिए : YUI ऑनलाइन कंप्रेसर द्वारा जावास्क्रिप्ट कोड , फिर डीन एडवर्ड्स के पैकर द्वारा । सीएसएस कोड YUI ऑनलाइन कंप्रेसर द्वारा छोटा किया गया । Google API लाइब्रेरी से jQuery लाइब्रेरी का उपयोग करता है। मान्य HTML5 और CSS3 (डब्ल्यू 3 सत्यापनकर्ता का प्रयोगात्मक संस्करण)।

क्रीड़ा करना:

  • ब्लैक बॉक्स एक जीवित सेल का प्रतिनिधित्व करता है, सफेद मृत सेल का प्रतिनिधित्व करता है।
  • लाइव सेल को चिह्नित करने के लिए एक बॉक्स पर क्लिक करें, फिर से इसे मृत चिह्नित करने के लिए क्लिक करें।
  • <Start>सिमुलेशन चलाने, <Stop>रोकने और <Next>अगला कदम दिखाने के लिए दबाएं
  • इंटरनेट एक्सप्लोरर 9, फ़ायरफ़ॉक्स 4 (और फ़ायरफ़ॉक्स 3 के साथ-साथ), सफारी 5 और Google क्रोम पर कमाल चलता है।

मानव-पठनीय (रोबोट मर जाएगा) संस्करण:

<!DOCTYPE html>
<html>
    <head>
        <title>Conway's Game of Life by Sam-Mauris Yong</title>
        <style>
            body{
                margin:20px;
                padding:0;
                font:12px/1.6 tahoma,sen-serif;
            }
            .clr{
                clear:both
            }
            #ftr{
                padding:10px;
                border-top:1px solid #DDD;
                margin-top:10px
            }
            input[type="submit"],input[type="button"],a.btn,a.btn:visited{
                color:#999;
                -moz-border-radius:5px;
                -webkit-border-radius:5px;
                border:1px solid #EEE;
                color:#333;
                cursor:pointer;
                padding:4px 8px;
                text-decoration:none;
                border:1px solid #EEE;
                background-color:#DDD
            }            
            input[type="submit"]:hover,input[type="button"]:hover,a.btn:hover{
                background-color:#666;
                border:1px solid #EEE;
                color:#EEE;
                text-shadow:#000 1px 1px 0
            }
            a.btn,a.btn:visited{
                padding:5px 8px
            }
            input[type="submit"]:focus,input[type="button"]:focus,a.btn:focus{
                outline:none;
                border:1px solid #099
            }
        </style>
    </head>
    <body>
        <h1>Conway's Game of Life</h1>
    <canvas id="c" width="800" height="600"></canvas>
    <div class="clr"></div><div style="margin-top:5px;">
        <input type="button" value="Start" id="ctrlStart">
        <input type="button" value="Stop" id="ctrlStop">
        <input type="button" value="Next" id="ctrlNext">
    </div>
    <div id="ftr">
        <i>App requires awesome browsers supporting HTML5.</i>
        <br>
        Written by @<a href="http://twitter.com/thephpdeveloper">thephpdeveloper</a> aka Sam-Mauris Yong.
    </div>
    <script>
        function $(i){
            return document.getElementById(i);
        }
        function p(v){
            return parseInt(v);
        }
        var k = $("c");
        var a = k.getContext('2d');

        var max = {
            x: 80,
            y: 60
        };

        var s = 10;
        var space = new Array(max.x);
        var lastSpace = null;
        var i = -1;
        while(i++ < space.length - 1){
            space[i]= new Array(max.y);
        }

        function drawCell(x,y){
            a.fillStyle = "black";
            a.fillRect(x * s, y * s, s, s);
            a.strokeStyle = "white";
            a.strokeRect(x * s, y * s, s, s);
        }

        function deepObjCopy (dupeObj) {
            var retObj = new Object();
            if (typeof(dupeObj) == 'object') {
                if (typeof(dupeObj.length) != 'undefined')
                    var retObj = [];
                for (var objInd in dupeObj) {
                    if (typeof(dupeObj[objInd]) == 'object') {
                        retObj[objInd] = deepObjCopy(dupeObj[objInd]);
                    } else if (typeof(dupeObj[objInd]) == 'string') {
                        retObj[objInd] = dupeObj[objInd];
                    } else if (typeof(dupeObj[objInd]) == 'number') {
                        retObj[objInd] = dupeObj[objInd];
                    } else if (typeof(dupeObj[objInd]) == 'boolean') {
                        ((dupeObj[objInd] == true) ? retObj[objInd] = true : retObj[objInd] = false);
                    }
                }
            }
            return retObj;
        }

        function evalbool(v){
            return typeof(v) == 'undefined' || !v ? false : true;
        }

        function countAliveNeighbours(x,y){
            var l = 0;
            // left side
            if(x > 0){
                if(evalbool(space[x-1][y])){
                    l++;
                }
                if(y > 0){
                    if(evalbool(space[x-1][y-1])){
                        l++;
                    }
                }
                if(y < max.y-1){
                    if(evalbool(space[x-1][y+1])){
                        l++;
                    }
                }
            } // left side

            // right side
            if(x < max.x - 1){
                if(evalbool(space[x+1][y])){
                    l++;
                }
                if(y > 0){
                    if(evalbool(space[x+1][y-1])){
                        l++;
                    }
                }
                if(y < max.y-1){
                    if(evalbool(space[x+1][y+1])){
                        l++;
                    }
                }
            }
            // right side

            if(y > 0){
                if(evalbool(space[x][y-1])){
                    l++;
                }
            }

            if(y < max.y-1){
                if(evalbool(space[x][y+1])){
                    l++;
                }
            }

            return l;
        }

        function update(){
            var t = deepObjCopy(space);
            var x = 0;
            while(x < space.length){
                var y = 0;
                while(y < space[x].length){
                    var cell = space[x][y];
                    var nalive = countAliveNeighbours(x,y)

                    if(nalive < 2 || nalive > 3){
                        t[x][y] = false;
                    }
                    if(nalive==3){
                        t[x][y] = true;
                    }

                    y++;
                }
                x++;
            }
            space = t;
        }

        function draw(){
            a.fillStyle = "#fff";
            a.fillRect(0, 0, p(k.width), p(k.height));
            var x = 0;
            while(x < space.length){
                var y = 0;
                while(y < space[x].length){
                    a.strokeStyle = "#ccc";
                    a.strokeRect(x*s, y*s, s,s);
                    if(space[x][y]){
                        drawCell(x, y);
                    }
                    y++;
                }
                x++;
            }
        }

        var time_var;

        function next(){
            update();
            draw();
        }

        function start(){
            time_var = window.setInterval(
            next, 250);
        }

        function stop(){
            time_var = window.clearInterval(time_var);
        }
        function editorDraw(e){
            if(dodrawing){
                var x = Math.floor((e.pageX-p(k.offsetLeft))/s);
                var y = Math.floor((e.pageY-p(k.offsetTop))/s);
                space[x][y] = !space[x][y];
                draw();
            }
        }
        var dodrawing = false;

        draw();
        k.onmousedown = function(e){
            dodrawing=true;
        }
        k.onmousemove = function(e){
            editorDraw(e);
        }
        k.onmouseup = function(e){
            editorDraw(e);
            dodrawing=false;
        }
        $("ctrlStop").onclick = stop;
        $("ctrlNext").onclick = next;
        $("ctrlStart").onclick = start;
    </script>
</body>
</html>

इतिहास में एक वर्ग:

  1. JQuery और साथ ही URI- एन्कोडिंग सभी स्थानों से निर्भरता को हटाने के लिए संशोधित। कई मायनों में बेहतर कोड (जो मुझे याद नहीं है)।
  2. जीवित पड़ोसियों की गणना में फिक्स्ड बग और आकार को कम करने के लिए कुछ कोड को फिर से बनाया।

1
यह बहुत अच्छा है, लेकिन jQuery पुस्तकालय एक बाहरी निर्भरता नहीं है?
गारेथ

1
होस्ट किया गया: ebusiness.hopto.org/gol.htm
aaaaaaaaaaaaaa

3
आपको यहां बहुत अधिक jQuery की आवश्यकता नहीं है; आप शायद अपने कोड का विस्तार किए बिना कच्चे डोम एक्सेस के साथ इसे प्रतिस्थापित कर सकते हैं, संभवतः IE कॉम्पिटिटर की कीमत पर (लेकिन कैनवास पुराने IE के साथ संगत नहीं है, इसलिए आप बहुत अधिक नहीं खोएंगे)। अगर वह इसका विस्तार करता है, तो आपको इसे फिट करने के लिए थोड़ा और कटौती करने की आवश्यकता है, आपके पास कुछ वर्णनात्मक पाठ हैं जिन्हें आप हटा सकते हैं, साथ ही कुछ />अनुक्रम भी हैं जिन्हें आप बदल सकते हैं >क्योंकि आप एक्सएचटीएमएल नहीं लिख रहे हैं। इसके अलावा, अपने परिणाम को ठीक से यूआरआई-एनकोड करना याद रखें; जबकि ब्राउज़र URI में रिक्त स्थान स्वीकार कर सकते हैं, वे तकनीकी रूप से मान्य नहीं हैं।
ब्रायन कैंपबेल

4
कुछ और चीजें जिनका उपयोग आप अंतरिक्ष को बचाने के लिए कर सकते हैं, अगर आपको कुछ की जरूरत है। के लिए कोई वास्तविक जरूरत नहीं है <html>, <head>और <body>टैग (और न ही उनके समापन टैग)। वे HTML में अंतर्निहित हैं, और ब्राउज़र द्वारा उपयुक्त स्थानों में जोड़े जाएंगे।
ब्रायन कैंपबेल

1
वैसे, यदि आप कोड को छोटा करना चाहते हैं। किसी डेटा को चेक करने की तुलना में किसी सरणी को थोड़ा बड़ा करना अक्सर आसान होता है, ताकि आप हर बार पढ़ते समय सीमा से बाहर न पढ़ें। और आप एक क्षेत्र के चारों ओर एक रिंग के बजाय एक 3x3 वर्ग की गणना कर सकते हैं, आपको केवल इतना करना होगा कि क्षतिपूर्ति करने के लिए एल्गोरिथ्म को थोड़ा समायोजित किया जाए।
आआआआआआआआआआ आआआआआ

22

एक पुराना धागा खोदने के लिए क्षमा करें, लेकिन मैंने इस चुनौती को साइड बार पर देखा और मैं सिर्फ विरोध नहीं कर सका। मुझे कोई आपत्ति नहीं है कि चुनौती वास्तव में खत्म हो गई है, यह सिर्फ कुछ के साथ आने का मजा था।

शायद हम एक और दौर हो सकता है?

वैसे भी, मेरा सबमिशन:

संपादित करें

इसे फिर से खोदने के लिए क्षमा करें , लेकिन यह मुझे उम्र के लिए परेशान कर रहा था कि मैं इसे 1KB के तहत नहीं पा सकता था। अब मैंने कर दिया है!

इंटरएक्टिव, छायांकित घन:

960 987 1082 1156 1182 1667 1587 बाइट्स !, HTML + CSS3 + JS

data:text/html,<script>X='position:absolute;',S=Math,l=S.sin,V=S.cos,D='style',$='getElementsByTagName',E=H=G=(L=K=99)/2,q=-G,j=1e4,Y=',';function _(p,r,D){A=[],B=l(r),C=V(r);for(z=6;z--;)v=z*3,A.unshift({x:l(D)*(B*p[v+1]+C*p[v+2])+V(D)*p[v]+K,y:C*p[v+1]-B*p[v+2]+K});return A}function R(a,b,c){F=x[v++],a=N[a],b=N[b],c=N[c];F.setAttribute(D,X+'-webkit-transform:matrix('+(a.x-b.x)/L+Y+(a.y-b.y)/L+Y+(c.x-b.x)/L+Y+(c.y-b.y)/L+Y+b.x+Y+b.y+');opacity:'+(((b.y-a.y)/(b.x-a.x)-(c.y-a.y)/(c.x-a.x)<0)^(a.x<b.x^a.x>c.x)));F[$]('b')[0][D].background='rgb(0,'+(d(a,c)+d(a,b))+',0)';return R}function d(P,O){W=P.x-O.x,Q=P.y-O.y;return S.sqrt(W*W+Q*Q)|0}onload=function(){P=document;for(o=6;o--;)P.body.appendChild(P.createElement('P')).innerHTML='<b '+D+'="'+X+'width:99;height:99"></b>';x=P[$]('p');onmousemove=function(e){J=e.pageX-K;U=e.pageY-K};setInterval(function(){N=_([q,q,q,G,G,q,q,G,q,q,q,G,G,q,G,G,G,G],E+=J/j,H+=U/j);R(2,0,3)(5,1,2)(0,2,1)(4,3,0)(3,4,5)(1,5,4)})}</script>

अपने माउस ले जाएँ।

Chrome में काम करता है (18.something, लेकिन सबसे हाल के लोगों पर काम करना चाहिए)।

मैंने इसे बहुत अच्छी तरह से गढ़ा, मैंने कुछ पात्रों को बचाया जिसका उपयोग मैंने सोचा था कि मैं बहुत अच्छा था: कहो कि आपके पास निम्नलिखित हैं:

function g(x){alert("hello "+x+"!")}
g("dave");g("martin");g("alice");g("rose");g("bob");g("helen");g("jo");

वर्णों को अपने भीतर फ़ंक्शन वापस करके और निम्न कार्य करके बचाया जा सकता है:

function g(x){alert("hello "+x+"!");return g}
g("dave")("martin")("alice")("rose")("bob")("helen")("jo");

बचत इस बात पर निर्भर करती है कि आपके पास कितने फ़ंक्शन कॉल हैं। हालांकि यह गोल्फिंग के बजाय शायद मोटापे के लिए बेहतर है।

मैं भी बदल कर एक वर्ण बचाया 1000साथ 1e4, दे रही है Mathवर्ग, और अपने कार्यों, उपनाम हैं। बार-बार तार के लिए चर का उपयोग करना (इनमें से कुछ को खोजने के लिए काफी कठिन है)। इसके अलावा, मेरे पास styleमेरे कोड में कुछ बार शब्द था ; उनमें से कुछ तार थे और अन्य जैसे पहचानकर्ता थे element.style.whatever। स्ट्रिंग को एक चर ( D='style) में असाइन करने से मुझे स्ट्रिंग्स Dको बदलने और साथ ही पहचानकर्ताओं को बदलने की अनुमति मिली element[D].whatever

नवीनतम संपादन: एक पुराने COMP को लाने के लिए खेद है ', लेकिन कुछ विचार यह कैसे छोटा करने के लिए मेरे पास आया था!


अच्छा, एक प्रविष्टि बनाने के लिए धन्यवाद! यह बहुत अच्छा है। मुझे आपकी गोल्फ तकनीक भी पसंद है।
ब्रायन कैंपबेल

अच्छा है, लेकिन आपके पास बहुत जगह बची है, आपको इसमें और जोड़ना चाहिए :) रुबिक सिम्युलेटर के बारे में कैसे?
aditsu

onmousemoveसंशोधित किया जा सकता है onmousemove=function(e){U=K-e.pageX;J=e.pageY-K};:। इस तरह क्यूब माउस पॉइंटर (अधिक सहज) की ओर जाएगा।
विक्टर

यदि आप ECMAScript 6 से खुश हैं (यह केवल फ़ायरफ़ॉक्स (SpiderMonkey) में काम करता है, जहाँ तक मुझे पता है), तो function g(x){alert("hello "+x+"!");return g} g("dave")("martin")("alice")("rose")("bob")("helen")("jo");बन सकता हैg=x=>alert("hello "+x+"!"),g;g("dave")("martin")("alice")("rose")("bob")("helen")("jo");
Toothbrush

1

जावास्क्रिप्ट 489 चार्ट

यह एक नंबर गेम लगता है।

data:text/html,<!DOCTYPE%20html><html><body><h1>Guess the number between 0 and 100</h1><p id="p">good luck</p><form><input id="i" type="text"></input></form><br><button onclick="h()">Try</button><script>var r=Math.round(100*Math.random());function h(){var a=document.getElementById("i").value;var anum="/(^\d+$)/";var res="is not a number!";if (!isNaN(a)){if(a<r) res="higher";else if(r<a) res="lower";else res="you win";}document.getElementById("p").innerHTML=res;}</script></body></html>

मैंने इसे इस कोड के साथ काम किया है:

<!DOCTYPE html>
<html>
<head>
</head>
<body onload="g()">
<p id="p"></p>

<script>
f=function(x){
var y=x.replace(" ","%20");
window.location.assign("data:text/html,"+y);
}
g=function(){
var a="<!DOCTYPE html><html><body><h1>Guess the number between 0 and 100</h1><p id=\"p\">good luck</p>"+
"<form><input id=\"i\" type=\"text\"><\/input></form>"
+"<br><button onclick=\"h()\">Try<\/button><script>"
+document.getElementById("s").innerHTML+
"<\/script><\/body><\/html>";
f(a);
}
</script>
<script id="s">
var r=Math.round(100*Math.random());
function h(){
var a=document.getElementById("i").value;
var anum="/(^\d+$)/";
var res="is not a number!";
if (!isNaN(a)){
if(a<r) res="higher";
else if(r<a) res="lower";
else res="you win";
}
document.getElementById("p").innerHTML=res;
}
</script>

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