कोडगोल्फ ऑब्जेक्ट


14

इसकी कल्पना करें, हमारे पास एक वैश्विक क्षेत्र है जिसमें केवल एक ही ऑब्जेक्ट है, जिसे कहा जाता है codegolf। इस ऑब्जेक्ट में एक एकल बच्चा है stackexchange, जिसे एक संपत्ति कहा जाता है com
इस संपत्ति तक पहुँचना ऐसा लगेगा codegolf.stackexchange.com

चुनौती

आपके प्रोग्राम / फंक्शन का इनपुट एक स्ट्रिंग होगा जो ग्लोबल स्कोप पर प्रॉपर्टी एक्सेस करने की कोशिश करेगा। जब भी यह संपत्ति मिलती है, तो आप एक सत्य मान प्रिंट / वापस करेंगे। यदि संपत्ति नहीं मिली है, तो एक गलत मूल्य मुद्रित / वापस किया जाएगा। पकड़: जब आप किसी गैर-मौजूद वस्तु पर एक संपत्ति तक पहुंचने का प्रयास करते हैं, तो आपके कार्यक्रम को किसी भी तरह की त्रुटि को फेंक देना चाहिए।

चीजों को थोड़ा आसान बनाने के लिए, आप मान सकते हैं कि इनपुट हमेशा रहेगा [a-z.], यह कभी खाली नहीं होगा, इसमें कभी भी दोहराव .नहीं होगा और यह कभी भी शुरू या समाप्त नहीं होगा .। तो codegolf.एक अमान्य इनपुट है।

परीक्षण के मामलों

codegolf.stackexchange.com => 1 // or any other truthy value
codegolf.stackexchange.net => 0 // or any other falsy value
codegolf.stackexchange => 1
codegolf.foo => 0
codegolf => 1
foo => 0
codegolf.com => 0
codegolf.constructor => 0

codegolf.foo.bar => Error (since foo is undefined)
codegolf.stackexchange.com.foo => Error (since com is a value, not an object)
codegolf.stackexchange.com.foo.bar => Error
foo.stackexchange.com => Error
foo.bar => Error
foo.bar.baz => Error

यह , बाइट्स जीत में सबसे छोटा कोड है

¹ अगर (और केवल यदि) अपनी पसंद के भाषा त्रुटियों का समर्थन नहीं करता सब पर , आप उत्पादन कुछ है जो यह स्पष्ट है कि यह एक त्रुटि है बनाता है चाहिए। उदाहरण के लिए, यदि आप सत्य के लिए 1 और झूठी के लिए 0 का उपयोग करते हैं, तो आप त्रुटि के लिए "ई" का उपयोग कर सकते हैं। अपने रिटर्न मूल्यों के अनुरूप बनें और अपनी पोस्ट में व्यवहार की व्याख्या करें।


1
मुझे लगता है foo => Errorकि यह अधिक उपयुक्त होगा।
मैजिक ऑक्टोपस Urn

अनुरोध प्रकारों की जाँच codegolf.comकरने के लिए परीक्षण मामलों को जोड़ने का अनुरोधcodegolf(.stackexchange)?(.com)?$
कोलों

एक और लापता परीक्षण मामला:foo.stackexchange.com
जेमी

@carusocomputing नोप। जावास्क्रिप्ट के बारे में सोचो। fooलौटना होगा undefined, लेकिन यह एक त्रुटि नहीं है। परिभाषित नहीं होने के foo.barकारण त्रुटि होगी foo
mbomb007

1
@carusocomputing True, लेकिन आप इसे "अधिक उपयुक्त" नहीं कह सकते, जब यह दोनों तरीकों से समझ में आता है। codegolf.foo => 0, तो foo => 0
mbomb007

जवाबों:


8

जावास्क्रिप्ट, 135 बाइट्स

v=>(c=(p,i)=>new Proxy({}, {get:(o,q)=>(r=q==p[i]?c(p,i+1):o.$,i==3?r||z:r)}),x=c(["codegolf","stackexchange","com"],0),!!eval("x."+v))

बिल्डिन कीज़ को सुलभ होने से रोकने के लिए पहले प्रयास में इस बिंदु पर, एक अलग दृष्टिकोण का उपयोग करने के लिए बेहतर होने जा रहा है, लेकिन हे!

वैध के लिए सही, गुमशुदा के लिए गलत और त्रुटि पर त्रुटि।


4

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

रिटर्न false/ trueया फेंकता है ReferenceError

s=>s.split`.`.map((w,i)=>e|['codegolf','stackexchange','com'][i]!=w&&e++,e=0)&&e>1?X:!e

संभाव्य संस्करण, 78 बाइट्स (गैर-प्रतिस्पर्धात्मक)

क्योंकि सभी संपत्तियों की मिलान की गारंटी है [a-z], हम इसे आज़मा सकते हैं:

s=>s.split`.`.map((w,i)=>e|[162,6,2][i]-parseInt(w,36)%587&&e++,e=0)&&e>1?X:!e

इस तथ्य के अलावा कि 587एक प्रमुख है और जिन शब्दों में हम रुचि रखते हैं, उनके लिए संक्षिप्त मूल्यों की ओर जाता है, यह एक यादृच्छिक यादृच्छिक विकल्प है।

यद्यपि यह सभी परीक्षण मामलों को पारित करता है, यह निश्चित रूप से गलत-सकारात्मक रिटर्न की संभावना है।


3

बैच, 269 231 बाइट्स

@echo off
set/ps=
set w=1codegolf
for %%a in (%s:.= %)do call:l %%w
echo %w:~0,1%
exit/b
:g
if
:l
if %w:~-1%==. goto g
if not %1==%w% set w=0.&exit/b
set w=1com
if %1==com set w=1.
if %1==codegolf set w=1stackexchange

एसटीडीआईएन पर इनपुट लेता है; अमान्य संपत्ति के लिए एक सिंटैक्स त्रुटि फेंकता है। wराज्य मशीन के रूप में उपयोग करके काम करता है । यदि इसके wसाथ समाप्त होता है, तो .इसका मतलब है कि अगली संपत्ति का उपयोग अमान्य है। संपादित करें: बैच स्क्रिप्ट को निरस्त करने के लिए वाक्यविन्यास त्रुटि का उपयोग करके 17 बाइट्स सहेजे गए। 21 बाइट्स को यह समझकर सहेज लिया कि मेरा एक काम बिना शर्त हो सकता है।


2

जावास्क्रिप्ट, 84 82 बाइट्स

जीतने के लिए कम नहीं है, लेकिन जब से मैं एक शुरुआत कर रहा हूं मुझे लगा कि इसे साझा करना मजेदार होगा। हो सकता है कि सुधार के लिए किसी का सुझाव हो।

s=>s.split`.`.length>3&&e||!!eval('codegolf={stackexchange:{com:true}};window.'+s)

यह प्रश्न में सभी परीक्षणों को पारित करता है true, falseगैर-मौजूद के लिए मौजूदा मूल्य के लिए रिटर्न देता है , और यदि आप एक गैर-मौजूद या गैर-वस्तु चर की संपत्ति प्राप्त करने का प्रयास करते हैं तो यह एक त्रुटि फेंकता है। हालाँकि मुझे अब एहसास है कि इस समाधान में कुछ मुद्दे भी हैं। जैसा कि टिप्पणियों में @Florent द्वारा बताया गया है, यह सच है जब स्ट्रिंग प्रोटोटाइप गुण जैसे .toStringकहा जाता है।

संपादित करें : @MamaFunRoll को 2 बाइट्स धन्यवाद

टेस्ट स्निपेट:

var f =
s=>s.split`.`.length>3&&e||!!eval('codegolf={stackexchange:{com:true}};window.'+s)

console.log(f('codegolf.stackexchange.com')) //true
console.log(f('codegolf.stackexchange.net')) //false
console.log(f('codegolf.stackexchange')) //true
console.log(f('codegolf.foo')) //false
console.log(f('codegolf')) //true
console.log(f('foo')) //false
console.log(f('codegolf.com')) //false

console.log(f('codegolf.foo.bar')) // TypeError
console.log(f('codegolf.stackexchange.com.foo')) //ReferenceError
console.log(f('codegolf.stackexchange.com.foo.bar')) //ReferenceError
console.log(f('foo.stackexchange.com')) // TypeError
console.log(f('foo.bar')) // TypeError
console.log(f('foo.bar.baz')) // TypeError


{ "Message":, "फ़ाइल नाम" "गुण अपरिभाषित या नल संदर्भ के 'बार' प्राप्त करने में असमर्थ": " stacksnippets.net/js ", "lineno": 1, "colno": 37}
RosLuP

@RosLuP मुझे यकीन नहीं है कि आप इस टिप्पणी से क्या मतलब है। समारोह के लिए एक त्रुटि फेंकने वाला हैcodegolf.foo.bar
tjespe

सब ठीक है आप सभी के लिए ... लेकिन मेरे लिए "फेंक" त्रुटि एक त्रुटि है
RosLuP

1
.split('.')-> split`.`स्वागत है!
मामा फन रोल

1
काम नहीं करता। f("codegolf.toString") लौट जाना चाहिए falsef("codegolf.toString.toString")फेंक देना चाहिए।
फ्लोरेंट

1

जावास्क्रिप्ट, 173 बाइट्स

function d(a){var b="codegolf",u="stackexchange",c=a.split("."),e="e";return c.length==1?c[0]==b:c.length==2?c[0]==b?c[1]==u:e:c.length==3?c[0]==b?c[1]==u?c[2]=="com":e:e:e}

IE 10 के साथ काम करता है, इसलिए प्रमुख आधुनिक ब्राउज़रों पर काम करना चाहिए।

इसे यहाँ आज़माएँ (+ अपुष्ट)


2
और अधिक गोल्फ हो सकता है: d=(a,b="codegolf",u="stackexchange",c=a.split`.`,e="e")=>c[l="length"]==1?c[0]==b:c[l]==2?c[0]==b?c[1]==u:e:c[l]==3?c[0]==b?c[1]==u?c[2]=="com":e:e:e(149 बाइट्स)
फ्लोरेंट

@ मुझे लगता है कि वह इसे IE10 आदि पर काम करने की अनुमति देने की कोशिश कर रहा है, इसलिए कोई तीर कार्य या डिफ़ॉल्ट पैरामीटर नहीं है।
कॉनर ओ'ब्रायन

एक महान जवाब के लिए +1 e="e", IE के लिए +1 , लेकिन IE 10. के लिए -1
NoOneIsHere 18

1

सी #, 155 बाइट्स

कम से कम नहीं जा रहा था, लेकिन सोचा था कि यह मजेदार होगा इसे सी # में जाना ...

bool f(string s){var a=s.Split('.');int e=0,l=a.Length-1,i=l;for(;0<=i;i--){e+=a[i]!=new[]{"codegolf","stackexchange","com"}[i]?i<l?s[-1]:1:0;}return e<1;}
  • स्ट्रिंग को विभाजित करता है और परिणाम के माध्यम से पुनरावृत्त करता है।
  • एक गैर मिलान तत्व 1 से अधिक पुनरावृति गहरी, त्रुटियां ( IndexOutOfRangeExceptionस्ट्रिंग में -1 स्थिति पर एक चार का उपयोग करके फेंकना )।
  • अन्यथा, यदि कोई तत्व मेल नहीं खाता है, तो गलत रिटर्न देता है।

.NET फेल्ड


1

रूबी, 84 80 बाइट्स

बेनामी समारोह जो रिटर्न trueया falseबढ़ाने त्रुटि के लिए, या शून्य से विभाजित किया जाता है:

->s{k=1;s.split(?.).zip(%w[codegolf stackexchange com]){|i,o|1/0if !k;k=i==o};k} 

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


1

सी, 98 112 113 बाइट्स

f(char*a){char*c="codegolf.stackexchage.com";while(*c&&*c==*a)++a,++c;return strchr(a,46)?*(a=0):!(*a|*c&*c-46);}

ungolfed

f(char*a){char*c="codegolf.stackexchage.com";
          while(*c&&*c==*a)++a,++c;
          return strchr(a,46)?*(a=0):!(*a|*c&*c-46);
         }

f(codegolf.stackexchage.com)=1
f(codegolf.stackexchage.net)=0
f(codegolf.stackexchage)=1
f(codegolf.foo)=0
f(codegolf)=1
f(foo)=0

नीचे के लिए यह गलती सीग करने के लिए है

f(codegolf.stackexchage.com.foo)
f(foo.bar)
f(foo.bar.baz)
f(codegolf.foo.bar)
f(foo.v)

त्रुटि के बारे में क्या है? उदाहरण के लिए f(codegolf.stackexchage.com.foo), नहीं लौटना चाहिए 0
जोनाथन एलन

मुझे पूरी तरह से समझ में नहीं आता है कि मेरी सी भाषा प्रविष्टि कि C #, Java, जावास्क्रिप्ट, अजगर, बाथ, जावास्क्रिप्ट से कम वर्ण क्यों हैं, सभी की तुलना में कम अंक (-1) है
RosLuP

हो सकता है इससे पहले कि आप codegolf.stackexchange.com.foo त्रुटि को ठीक कर लें, या उन्हें यह एहसास न हो कि आपने इसे ठीक कर दिया है। # C, <strike>98</strike> 112 bytes #यह स्पष्ट करने के लिए कि आपने इसे संशोधित किया है , हेडर को संपादित करें ।
रे

3सी में कोई त्रुटि नहीं है, यह वह है जिसे "सत्य" मान माना जाता है। देखें इस मेटा पोस्ट , और इस कोड
जोनाथन एलन

मैं एरर प्रोग्राम रिटर्न के मामले में अपवादों का उपयोग नहीं करता। 3. -1 होना चाहिए, लेकिन 3 में 1 कैरेक्टर बचाना है
RosLuP

0

जावा, 187 138 बाइट्स

संस्करण 2.0 ( 138 बाइट्स): Idea बेशर्मी से @Jamie से चुराए गए।

l->{for(String []a=l.split,int l=i=a.length-1,e=0;i>=0;e+=a[i]!=new String[]{"codegolf","stackexchange","com"}[i]?i<l?s[-1]:1:0)return e;}

संस्करण 1.0 ( 187 बाइट्स):

l->{String[]a=l.split(".");return a[0].equals("codegolf")?(a.length<2?1:(a[1].equals("stackexchange")?(a.length<3?1:(a[2].equals("com")?1:0)):(a.length<3?0:a[-1]))):(a.length<2?0:a[-1]);}

वापसी भाग की व्याख्या:

return a[0].equals("codegolf")?(a.length<2?1:(a[1].equals("stackexchange")?(a.length<3?1:(a[2].equals("com")?1:0)):(a.length<3?0:a[-1]))):(a.length<2?0:a[-1]);
return                                                                                                                                                        ;
       a[0].equals("codegolf")?                                                                                                          :
                               (a.length<2? :                                                                                           ) (a.length<2? :     )
                                           1 (a[1].equals("stackexchange")?                                       :                    )              0 a[-1]
                                                                           (a.length<3? :                        ) (a.length<3? :     )
                                                                                       1 (a[2].equals("com")? : )              0 a[-1]
                                                                                                             1 0
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.