Pertanyaan Ideal

16

Apa yang membuat pertanyaan ideal? Mungkin itu hanyalah abstraksi dari pemikiran yang mendalam dan inisialisasi dari mimpi, harapan, pemikiran, (... 5.024,2 karakter dihilangkan ). Oleh karena itu, saya mengusulkan agar kami menemukan faktor seperti itu untuk mengukur pertanyaan. Saya mengusulkan juga bahwa faktor ini disebut Q F , atau Q-factor. Saya menentukan Q-factor pertanyaan sebagai berikut:

(Ingat itu .)

Objektif Dengan diberi nomor sebagai input, tentukan faktor-Q pertanyaan masing-masing di PPCG.SE. Jika pertanyaannya tidak ada, cukup output ;-;(cryote emote).

Ambil, misalnya ,. ( pertanyaan ini ):

Suara bersih, dalam hal ini, berarti .

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

Begitu:

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

Harap berikan minimal 2 angka signifikan pada Q F .

Ini adalah , sehingga program terpendek dalam byte menang.


Catatan: Harap sertakan tiga contoh program Anda berjalan, salah satunya harus pertanyaan ini. Dua lainnya adalah milik Anda untuk memutuskan. (Ini hanya cek konfirmasi.) Juga laporkan waktu di mana Anda memasukkan kueri.

Conor O'Brien
sumber
1
@AlexA. Baik baik saja. Dan lihat perwakilan saya! : D Ini adalah digit rep ! (Ini 888, kalau-kalau ada seseorang yang kalah.)
Conor O'Brien
3
Mungkin menarik untuk dicatat bahwa API SE tidak mengekspos jumlah pengeditan pada posting.
Alex A.
2
Alex membuat poin bagus tentang suntingan. Mungkin diperlukan kode sebanyak mungkin untuk mendapatkan jumlah pengeditan karena semua statistik lainnya digabungkan karena tidak ada cara cepat untuk menggunakan API untuk itu. Juga, dapatkah penyingkat url digunakan?
Calvin Hobbies
1
@DJMcMayhem Komentar menjadikannya pertanyaan yang lebih berharga - mereka membuat penyebutnya lebih kecil.
Daniel M.
5
Meskipun saya mungkin tidak tahu apa pertanyaannya, saya cukup yakin jawabannya adalah 42.
Status

Jawaban:

11

Julia, 411 382 367 355 353 byte

Cukup lama tapi saya sangat senang itu berhasil!

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

Ini menciptakan fungsi tanpa nama yang mengambil integer sebagai input dan mengembalikan float.

Ini membutuhkan Requestspaket, yang dapat diinstal menggunakanPkg.add("Requests") . Paket itu menyediakan metode Base.get()untuk mengirimkan permintaan HTTP. Itu juga mengimpor JSONpaket (yang tergantung, sehingga tidak perlu diinstal secara terpisah) yang kami gunakan untuk mem-parsing output JSON dalam respons.

Tidak Terkumpul:

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

Terima kasih kepada Dennis dan Martin Büttner untuk bantuan bermain golf!

Alex A.
sumber
Bagus! Di mana saya bisa menguji ini?
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ Untuk hasil terbaik saya sarankan menginstal Julia 0.4.0 (saat ini rilis terbaru) pada mesin Anda dan menjalankannya secara lokal. Anda dapat memberi nama lambda seperti f=n->...dan mengirimkan f(16327)di REPL atau println(f(16327))jika Anda menjalankannya dari .jlfile. Ini bekerja pada JuliaBox (membutuhkan akun Google) dengan Julia 0.4.0-rc2 tetapi memberikan peringatan ketika mengkompilasi Requestsmodul.
Alex A.
3

Mathematica 10, 381 bytes

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

Hanya tiga permintaan API dan banyak pengindeksan, sungguh. Bagian tersulit adalah berusaha memahami cara mendapatkan editsdari yang tersedia revisions, semoga saya benar.


sumber
1
Ini tidak berfungsi untuk saya di Mathematica 9. Ia mengatakan StringTemplate argumen tidak valid, mencetak banyak kesalahan, dan tidak mengembalikan hasil.
Alex A.
Maaf, saya lupa memasukkan nomor versi ke judul. Tetap!
Jadi itu tergantung pada fitur unik untuk Mathematica 10?
Alex A.
Anda tidak punya StringTemplate sebelum 10, sejauh yang saya tahu. Anda dapat mengganti bagian itu dengan a=Function["http://api.stackexchange.com/"<>#1<>ToString[#2]<>#3<>"?site=codegolf"];dan melihat apakah itu berfungsi.
2

Python 2, 392 Bytes

Yah, aku mencobanya.

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

Logika yang sangat mirip dengan jawaban Alex Alex . Saya ingin mengulanginya untuk melihat pertanyaan mana yang paling ideal, tetapi saya lebih suka tidak terus-menerus memanggil api selama berjam-jam.

Status
sumber
Permintaan adalah paket pihak ketiga. Sejak kapan mereka diizinkan.
pppery
1
@pperry Karena selalu kecuali secara eksplisit tidak diizinkan oleh OP. Menggunakan sumber daya eksternal yang secara tepat menyelesaikan tantangan dilarang secara default, tetapi tidak demikian halnya di sini.
Alex A.
2

Asyik, 459 457 byte

Cukup banyak seperti sisa jawaban.

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

Disimpan 2 byte berkat Cᴏɴᴏʀ O'Bʀɪᴇɴ!

Tidak Terkumpul:

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)
Rnet
sumber