आरक्षित जावास्क्रिप्ट


41

ECMAScript 2015 के रूप में, जावास्क्रिप्ट है 33 आरक्षित कीवर्ड , जैसे break, constऔर new, साथ ही 10 भविष्य सुरक्षित कीवर्ड जैसे, letऔर await

कार्यात्मक जावास्क्रिप्ट कोड 3 लिखते समय आपका कार्य लगातार 1 अलग-अलग आरक्षित खोजशब्दों 2 की सबसे बड़ी संख्या को एक साथ जोड़ना है ।

  1. लगातार आरक्षित कीवर्ड - आरक्षित कीवर्ड जो केवल व्हाट्सएप और / या कोष्ठक और / या घुंघराले ब्रेस द्वारा अलग किए जाते हैं।
  2. आरक्षित कीवर्ड - कोई भी आरक्षित या भविष्य के आरक्षित कीवर्ड ECMAScript 2015 के अनुसार । पुराने मानकों के आरक्षित खोजशब्दों को बाहर रखा गया है, अनुमत खोजशब्दों की पूरी सूची नीचे दी गई है।
  3. कार्यात्मक कोड - आपका कोड चलना चाहिए (यदि आवश्यक हो तो अपना रनटाइम बताएं), अंततः रुकें, और कोई रनटाइम त्रुटियों को न फेंकें।

यदि आपके कोड को एक विशिष्ट रनटाइम की आवश्यकता है, तो उपयोग किए गए आरक्षित कीवर्ड दिए गए वातावरण में नो-ऑप्स नहीं होने चाहिए।

आरक्षित खोजशब्दों की सूची

स्कोरिंग और उदाहरण

आपका स्कोर लगातार अलग-अलग आरक्षित खोजशब्दों की सबसे बड़ी संख्या के बराबर होगा।
बराबर स्कोर के मामले में, बाइट्स में सबसे छोटा स्रोत कोड जीत जाता है। टिप्पणी की गई धाराएँ और तार आरक्षित खोजशब्दों की ओर नहीं, बल्कि बाइट गिनती की ओर गिनते हैं।

// score: 3
if (true) 0; else throw function() {}
             ^------------------^
// score: 2
let foo = typeof typeof void typeof void 0;
                             ^---------^
// score: 0
/* typeof default debugger */

// score: 0, doesn't halt or debugger is no-op, depending on the environment
debugger;

मानक खामियां लागू होती हैं।


सैंडबॉक्स चर्चा , उन लोगों के लिए जो रुचि रखते हैं।
लीख

मुझे ऐसा लगता है कि यदि आप कीवर्ड के बीच कोष्ठक की अनुमति नहीं देते तो यह अधिक दिलचस्प हो सकता है।
गेहूं जादूगर

क्या नईलाइन की अनुमति है?
l4m2

@ l4m2 हां, यह व्हाट्सएप है।
लीख

1
@ l4m2 वही 43-बिंदु समाधान संभव है बिना नईलाइन्स के भी संभव है इसलिए शायद मैं समझ नहीं पा रहा हूं कि आप क्या करने की कोशिश कर रहे हैं?
नट

जवाबों:


53

43 शब्द, 603 बाइट्स

उह, क्या यह एक खामियाजा है? मुझे नहीं पता कि यह कानूनी जेएस कैसे है, लेकिन यह काम करता है और यह हर एक कीवर्ड का उपयोग करता है।

new (class await
{
    break(){}
    case(){}
    catch(){}
    const(){}
    continue(){}
    debugger(){}
    default(){}
    delete(){}
    do(){}
    else(){}
    enum(){}
    export(){}
    extends(){}
    finally(){}
    for(){}
    function(){}
    if(){}
    implements(){}
    import(){}
    in(){}
    instanceof(){}
    interface(){}
    let(){}
    package(){}
    private(){}
    protected(){}
    public(){}
    return(){}
    static(){}
    super(){}
    switch(){}
    this(){}
    throw(){}
    try(){}
    typeof(){}
    var(){}
    void(){}
    while(){}
    with(){}
    yield(){}
})

3
जेएस के साथ परिचित नहीं है, लेकिन ... ये वास्तव में कीवर्ड हैं जब इस संदर्भ में उपयोग किया जाता है, या बस ऐसे तार हैं जो कीवर्ड के समान शाब्दिक संरचना हैं और उद्धरण से बचने के लिए चीनी का उपयोग कर रहे हैं?
लेउशेंको

1
@ लिशेंको शायद दूसरा (हालांकि मैं जेएस से बिल्कुल भी परिचित नहीं हूं), क्योंकि वे जिस तरह से उपयोग किए जाते हैं उसमें फ़ंक्शन नाम की तरह दिखते हैं। फिर भी, आम तौर पर इन कीवर्ड्स को फ़ंक्शंस या क्लास नामों के रूप में उपयोग करना संभव नहीं होना चाहिए, लेकिन सिगुज़ा ने अभी भी ऐसा किया है, जबकि अभी भी केवल कोष्ठक और कोष्ठक का उपयोग करने के चुनौतीपूर्ण नियमों का अनुपालन कर रहा है। सभी शब्दों के साथ इस चुनौती को पूरा करने के लिए एक अच्छी खोज, भले ही मैं वास्तव में कीवर्ड के रूप में कीवर्ड का उपयोग करने के लिए अन्य जवाबों में से सबसे अधिक प्रभावशाली लग रहा हूं । फिर भी मेरे से +1, ऐसा लगता है कि हमारे पास एक विजेता है।
केविन क्रूज़सेन

6
@ user202729 हालांकि क्यों? जब इसे इतना सरल किया जा सकता है तो इसे अत्यधिक जटिल क्यों दिखना चाहिए? कोड-गोल्फिंग आमतौर पर जितना संभव हो उतना कम कर रहा है, लेकिन मैं व्यक्तिगत रूप से अभी भी कुछ विस्तार के लिए पठनीयता और सरलता रखना पसंद करता हूं (मुझे पता है, मुझे पता है, यह कोड-गोल्फिंग चुनौती नहीं है)। कुछ उदाहरण: मैं का उपयोग करना पसंद -1, i+1, i-1ऊपर ~0, -~i, ~-iजब मैं, जो उन लोगों के कोड-गोल्फ और साथ भी परिचित नहीं हैं के लिए पढ़ने के लिए सिर्फ इसलिए कि यह स्पष्ट है सकते हैं ~अभी तक। हालांकि मैं निश्चित रूप से हमेशा का उपयोग करने के लिए i+~jऔर i-~jगोल्फ के उस एकल बाइट i-j-1और i+j+1। ;)
केविन क्रूज़सेन

2
हां, मैं इसे और मैश कर सकता हूं, और बाइट को नीचे लाने की कोशिश करूंगा ... एक शुरुआत जैसी if(this)return void typeof function(){} else debuggerमुश्किल नहीं है, लेकिन इसके बाद यह बदसूरत हो जाती है। और हाँ, यह पूरी तरह से खोजशब्दों को पहचानकर्ताओं में बदल देता है - लेकिन उनमें से कुछ के लिए आपको उनका उपयोग करने में सक्षम होना होगा (उदाहरण के लिए enum)। मैं अभी इसे चरम पर ले गया, लेकिन क्या कोड गोल्फिंग के बारे में सब कुछ नहीं है? : पी
सिगुजा

1
@ दुखद नहीं, एक वर्ग-विधि के नाम की आपूर्ति केवल एक व्याकरणिक संदर्भ है जहां शाब्दिक टोकन को संपत्ति के नाम के रूप में माना जाता है, भले ही वे आरक्षित शब्द हों। यह मूल रूप से एक ही है, शब्दार्थ, जैसा कि कर रहा है obj["break"] = function (){}आदि
अप्सिलर्स

53

37 शब्द

if (void this) {
  do {
    with (protected)
      for (public in private)
        typeof static instanceof new (function implements() {
          var let
          try {
            throw (class extends {} {})
          } catch (package) {
            yield
          } finally {
            debugger
          }
          return
        })()
    continue
    break
  } while (interface)
} else {
  switch (delete await) { default : 42 }
}

उपयोग नहीं किए गए कीवर्ड:

  • case की आवश्यकता है :
  • const की आवश्यकता है =
  • export सख्त मोड की आवश्यकता है
  • import सख्त मोड की आवश्यकता है
  • super की आवश्यकता है constructor

7
मैं मानता हूँ मैं हँसा
nicael

48
यह विशिष्ट जावा बॉयलरप्लेट कोड जैसा दिखता है, उदाहरण के लिए गणना करने के लिए 1 + 2
एरिक ड्यूमिनिल

2
@EricDuminil यह वास्तविक कारण है जिसे _Java_ स्क्रिप्ट कहा जाता है।
wizzwizz4

5
@ EricDuminil के रूप में यह काफी सरल नहीं है 1 + 2। इस कोड का पूरा मूल्य जीवन, ब्रह्मांड और सब कुछ के अंतिम प्रश्न का उत्तर है। वह जटिल है । :)
tsh

2
यह सिर्फ अद्भुत है।
पेड्रो ए

30

43 शब्द, 302 299 बाइट्स

switch(void function(){for(const interface in public)do with(package)try{break}catch(private){if(typeof
this)throw yield static instanceof new class extends await{case(){return}super(){debugger}import(){}export(){}enum(){}}
else continue}finally{delete let}while(protected)var implements}){default:}

सैद्धांतिक निम्नतर 277 (प्रत्येक दो शब्द एक बाइट द्वारा अलग किए गए)
l4m2

अच्छा काम, वर्तमान में आप केवल गायब हैं enum
लीख

10

21 24 26 शब्द, 185 बाइट्स

+ 1 2 शब्दों के लिए धन्यवाद Arnauld, और +1 से 12Me21!

void(function(){do{with({})if(typeof true in this)throw{}instanceof new(class extends{}{})
else return delete{}
try{break}finally{yield}
continue
}while(false)})()
switch({}){case{}:{}}

मुझे लगता है कि चुनौती को समझते हुए, यह स्कोर 24 शब्द है। कोष्ठक, कोष्ठक और श्वेतपत्र के बिना शब्द:

void function do with if typeof true in this throw instanceof new class extends else return delete try break finally yield continue while false switch case

24 शब्द, 177 बाइट्स

बिना "सच" और "झूठे", जो स्पष्ट रूप से प्रश्न के अनुसार कीवर्ड नहीं हैं।

void(function(){do{with({})if(typeof{}in this)throw{}instanceof new(class extends{}{})
else return{}
try{break}finally{yield}
continue
}while(delete{})})()
switch({}){case{}:{}}

शब्द:

void function do with if typeof in this throw instanceof new class extends else return try break finally yield continue while delete switch case

(मैंने गलती से अपनी टिप्पणी को संपादित करने के बजाय हटा दिया, सामग्री थी: "आप सत्य / असत्य के स्थान पर हटाएं {} का उपयोग कर सकते हैं, सोचें (और सिर्फ कुछ भी नहीं
लौटाएं

आह येस। मैंने उस नियम पर ज्यादा ध्यान नहीं दिया।
अरनौलड

आप डाल सकते हैं case ... :या default:अंत में (चूंकि :कीवर्ड के बीच अनुमति नहीं है)
12M2121

ओट आप for(let _;0;);+2 शब्दों के साथ समाप्त हो सकते हैं (लेकिन आप caseअब और उपयोग नहीं कर सकते हैं)।
अरनौलड

switch({}){case{}:{}}=> switch({}){case{}:;}? पता नहीं कि क्या ;कभी-कभी आवश्यक है
l4m2

6

३ 39 ३ ९

class await {}
class g extends await {
 constructor() {
  super()
 }
}
switch ({}) {
 case function(){
  for (let in public)
  do with(package){
   try{break}catch(private){
   if(typeof this)
    throw static instanceof new (class extends await {})
   else{continue}}finally{debugger}
  }while(void protected)
  var implements
  return 
  yield delete interface
  const a=0
 }:
}

"सुपर" से "कॉन्स्ट" शब्द

गोल्फ संस्करण:

class e{}class g extends e{constructor(){super()}}switch({}){case
function(){for(let in public)do with(package)try{break}catch(private){if(typeof
this)throw static instanceof new(class extends await{})
else{continue}}finally{debugger}while(void protected)
var implements
return 
yield delete interface
const a=0}:}

क्या यह अब गोल्फ का समय है?
l4m2

मैं हो रही है Uncaught SyntaxError: Unexpected token deleteजब मैं गूगल क्रोम पर मेरे Javascript कंसोल में अपना जवाब चलाने का प्रयास है, मैं कैसे जांच कर सकते हैं, तो अपने समाधान मान्य है?
फेरेबिग

@ फेरीबग मैं फ़ायरफ़ॉक्स का उपयोग करता हूं और यह ठीक काम करता है। मैं नए संस्करण क्रोम को सिस्टम के कारण स्थापित नहीं कर सकता
l4m2

मुझे फ़ायरफ़ॉक्स में यह त्रुटि मिलती हैSyntaxError: yield expression is only valid in generators
TheChetan

मैं
l4m2

4

21 शब्द

(नहीं यकीन है कि के बारे में letऔर await)

var await=String, let=String;
switch (await) {
    case void typeof new await instanceof let in (function()
{do{try{return this
if((class extends{}{})){}else{break}}finally{(delete {})}}while(false)})():break;
}

, =और ;विभाजक के रूप में अनुमति नहीं है।
user202729

2
वे गिने जाते हैं जो नहीं कर रहे हैं
soktinpk

3

43 शब्द, 300 बाइट्स

with(this)try{let protected}catch(package){if(delete yield)for(const interface in typeof public)do{throw implements instanceof private}while(static)else debugger}finally{switch(void new class extends function(){return}{export(){var await}import(){break}super(){continue}enum(){}case(){}}){default:0}}

अधिक आसानी से:

with(this)
    try {
        let protected
    } catch(package){
        if(delete yield)
            for(const interface in typeof public)
                do {
                    throw implements instanceof private
                } while(static)
        else
            debugger
    } finally {
        switch(
          void new class extends function(){return} {
              export(){var await}
              import(){break}
              super(){continue}
              enum(){}
              case(){}
          }
        ){
            default:0
        }
    }

मुझे इससे निपटने के लिए "आरक्षित शब्द को विधि नाम के रूप में उपयोग करना पड़ा"

  • case(चूँकि मैंने पहले ही defaultअपने साथ प्रयोग कर लिया था swtich),
  • exportऔर import(चूंकि मॉड्यूल-मोड हमेशा सख्त होता है, जो अयोग्य होता है with)
  • super(क्योंकि यह एक संपत्ति का उपयोग या एक constructorसमारोह में रखा जाना चाहिए ), और
  • enum (जिसका उपयोग कभी नहीं किया जा सकता है, बिना किसी व्याकरणिक-वैध उपयोग के आरक्षित शब्द है)

मेरा 39 समाधान शो superशुरुआत में नाम के बिना दिखाई दे सकता है, लेकिन बहुत महंगा है
l4m2

3

14 15 16 कोई कोष्ठक या न्यूलाइन के साथ शब्द

!function(){if(0);else do throw yield new public in void typeof this instanceof class await extends function async(){}{};while(0)}

बर्गी को +1 के लिए धन्यवाद


क्या आप इसे एक जनरेटर फ़ंक्शन बना सकते हैं और एक में फेंक सकते हैं yield?
बर्गी

मैंने यह पता लगाने की कोशिश की कि यह क्या करता है, लेकिन मेरा सिर घूमने लगा। क्या आप एक स्पष्टीकरण पोस्ट कर सकते हैं?
फिलिप

Uncaught SyntaxError: Unexpected token newजब मैं अपने जावास्क्रिप्ट कंसोल के अंदर पेस्ट कर रहा होता हूँ
फेरीबग

1
@ फेरीबग, के functionसाथ प्रतिस्थापित करता है function*, इसलिए इसे एक जनरेटर के रूप में मान्यता दी जाएगी।
अतिथि -418

2

28 शब्द बिना कोष्ठक के, 234 बाइट्स

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

मुझे आशा है कि returnएक खामी के रूप में गिनती नहीं होने के बाद मृत कोड , लेकिन उपयोग किए गए पहचानकर्ता घोषित होने पर कोड अभी भी चल रहा है।

function*_(){implements:{
let private
var public
return yield typeof static
delete protected
throw new interface in package
break implements
debugger
void this instanceof class await extends function async(){}{}
do
continue
while(0)}}

यह इस तथ्य का फायदा उठाता है कि भविष्य के कुछ आरक्षित कीवर्ड केवल ES5.1 के सख्त मोड में अमान्य माने जाते हैं (जाहिरा तौर पर क्योंकि इंजन ES3 के भविष्य के आरक्षित सभी शब्दों को ब्लॉक करने की जहमत नहीं उठाते थे इसलिए वेब पर उनका उपयोग करके बहुत अधिक कोड था। )।

इसी तरह, asyncऔर awaitटोकन ES8 में पेश केवल कठोर मोड में कीवर्ड माना जाता है।


हो सकता है breakऔर continueवहाँ हो सकता है?
l4m2

जब मैं फ़ंक्शन को कॉल Uncaught SyntaxError: Undefined label 'implements'करता हूं, तो मुझे मिलता है , क्या आपके जवाब को एक विशिष्ट रनटाइम की आवश्यकता है?
लीख

@ ओह उफ़, मैंने वास्तव में इसे कॉल नहीं किया, मैंने केवल जाँच की कि क्या यह वाक्यात्मक रूप से अनुमति दी गई है (और फिर अभियोजन पक्ष को अनुकूलित किया गया है: D)।
बर्गी

@ l4m2 ओह, आप सही कह रहे हैं, लेकिन वे रनटाइम त्रुटि नहीं कर सकते हैं, इसलिए मैंने नोटिस नहीं किया :-( काम करने के लिए मनमाने ढंग से पुन: व्यवस्थित करने की आवश्यकता है (और लेबल के साथ एक ब्लॉक)।
बर्गी

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