मेरी पीपीसीजी आईडी क्या है?


16

चुनौती

PPCG सदस्य के नाम को देखते हुए, उनके PPCG ID नंबर का उत्पादन करें। यदि उपयोगकर्ता मौजूद नहीं है, तो आप एक त्रुटि की रिपोर्ट कर सकते हैं या किसी भी गैर-सकारात्मक संख्या को वापस कर सकते हैं। यदि इस नाम के कई सदस्य हैं, तो आप केवल एक आईडी या उन सभी को आउटपुट करना चुन सकते हैं।

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

"संगीतज्ञ 523" -> 69054
"डेनिस" -> 12012
"xnor" -> 20260
"लीक नून" -> 48934
"f "n5tɪk" -> 64505
"जोर्ग हल्सरमैन" -> 59107
"समुदाय" -> -1
"कोई भी उपयोगकर्ता जो मौजूद नहीं है" -> 0
"एलेक्स" -> 69198 (यह एक संभावित परिणाम है)
"लीक एन" -> ०
"जॉर्ज" -> 3716

1
अनुशंसित परीक्षण मामला: "लीक एन"। लौट जाना 0.
Okx

5
क्या हमारा प्रोग्राम अपरिहार्य उपयोगकर्ताओं के लिए अपरिभाषित व्यवहार का परिणाम हो सकता है (मेरा प्रिंट 48934, उदाहरण के लिए गैर-मौजूदा उपयोगकर्ता के लिए)? मुझे लगता है कि यह अनुमति दी जानी चाहिए, क्योंकि त्रुटियाँ हैं।
बजे मिस्टर एक्सकोडर

4
@ ओकेएक्स नहीं, मैं नहीं। मैं ओपी से पूछ रहा हूं कि क्या इस व्यवहार की अनुमति है। यदि ऐसा नहीं है, तो मैं अपना उत्तर हटा दूंगा या ठीक कर दूंगा।
बजे मिस्टर एक्सकोडर

3
@ ऑलिवरानी विषाक्त? कैसे?
ओकेक्स

5
@ ओक्स वह ओपी के लिए एक वैध सवाल पूछ रहा है और आप उसे तुरंत शूट कर रहे हैं। ओपी जवाब दें।
ओलिवर नी

जवाबों:


30

स्टैक एक्सचेंज डेटा एक्सप्लोरर , 56 54 53 51 46 बाइट्स

हाइपर न्यूट्रिनो के लिए -1 बाइट धन्यवाद। -5 बाइट्स जियाको गारबेलो के लिए धन्यवाद।

SELECT ID FROM USERS WHERE##S##=DISPLAYNAME--S

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

यकीन नहीं होता कि यह पूरी तरह से वैध है लेकिन ... सिंगल कोट्स में इनपुट घिरा होना चाहिए '

इसके अलावा, मैं अभी भी क्यों चिल्लाओ करने के लिए की तरह एसक्यूएल प्रोग्रामर नहीं मिलता है, लेकिन यह जाहिरा तौर पर इतना अच्छा अभ्यास है ... SELECTसब कुछ FROMसब कुछ WHEREसब कुछ LIKEसब कुछ!

व्याख्या

मुझे समझाने दो।

SELECT ID FROM USERS WHERE##S##=DISPLAYNAME--S

                                           --S  -- DECLARE AN INPUT PARAMETER NAMED S
SELECT                                          -- FIND...
       ID                                       -- ID OF THE USERS...
          FROM USERS                            -- IN THE TABLE USERS...
                     WHERE                      -- THAT SATISFIES THE CONDITION...
                          ##S##=DISPLAYNAME     -- S EQUALS THE USERS' DISPLAY NAME

13
-2 बाइक्स को याद करते हुए कुछ बातें याद रखें
HyperNeutrino

1
NATJA'D अपने NINJA को CHAT XD
HyperNeutrino

1
1 बाइट समानता ऑपरेटर के आसपास ऑपरेंड के आदेश को उलट कर
हाइपरयूट्रीनो

10
SQL प्रोग्रामर के संदर्भ के लिए +1 चिल्लाना पसंद करता है (और आपके उत्तर के लिए भाषा का एक अच्छा विकल्प :)
NH।

4
आपने इस प्रश्न में शीर्ष 1 क्यों रखा है? ओपी ने कहा "अगर इस नाम के कई सदस्य हैं, तो आप केवल एक आईडी या उन सभी को आउटपुट करने के लिए चुन सकते हैं" ...
जियाको गारबेलो

5

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

i=>fetch("//api.stackexchange.com/users?site=codegolf&inname="+i).then(r=>r.json()).then(r=>r.items.find(u=>u.display_name==i).user_id)

f=i=>fetch("//api.stackexchange.com/users?site=codegolf&inname="+i).then(r=>r.json()).then(r=>r.items.find(u=>u.display_name==i).user_id)
<input onchange="f(this.value).then(console.log)"><br>Fill input and press Enter


1
क्या इसमें विशेष पात्रों का समर्थन है Jörg Hülsermann?
अरनुलद

4
यह लौटे 0लिए Oliver:(
ओलिवर

के r=>r.items[0]).then(rसाथ प्रतिस्थापित करके 7 बाइट्स सहेजें ({items:[r]})विनाशकारी असाइनमेंट ftw!
kamoroso94

आप उपयोग कर सकते हैं: के i=>fetch('//api.stackexchange.com/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)रूप में यह एक वादा त्रुटि वापस कर देंगे अगर यह विफल रहा। आप बस यह भी कर सकते हैं i=>fetch('/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)और कह सकते हैं कि इसे
एपि

2
@ ओलिवर एक और जैतून क्या है ???? वहाँ केवल एक ही नहीं हो सकता
ओलिवर नी

5

पायथन 3 + अनुरोध , 196 बाइट्स

धन्यवाद -ondercricket -6 बाइट्स के लिए!

from requests import*
x=lambda s:all([print(a['user_id'])if s==a['display_name']else''for a in get('http://api.stackexchange.com/users?inname=%s&site=codegolf'%utils.quote(s)).json()['items']])and d

स्टैक एक्सचेंज एपीआई का उपयोग करता है। फिक्स्ड Leaky Nऔर Jorgeत्रुटियों।

यदि समान नाम वाले कई उपयोगकर्ता हैं, तो यह उन सभी को प्रिंट करता है, जिनकी अनुमति है।


यह मुझे डेटा देता है ..
ओलिवर नी

इनपुट पर विफलLeaky N
ओकेएक्स

@ ऑक्स फिक्स्ड। ---
ओलिवर नी

चूंकि आप "एक त्रुटि की रिपोर्ट कर सकते हैं या 0 वापस कर सकते हैं" यदि उपयोगकर्ता मौजूद नहीं है, तो अंतिम पंक्ति बस नहीं हो सकती है print a['user_id'], जो कि कीपर को फेंक देगा?
डैनियल

1
"जॉर्ज" के लिए विफल रहता है
फेलिप नारदी बतिस्ता

5

पायथन 2 + अनुरोध , 187 बाइट्स

from requests import*
def f(x):t=get("http://api.stackexchange.com/users?inname="+utils.quote(x)+"&site=codegolf").json()["items"];print[k['user_id']for k in t if k['display_name']==x][0]

यदि कोई एकल उपयोगकर्ता मौजूद है, तो उपयोगकर्ता ID लौटाता है, पहला उपयोगकर्ता जो अधिक मौजूद होने पर आवश्यकताओं से मेल खाता है, और अन्यथा किसी त्रुटि की रिपोर्ट करता है।


आप /2.2API-url से हटा सकते हैं ।
केविन क्रूज़सेन

@ केविनक्रूजसेन बहुत बहुत धन्यवाद
मिस्टर एक्सकोडर

संकेत : इसे साथ चलाने की कोशिश न करें fəˈnɛtɪk, \u{...}इसके बजाय उपयोग करें , क्योंकि अजगर गैर-एएससीआईआई को बर्दाश्त नहीं करता है
श्री एक्सकोडर

अजगर 2, वैसे भी।
पूरी तरह से अमानवीय

3
"जॉर्ज" के लिए विफल रहता है
फेलिप नारदी बतिस्ता

3

पायथन 2 + अनुरोध , 173 बाइट्स

lambda s:[i['user_id']for i in get('http://api.stackexchange.com/users?inname=%s&site=codegolf'%utils.quote(s)).json()['items']if i['display_name']==s]
from requests import*

नमूना चला

>>> f=\
... lambda s:[i['user_id']for i in get('http://api.stackexchange.com/users?inname=%s&site=codegolf'%utils.quote(s)).json()['items']if i['display_name']==s]
>>> from requests import*
>>>
>>> tests = ['musicman523', 'Dennis', 'xnor', 'Leaky Nun', 'Community', 'Any user that does not exist', 'Alex', 'Leaky N', 'Jorge']
>>> for i in tests: print '%-30r -> %s'%(i, f(i))
... 
'musicman523'                  -> [69054]
'Dennis'                       -> [12012, 13891, 14912, 24937]
'xnor'                         -> [20260]
'Leaky Nun'                    -> [48934]
'Community'                    -> [-1]
'Any user that does not exist' -> []
'Alex'                         -> [21536, 69198, 11192]
'Leaky N'                      -> []
'Jorge'                        -> [3716]

मजेदार तथ्य: परिणाम प्रतिष्ठा द्वारा क्रमबद्ध है, सबसे पहले।


इनपुट पर विफलLeaky N
ओकेएक्स

के साथ अच्छी चाल %s
श्री Xcoder

@ ओएक्स मेरे लिए नहीं, यह नहीं है। >>> f('Leaky N')\n48934
totallyhuman

@totallyhuman इसे लौटना चाहिए 0Leaky Nमौजूद नहीं है
ओकेएक्स

@ ऑक्स फिक्स्ड। - -
बिलकुल अमानवीय '’

3

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

-9 बाइट्स रोजम के लिए धन्यवाद ।

n=>fetch("198.252.206.16/users?site=codegolf&inname="+n).then(r=>r.text()).then(t=>t.match(`\\/([^\\/]*)\\/`+n+`"`)[1])

1
सोचें कि आप IPv4 पते के साथ कुछ बाइट्स बचाएंगे। (198.252.206.16 की बजाय api.stackexchange.com के साथ)

-1

जावास्क्रिप्ट (ES6) + HTML, 154 152 151 202 179 161 145 बाइट्स

विशेष पात्रों को संभालने के लिए कुछ बाइट्स का त्याग किया।

api.stackexchange.comडोमेन के तहत चलाने की आवश्यकता है । यदि कोई उपयोगकर्ता नाम नहीं मिल रहा है, तो एक वादे के साथ ID वाला आईडी लौटाता है या वादे में कोई त्रुटि निकालता है।

s=>fetch(`/users?site=codegolf&inname=`+s).then(r=>r.json()).then(j=>j.items.find(i=>(o.innerHTML=i.display_name,o.innerText==s)).user_id)

<a id=o

नोट: यह समाधान यूरिल और इसकी टिप्पणियों से स्वतंत्र रूप से विकसित किया गया था; अगर उरीएल ने findविधि का उपयोग करने का फैसला किया , तो मुझे अपने लंबे, पुनरावर्ती संस्करण में वापस आने की खुशी है।


2
मैंने एक निश्चित निष्पादन डोमेन की आवश्यकता पर एक मेटा चर्चा बनाई है , क्योंकि इससे कुछ बाइट्स बचते हैं।
बिरजोलक्सेव

1
@Downvoter, कृपया टिप्पणी छोड़ने की शालीनता रखें।
झबरा

@ शिग्गी मैं उसी कारण से मानूंगा क्योंकि मेटा चर्चा शुरू की गई थी।

डाउनवॉटर, यदि आप एक स्थापित सर्वसम्मति से असहमत हैं (जैसा कि @Rogem से पता चलता है), कृपया उस आम सहमति का पालन करने वाले समाधानों के बजाय प्रासंगिक मेटा पोस्ट को डाउनवोट करें।
झबरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.