मुझे कुछ सवालों के जवाब देने के लिए!


15

परिचय

कभी-कभी मैं ऊब जाता हूं और पीपीसीजी पर कोई नया सवाल नहीं है, इसलिए मैं चाहता हूं कि आप पीपीसीजी के अतीत से एक यादृच्छिक सवाल खोदें।

चुनौती

इनपुट के रूप में एक उपयोगकर्ता की पीपीसीजी आईडी (उदाहरण के लिए मेरी आईडी 30525 है ) को देखते हुए , यादृच्छिक रूप से चुने गए पीपीसीजी प्रश्न के यूआरएल को आउटपुट करें। यदि प्रश्न निम्नलिखित मानदंडों को पूरा नहीं करता है, तो आपको एक और प्रश्न चुनना होगा जब तक कि यह मानदंडों को पूरा नहीं करता है:

  • प्रश्न पूछने वाला वह उपयोगकर्ता नहीं होना चाहिए जिसकी आईडी प्रश्न के लिए इनपुट की गई थी
  • इस प्रश्न का उत्तर उस उपयोगकर्ता को पहले से ही नहीं दिया गया होगा, जिसकी आईडी प्रश्न में इनपुट थी
  • सवाल अनुत्तरित नहीं होना चाहिए: यह शायद बहुत कठिन है
  • प्रश्न के 10 से अधिक उत्तर नहीं होने चाहिए: यह शायद बहुत आसान है
  • प्रश्न को टैग किया जाना चाहिए

नियम

URL शॉर्टर्स अस्वीकृत हैं।

आप स्टैक एक्सचेंज एपीआई और स्टैक एक्सचेंज डेटा एक्सप्लोरर का उपयोग कर सकते हैं।

आपको केवल एक वास्तविक पीपीसीजी उपयोगकर्ता की आईडी दी जाएगी।

अप्रत्याशित घटना में कि कोई उपयुक्त प्रश्न नहीं हैं, आपको कुछ भी आउटपुट करने की आवश्यकता नहीं है (अपरिभाषित व्यवहार ठीक है)।

साइड चैलेंज

यद्यपि आपको अतिरिक्त बिंदुओं से सम्मानित नहीं किया जाएगा, अगर किसी ने प्रयोग करने योग्य बुकमार्क को डिज़ाइन किया है, तो इसकी सराहना की जाएगी , जो कि चलाते समय, ब्राउज़र विंडो को एक यादृच्छिक PPCG प्रश्न में खोलता है जो उपरोक्त मानदंडों का पालन करता है। उपयोगकर्ता आईडी को प्रोग्राम ( केवल बुकमार्कलेट के लिए ) में हार्डकोड किया जाना चाहिए ।

चुनौती

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

जवाबों:


4

पॉवरशेल, 261 बाइट्स

param($i)$q=irm (($u="api.stackexchange.com/questions/")+($s="?tagged=code-golf&site=codegolf"))
do{$t=$q.items|?{$c=$_|% an*;$_.owner.user_id-ne$i-and$c-gt0-and$c-lt10}|random}while((irm($u+$t.question_id+'/answers'+$s)).items.owner.user_id-contains$i)
$t.link

स्पष्टीकरण:

param($i)
$q=irm (($u="api.stackexchange.com/questions/")+($s="?tagged=code-golf&site=codegolf")) #run this query
do{ #until we find a valid question, get a random one that fits the basic specs
    $t=$q.items|?{$c=$_|% an*;$_.owner.user_id-ne$i-and$c-gt0-and$c-lt10}|random
}while( #Get all of the answers, and their owners into an array, check it doens't contain the provided id
(irm($u+$t.question_id+'/answers'+$s)).items.owner.user_id-contains$i
)
$t.link #output the question link

एक संस्करण के लिए 4 बाइट्स जोड़ें जो इसे वेबब्रोसर में खोलता है

param($i)$q=irm (($u="api.stackexchange.com/questions/")+($s="?tagged=code-golf&site=codegolf"))
do{$t=$q.items|?{$c=$_|% an*;$_.owner.user_id-ne$i-and$c-gt0-and$c-lt10}|random}while((irm($u+$t.question_id+'/answers'+$s)).items.owner.user_id-contains$i)
saps $t.link

5

जावास्क्रिप्ट (ईएस 6), 333 329 327 323 283 बाइट्स

api.stackexchange.comडोमेन ( प्रासंगिक मेटा ) के भीतर से चलाने की आवश्यकता है । PromiseURL ( प्रासंगिक मेटा ) युक्त देता है ।

f=async i=>await(u="/questions/",s="?tagged=code-golf&site=codegolf",q=await(await(await fetch(u+s)).json()).items.filter(x=>x.owner.user_id!=i&x.answer_count<11).sort(_=>.5-Math.random())[0],await(await fetch(u+q.question_id+s)).json()).items.some(x=>x.owner.user_id==i)?f(i):q.link

कोशिश करो

f=async i=>await(u="//api.stackexchange.com/questions/",s="?tagged=code-golf&site=codegolf",q=await(await(await fetch(u+s)).json()).items.filter(x=>x.owner.user_id!=i&x.answer_count<11).sort(_=>.5-Math.random())[0],await(await fetch(u+q.question_id+s)).json()).items.some(x=>x.owner.user_id==i)?f(i):q.link
k.previousSibling.value=58974 // me
k.onclick=_=>f(+k.previousSibling.value).then(p=>k.nextSibling.innerText=p)
<input type=number><button id=k>Fetch</button><pre>


बुकमार्कलेट

और यहां यह एक अनुकूलन बुकमार्क के रूप में है, जो आपके द्वारा उत्तर देने के लिए एक यादृच्छिक प्रश्न को लोड करेगा। इसका उपयोग करने के लिए, बस अपने ब्राउज़र के टूलबार में एक नया बुकमार्क जोड़ें और URL फ़ील्ड में पूर्ण कोड छोड़ें।

उपरोक्त समाधान के विपरीत, यह किसी साइट पर सभी प्रश्नों के साथ काम करता है इसलिए इसे चलाना धीमा हो सकता है (साइट और टैग के आधार पर) और यह एपीआई के लिए आवश्यक प्रश्नों की संख्या में महंगा भी हो सकता है, जैसा कि एपीआई कर सकता है। केवल एक बार में 100 प्रश्न वापस करें।

अनुकूलित करने के लिए, निम्नलिखित चर बदलें

  • k: आपकी एपीआई कुंजी - आप यहां एक के लिए पंजीकरण कर सकते हैं
  • s: स्टैक एक्सचेंज साइट जिसके लिए आप एक प्रश्न लेना चाहते हैं।
  • i: उस साइट पर आपका यूजर आईडी।
  • t: वे टैग जिन्हें आप फ़िल्टर करना चाहते हैं। इसके लिए 4 विकल्प उपलब्ध हैं:
    1. "": एक खाली स्ट्रिंग; यदि आप किसी टैग द्वारा फ़िल्टर नहीं करना चाहते हैं,
    2. "code-golf;string": उन टैगों की एक अर्ध-उपनिवेशित अलग-अलग सूची जिन्हें आप फ़िल्टर करना चाहते हैं,
    3. prompt("Tags:"): आपको उन टैग्स को दर्ज करने के लिए प्रेरित किया जाएगा जिन्हें आप फ़िल्टर करना चाहते हैं, या
    4. prompt("Tags:","code-golf;string"): आपको उन टैग्स को दर्ज करने के लिए प्रेरित किया जाएगा जिन्हें आप फ़िल्टर करना चाहते हैं, एक डिफ़ॉल्ट सूची प्रदान की गई है।
javascript:(f=(

/* See /codegolf//a/122400/58974 for documenation */
k="",
s="codegolf",
i=58974,
t="code-golf",

p=1,q=[],r=1)=>fetch((u="//api.stackexchange.com/questions/")+(d=`?key=${k}&tagged=${t}&site=`+s)+`&page=${p}&pagesize=100`).then(r=>r.json()).then(j=>r&&(q=[...q,...j.items.filter(x=>x.owner.user_id!=i&(a=x.answer_count)&a<11)])^j.has_more?f(i,k,s,t,p+1,q,1):q.sort(_=>.5-Math.random())[0]).then(y=>fetch(u+y.question_id+"/answers"+d).then(r=>r.json()).then(j=>j.items.some(x=>x.owner.user_id==i)?f(i,k,s,t,q,0):window.location=y.link)))()

1
इस पर मेरे शक्तिकृत उत्तर के आधार पर, एपी के लिए तार का अच्छा पुन: उपयोग।
colsw

आप किस बिंदु पर स्थायी रूप से प्रतिबंधित हो जाते हैं? ;)
बीटा

@ BetaDecay, अगर एपीआई चुनौतियां फिर से गति पकड़ती हैं, तो मुझे जल्द ही पता चल सकता है! : डी
झबरा

आप अपनी दरों की सीमा बढ़ाने के लिए एपीके टोकन का उपयोग यहां से कर सकते हैं: stackapps.com/q/7384/45852
प्रोग्रामर

1
@ BetaDecay, मैंने इसे एक प्रयोग करने योग्य स्क्रिप्ट में विस्तारित करने का इरादा किया था, लेकिन समय से बाहर भाग गया; मैं कल इसे वापस आने की कोशिश करूंगा।
झबरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.