理想的な質問


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

Q Fに少なくとも2つの有効数字を記入してください。

これはであるため、バイト単位の最短プログラムが優先されます。


注:実行中のプログラムの3つの例を含めてください。そのうちの1つはこの質問でなければなりません。他の2つはあなたが決めるものです。(これは単なる確認チェックです。)クエリを入力した時刻も報告します。


1
@AlexA。どちらでも構いません。そして、私の担当者を見てください!:D 担当者の数字です!(誰かが投票した場合、888です。)
コナーオブライエン

3
SE APIは投稿の編集数を公開しないことに注意してください。
アレックスA.

2
アレックスは編集について良い点を述べています。APIを使用する簡単な方法がないため、他のすべての統計情報と合わせて編集数を取得するのに必要なコードが必要になる場合があります。また、URL短縮サービスを使用できますか?
カルビンの趣味

1
@DJMcMayhemコメントは、それをより価値のある質問にします-分母を小さくします。
ダニエルM.

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"))))

これにより、整数を入力として受け取り、floatを返す名前のない関数が作成されます。

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

ゴルフを手伝ってくれたデニスとマーティン・ブットナーに感謝します!


いいね!これをテストできる場所はありますか?
コナーオブライエン

@CᴏɴᴏʀO'Bʀɪᴇɴ最良の結果を得るには、Julia 0.4.0(現在の最新リリース)をマシンにインストールし、ローカルで実行することをお勧めします。ラムダに名前を付けて、REPLでf=n->...送信するf(16327)println(f(16327)).jlファイルから実行する場合に送信できます。それは上で動作JuliaBoxジュリア0.4.0-RC2で(Googleアカウントが必要です)が、プリコンパイル時に警告を与えるRequestsモジュールを。
アレックス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]]})&

本当に3つのAPIクエリと多くのインデックス作成だけです。最も困難な部分はedits、利用可能から取得する方法を理解しようとしていましたrevisions、うまくいけば私はそれを正しくした。


1
Mathematica 9ではこれは機能しません。StringTemplate引数が無効であり、大量のエラーを出力し、結果を返さないというメッセージが表示されます。
アレックスA.

申し訳ありませんが、タイトルにバージョン番号を入れるのを忘れました。修繕!

それはMathematica 10に固有の機能に依存するのでしょうか?
アレックス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';-;'

アレックスのジュリアの答えに非常に似たロジック。これをループして、どの質問が最も理想的かを確認したいのですが、APIを何時間も続けて呼び出したくないのです。


リクエストはサードパーティのパッケージです。いつから許可されたのか。
pppery

1
@ppperry OPによって明示的に禁止されていない限り、常に。チャレンジを正確に解決する外部リソースの使用はデフォルトでは禁止されていますが、ここではそうではありません。
アレックスA.

2

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

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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.