理想问题


16

是什么导致理想的问题?也许这仅仅是对深刻思想的抽象和对梦想,希望,思想的初始化(…… 省略了5,024.2个字符)。因此,我建议我们找到一个量化问题的因素。我还建议将该因子称为Q F或Q因子。我这样确定问题的Q因子:

(回想一下。)

目的给定一个数字作为输入,在PPCG.SE上确定相应问题的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

请提供至少2个有关Q F的有效数字。

这是一个,因此以字节为单位的最短程序获胜。


注意:请提供三个程序运行示例,其中一个必须是这个问题。其他两个由您决定。(这只是确认检查。)还报告您输入查询的时间。


1
@AlexA。都可以。看看我的代表!:D这是代表数字!(如果有人投票,那就是888。)
Conor O'Brien

3
可能需要注意的是,SE API并未公开帖子的编辑数量。
Alex A.

2
亚历克斯很好地说明了这些修改。要获得编辑数量,可能需要与所有其他统计信息一样多的代码,因为没有快速的方法来使用该API。另外,可以使用网址缩短器吗?
加尔文的爱好2015年

1
@DJMcMayhem评论使它成为一个更有价值的问题-它们使分母减小。
Daniel M.

5
虽然我可能不知道问题是什么,但我很确定答案是42。–
状态

Answers:


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输出。

取消高尔夫:

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

感谢Dennis和MartinBüttner提供的高尔夫帮助!


真好!我可以在任何地方测试吗?
Conor O'Brien 2015年

@CᴏɴᴏʀO'Bʀɪᴇɴ为了获得最佳结果,我建议在您的计算机上安装Julia 0.4.0(当前为最新版本)并在本地运行。您可以给lambda一个类似的名称,f=n->...然后f(16327)在REPL上提交,或者println(f(16327)).jl文件中运行它。它适用于Julia 0.4.0-rc2的JuliaBox(需要Google帐户),但在预编译Requests模块时会发出警告。
Alex A.

3

Mathematica 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]]})&

实际上,只有三个API查询和很多索引。最难的部分是尝试了解如何edits从可用的资源中获取资源revisions,希望我做对了。


1
这在Mathematica 9中对我不起作用。它说该StringTemplate参数无效,打印出许多错误,并且不返回结果。
Alex A.

抱歉,我忘了在标题中加上版本号。固定!

因此,这取决于Mathematica 10独有的功能吗?
Alex A.

StringTemplate据我所知,您在10点之前没有。您可以将其替换为,a=Function["http://api.stackexchange.com/"<>#1<>ToString[#2]<>#3<>"?site=codegolf"];然后查看它是否起作用。

2

Python 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';-;'

与Alex的Julia答案非常相似的逻辑。我想循环浏览一下哪个问题是最理想的,但我宁愿连续几个小时不间断地调用该api。


请求是第三方程序包。从什么时候被允许的。
2015年

1
@ppperry,因为除非OP明确禁止,否则始终如此。默认情况下,禁止使用能够完全解决挑战的外部资源,但实际情况并非如此。
Alex A.

2

Groovy,459457字节

很像其余的答案。

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()))}

多亏了C'O'Bʀɪᴇɴ,节省了2个字节!

取消高尔夫:

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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.