f=_=>do{try{-~f()}catch(e){}}
- 2 बाइट्स ने नील को धन्यवाद दिया।
इसे यहाँ आज़माएँ , या evalइसके बजाय इसका परीक्षण करने के लिए नीचे स्निपेट का उपयोग करें do।
console.log((f=_=>eval(`try{-~f()}catch(e){}`))())
जैप पोर्ट, 24 बाइट्स
यह वास्तव में इसे एक अलग समाधान के रूप में पोस्ट करने के लायक नहीं है क्योंकि यह अनिवार्य रूप से समान है।
Ox`try\{-~rp()}¯t®(e)\{}
झसे आज़माओ
व्याख्या
जावास्क्रिप्ट में स्वयं के प्रति एक पुनरावृत्ति सीमा नहीं है, बल्कि सीमा दुभाषिया (यानी, ब्राउज़र) द्वारा लगाई जाती है - अच्छी बात है कि हम उनके दुभाषिया के दौर द्वारा भाषाओं को परिभाषित करते हैं! अन्य कारकों में, सीमा ब्राउज़र और उपलब्ध मेमोरी द्वारा भिन्न हो सकती है, जो कि प्रदर्शन किए जा रहे कार्यों से प्रभावित होती है। निम्नलिखित स्निपेट उस अंतिम बिंदु को दिखाता है, जिसके समाधान के 5 अलग-अलग संस्करणों का उपयोग करके मैं गया था। जैसा कि आप पिछले 2 परीक्षणों से देख सकते हैं, क्रोम में, कम से कम, यहां तक कि संचालन के क्रम में भी फर्क पड़ सकता है।
console.log((f=(i=0)=>eval(`try{f(i+1)}catch(e){i}`))())
console.log((f=i=>eval(`try{f(-~i)}catch(e){i}`))())
console.log((f=(i=0)=>eval(`try{f(++i)}catch(e){i}`))())
console.log((f=_=>eval(`try{-~f()}catch(e){}`))())
console.log((f=_=>eval(`try{f()+1}catch(e){0}`))())
console.log((f=_=>eval(`try{1+f()}catch(e){0}`))())
यह देखते हुए, इसलिए हमारे पास काम करने के लिए एक निरंतर या विधि की सुविधा नहीं है। इसके बजाय, हम एक ऐसा फंक्शन बनाने जा रहे हैं, जो पहले खुद को लगातार कॉल करता है, आखिरकार, बाहर क्रैपिंग करता है। यह सबसे सरल रूप है:
f=_=>f()
लेकिन यह इस चुनौती के लिए हमारे लिए बहुत अधिक उपयोग नहीं है क्योंकि यह केवल एक अतिप्रवाह त्रुटि फेंकता है जिसमें कोई संकेत नहीं है कि कितनी बार fखुद को बुलाया। हम द्वारा त्रुटि से बचने कर सकते हैं trying कॉल करने के लिए fलगातार और catching जब यह विफल:
f=_=>{try{f()}catch(e){}}
कोई त्रुटि नहीं है, लेकिन फिर भी कोई वापसी मूल्य कितनी बार फ़ंक्शन विफल होने से पहले खुद को कॉल करने में कामयाब रहा, क्योंकि catchवास्तव में कुछ भी नहीं कर रहा है। आइए try / catchकथन का मूल्यांकन करने का प्रयास करें :
f=_=>eval(`try{f()}catch(e){}`)
अब हमें एक मान लौटाया जा रहा है (और, क्योंकि यह कोड गोल्फ है, एक वास्तविक का उपयोग करके अपने आप को कुछ बाइट्स से बचाया return)। मान वापस किया जा रहा है, हालांकि undefined, फिर से है , क्योंकि catchकुछ भी नहीं कर रहा है। सौभाग्य से हमारे लिए -~undefined==1और -~n==n+1इसलिए, -~कॉल के सामने एक पॉपिंग करके f, हम अनिवार्य रूप से -~-~ ... -~-~undefined, -~प्रत्येक कॉल के साथ एक और पूर्वनिर्धारित के साथ, हमें समय की संख्या fकहते हैं।
f=_=>eval(`try{-~f()}catch(e){}`)