आदर्श प्रश्न


16

आदर्श प्रश्न क्या है? शायद यह केवल एक गहन विचार और एक सपने, एक आशा, एक विचार, (… 5,024.2 वर्णों को छोड़ दिया ) के आरंभ का अमूर्त है । इसलिए, मैं प्रस्ताव करता हूं कि हमें प्रश्नों को निर्धारित करने के लिए ऐसा कारक मिल जाए। मैं यह भी प्रस्ताव करता हूं कि इस कारक को क्यू एफ कहा जाए , या Q- कारक कहा जाए। मैं एक प्रश्न का Q- कारक इस प्रकार निर्धारित करता हूं:

(याद करें कि ।)

उद्देश्य इनपुट के रूप में एक संख्या को देखते हुए , पीपीसीजीएसई पर संबंधित प्रश्न के क्यू-कारक का निर्धारण करें। यदि प्रश्न मौजूद नहीं है, तो बस आउटपुट ;-;(रोने का भाव)।

उदाहरण के लिए, । ( यह सवाल ):

इस मामले में, शुद्ध वोट का मतलब है

views     = 23435
net votes = 33
edits     = 6
answers   = 30, answers^2 = 900
comments  = 19
charsIOPN = "Joe Z.".length = 6

इसलिए:

r_F = 6 / 6 = 1
Q_F = r_F * (23435 * 33 + 6) / (900 - 19)
    =  1  *      773361      /    881
    ~ 877.821793

कृपया Q पर कम से कम 2 महत्वपूर्ण आंकड़े प्रदान करें F

यह एक , इसलिए बाइट्स में सबसे छोटा कार्यक्रम जीत जाता है।


नोट: कृपया अपने कार्यक्रम के तीन उदाहरणों को शामिल करें, जिनमें से एक यह प्रश्न होना चाहिए। अन्य दो आपको तय करना है। (यह सिर्फ एक पुष्टिकरण जांच है।) उस समय की भी रिपोर्ट करें जिस पर आपने क्वेरी दर्ज की थी।


1
@AlexA। कुछ भी चलेगा। और मेरे प्रतिनिधि को देखो! : D यह एक प्रतिनिधि अंक है! (यह 888 है, अगर कोई अपवित्र है।)
कॉनर ओ'ब्रायन

3
यह ध्यान रखना दिलचस्प हो सकता है कि SE API किसी पोस्ट पर संपादन की संख्या को उजागर नहीं करता है।
एलेक्स ए।

2
एलेक्स संपादन के बारे में एक अच्छी बात करता है। इसके लिए एडिट की संख्या प्राप्त करने के लिए बस उतने ही कोड की आवश्यकता हो सकती है जितनी कि इसके लिए एपीआई का उपयोग करने के लिए कोई त्वरित तरीका नहीं है। इसके अलावा, क्या यूआरएल शॉर्टर्स का उपयोग किया जा सकता है?
केल्विन के शौक

1
@DJMcMayhem टिप्पणियाँ इसे और अधिक मूल्यवान प्रश्न बनाती हैं- ये हर को छोटा बनाते हैं।
डेनियल एम।

5
हालांकि मुझे नहीं पता है कि सवाल क्या है, मुझे पूरा यकीन है कि उत्तर 42 है।
स्थिति

जवाबों:


11

जूलिया, 411 382 367 355 353 बाइट्स

यह काफी लंबा है लेकिन मुझे बहुत खुशी है कि यह काम करता है!

using Requests
n->(R(t)=readall(get(t));G(t)=JSON.parse(R("http://api.stackexchange.com/2.2/questions/$t?site=codegolf"))["items"];j=G(n)[1];d=parse(Int,match(r"<span \S+n (\d+)",R("http://codegolf.xyz/posts/$n/revisions")).captures[1]);d/length(j["owner"]["display_name"])*(j["view_count"]*j["score"]+d)/(j["answer_count"]^2-length(G("$n/comments"))))

यह एक अनाम फ़ंक्शन बनाता है जो एक पूर्णांक को इनपुट के रूप में लेता है और एक फ्लोट लौटाता है।

इसके लिए Requestsपैकेज की आवश्यकता होती है , जिसका उपयोग करके इंस्टॉल किया जा सकता है Pkg.add("Requests")। वह पैकेज Base.get()HTTP अनुरोध सबमिट करने के लिए तरीके प्रदान करता है । यह आयात भी करता हैJSON पैकेज को है (जिस पर यह निर्भर करता है, ताकि अलग से स्थापित करने की आवश्यकता न हो) जो हम प्रतिक्रिया में JSON आउटपुट को पार्स करने के लिए उपयोग करते हैं।

Ungolfed:

using Requests

function f(n::Int)
    # Define a function to submit an HTTP request and read
    # the response, returning a string
    R(t) = readall(get(t))

    # Define a function that submits a request, reads all text
    # as JSON, parses it, and extracts the items field
    G(t) = begin
        api = "http://api.stackexchange.com/questions"
        JSON.parse(R("$api/$t?site=codegolf"))["items"]
    end

    # Get the data for the question using the API
    j = G(n)[1]

    # Scrape the number of edits from the revision history HTML
    # using minxomat's handy shortened PPCG URL
    h = R("http://codegolf.xyz/posts/$n/revisions")
    d = parse(Int, match(r"<span \S+n (\d+)", h).captures[1])

    # Compute the coefficient r_F
    r = d / length(j["owner"]["display_name"])

    # Compute the Q-factor
    Q = r * (j["view_count"] * j["score"] + d) /
        (j["answer_count"]^2 - length(G("$n/comments")))

    return Q
end

गोल्फ की मदद के लिए डेनिस और मार्टिन ब्यूटनर को धन्यवाद!


अच्छा! किसी भी जगह मैं यह परीक्षण कर सकता हूं?
कॉनर ओ'ब्रायन

@ C @O'Bʀɪᴇɴ सर्वोत्तम परिणामों के लिए मैं आपकी मशीन पर जूलिया 0.4.0 (वर्तमान में नवीनतम रिलीज) स्थापित करने और इसे स्थानीय स्तर पर चलाने की सलाह देता हूं। आप लैम्ब्डा को एक नाम दे सकते हैं जैसे कि REPL पर f=n->...सबमिट करें f(16327)या println(f(16327))यदि आप इसे किसी .jlफ़ाइल से चला रहे हैं । यह जूलियाबॉक्स पर काम करता है (एक Google खाते की आवश्यकता है) जूलिया 0.4.0-rc2 के साथ, लेकिन Requestsमॉड्यूल को पूर्व -स्थापित करने पर चेतावनी देता है ।
एलेक्स ए।

3

गणितज्ञ 10, 381 बाइट्स

f=(a=StringTemplate["http://api.stackexchange.com/``````?site=codegolf"];j=Import[a["questions/",#,""],"JSON"];c=Import[a["questions/",#,"/comments"],"JSON"];r=Import[a["posts/",#,"/revisions"],"JSON"];N[#5/#6*(#1*#2+#5)/(#3^2-#4)]&@@j[[3,2,1,{5,2,12},2]]~Join~{Length@c[[3,2]],Length@DeleteCases[r[[3,2]],_?(("revision_type"/.#)=="vote_based"&)],StringLength@j[[3,2,1,3,2,6,2]]})&

बस तीन एपीआई प्रश्नों और वास्तव में बहुत सारे अनुक्रमण हैं। सबसे कठिन हिस्सा यह समझने की कोशिश कर रहा था editsकि उपलब्ध से कैसे प्राप्त किया जाए revisions, उम्मीद है कि मुझे यह सही लगा।


1
यह मेरे लिए Mathematica 9 में काम नहीं करता है। यह कहता है कि StringTemplateतर्क अमान्य है, त्रुटियों का एक गुच्छा प्रिंट करता है, और परिणाम वापस नहीं करता है।
एलेक्स ए।

क्षमा करें, मैं संस्करण संख्या को शीर्षक में रखना भूल गया। फिक्स्ड!

तो यह Mathematica 10 की अनूठी विशेषताओं पर निर्भर करता है?
एलेक्स ए।

आपके पास StringTemplate10 से पहले नहीं है , जहां तक ​​मुझे पता है। आप उस हिस्से को बदल सकते हैं a=Function["http://api.stackexchange.com/"<>#1<>ToString[#2]<>#3<>"?site=codegolf"];और देख सकते हैं कि यह काम करता है या नहीं।

2

पायथन 2, 392 बाइट्स

खैर, मैंने इसे एक शॉट दिया।

from requests import*;from re import*;l=len
def i(n):
 try:s,r="http://api.stackexchange.com/2.2/questions/%s?site=codegolf","http://codegolf.xyz/posts/%i/revisions"%n;q,c=s%n,s%('%i/comments'%n);i=get(q).json()['items'][0];m=float(l(findall("<span \S+n (\d+)",get(r).text)));r=m/l(i["owner"]["display_name"]);print r*(i["view_count"]*i["score"]+m)/(i["answer_count"]**2-m)
 except:print';-;'

एलेक्स के जूलिया के जवाब के समान ही तर्क । मैं इसके माध्यम से यह देखना चाहता हूं कि कौन सा प्रश्न सबसे आदर्श है, लेकिन मैं लगातार एपीआई को घंटों तक कॉल नहीं करूंगा।


अनुरोध एक तृतीय-पक्ष पैकेज है। कब से अनुमति दी गई थी।
पिपरी

1
@ ओपररी तब से जब तक ओपी द्वारा स्पष्ट रूप से अस्वीकृत नहीं किया गया है। बाहरी संसाधनों का उपयोग करना जो चुनौती को बिल्कुल हल करते हैं, डिफ़ॉल्ट रूप से मना किया जाता है, लेकिन यहां ऐसा नहीं है।
एलेक्स ए।

2

ग्रूवी, 459 457 बाइट्स

बाकी जवाबों की तरह बहुत सुंदर।

import groovy.json.JsonSlurper
import java.util.zip.GZIPInputStream
def f={n->def j,d,u={p->new JsonSlurper().parseText(new GZIPInputStream("http://api.stackexchange.com/2.2/questions/$p?site=codegolf".toURL().getContent()).getText()).items}
j=u(n)[0]
d=("http://codegolf.xyz/posts/$n/revisions".toURL().text=~/<span \S+n (\d+)/).getCount()
println((d/j.owner.display_name.length())*(j.view_count*j.score+d)/(j.answer_count**2-u("$n/comments").size()))}

सहेजा गया 2 बाइट Cᴏɴᴏʀ O'B 2 के लिए धन्यवाद!

Ungolfed:

import groovy.json.JsonSlurper
import java.util.zip.GZIPInputStream

def f = { n->

    def stackApi = "http://api.stackexchange.com/2.2"

    // Fetch json from stackexchange rest api
    def getItems = { pathParam ->
        //Stackexchange compresses data, decompress before parsing json
        def httpData = "$stackApi/questions/$pathParam?site=codegolf".toURL().getContent()
        def deCompressedData = new GZIPInputStream(httpData).getText()
        def json = new JsonSlurper().parseText(deCompressedData)
        return json.items
    }

    // Get the edit count from the html page
    def htmlPage = "http://codegolf.xyz/posts/$n/revisions".toURL()
    def editCount = (htmlPage.text=~/<span \S+n (\d+)/).getCount()

    // apply formula
    def json = getItems(n)[0]
    def r = editCount/json.owner.display_name.length()
    def Q = r * ( json.view_count * json.score + editCount) /
                (json.answer_count**2 - getItems("$n/comments").size())
    println(Q)
}

f(16327)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.