Câu hỏi lý tưởng


16

Điều gì làm cho câu hỏi lý tưởng? Có lẽ nó chỉ đơn thuần là sự trừu tượng của một suy nghĩ sâu sắc và khởi tạo một giấc mơ, một hy vọng, một ý nghĩ, một (cách 5.024.2 ký tự bị bỏ qua ). Do đó, tôi đề nghị rằng chúng tôi tìm một yếu tố như vậy để định lượng câu hỏi. Tôi cũng đề xuất rằng yếu tố này được gọi là Q F , hay yếu tố Q. Tôi xác định yếu tố Q của câu hỏi như vậy:

(Nhớ lại rằng .)

Mục tiêu Đưa ra một số làm đầu vào, xác định hệ số Q của câu hỏi tương ứng trên PPCG.SE. Nếu câu hỏi không tồn tại, chỉ cần xuất ra ;-;(emote khóc).

Lấy ví dụ , . ( câu hỏi này ):

Các phiếu bầu ròng, trong trường hợp này, có nghĩa là .

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

Vì thế:

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

Vui lòng cung cấp ít nhất 2 con số đáng kể trên Q F .

Đây là một , vì vậy chương trình ngắn nhất tính bằng byte sẽ thắng.


Lưu ý: Vui lòng bao gồm ba ví dụ về chương trình của bạn đang chạy, một trong số đó phải là câu hỏi này. Hai cái còn lại là của bạn để quyết định. (Đây chỉ là kiểm tra xác nhận.) Đồng thời báo cáo thời gian bạn nhập truy vấn.


1
@AlexA. Hoặc là tốt. Và nhìn vào đại diện của tôi! : D Đó là một chữ số đại diện ! (Đó là 888, trong trường hợp có ai đó ủng hộ.)
Conor O'Brien

3
Có thể cần lưu ý rằng API SE không hiển thị số lần chỉnh sửa trên một bài đăng.
Alex A.

2
Alex làm cho một điểm tốt về các chỉnh sửa. Nó có thể yêu cầu nhiều mã để có được số lần chỉnh sửa như tất cả các số liệu thống kê khác được kết hợp do không có cách nhanh chóng để sử dụng API cho nó. Ngoài ra, có thể sử dụng rút ngắn url?
Sở thích của Calvin

1
@DJMcMayhem Nhận xét làm cho nó trở thành một câu hỏi có giá trị hơn - chúng làm cho mẫu số nhỏ hơn.
Daniel M.

5
Trong khi tôi có thể không biết câu hỏi là gì, tôi khá chắc chắn câu trả lời là 42.
Trạng thái

Câu trả lời:


11

Julia, 411 382 367 355 353 byte

Nó khá dài nhưng tôi rất hài lòng vì nó hoạt động!

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

Điều này tạo ra một hàm không tên lấy một số nguyên làm đầu vào và trả về một float.

Nó đòi hỏi các Requestsgói, có thể được cài đặt bằng cách sử dụng Pkg.add("Requests"). Gói đó cung cấp các phương thức Base.get()để gửi yêu cầu HTTP. Nó cũng nhập JSONgói (phụ thuộc vào nó, do đó không cần phải cài đặt riêng) mà chúng tôi sử dụng để phân tích đầu ra JSON trong phản hồi.

Ung dung:

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ảm ơn Dennis và Martin Büttner đã giúp đỡ chơi golf!


Đẹp! Bất cứ nơi nào tôi có thể kiểm tra điều này?
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Để có kết quả tốt nhất, tôi khuyên bạn nên cài đặt Julia 0.4.0 (hiện là bản phát hành mới nhất) trên máy của bạn và chạy cục bộ. Bạn có thể đặt cho lambda một cái tên như thế f=n->...và gửi f(16327)tại REPL hoặc println(f(16327))nếu bạn đang chạy nó từ một .jltệp. Nó hoạt động trên JuliaBox (yêu cầu tài khoản Google) với Julia 0.4.0-rc2 nhưng đưa ra cảnh báo khi biên dịch trước Requestsmô-đun.
Alex A.

3

Toán học 10, 381 byte

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

Chỉ cần ba truy vấn API và rất nhiều lập chỉ mục, thực sự. Phần khó nhất là cố gắng hiểu làm thế nào để có được editstừ có sẵn revisions, hy vọng tôi đã làm đúng.


1
Điều này không phù hợp với tôi trong Mathicala 9. Nó nói rằng StringTemplateđối số không hợp lệ, in ra một loạt lỗi và không trả về kết quả.
Alex A.

Xin lỗi, tôi quên đặt số phiên bản vào tiêu đề. Đã sửa!

Vì vậy, nó phụ thuộc vào các tính năng duy nhất cho Mathematica 10?
Alex A.

Bạn không có StringTemplatetrước 10, theo như tôi biết. Bạn có thể thay thế phần đó bằng a=Function["http://api.stackexchange.com/"<>#1<>ToString[#2]<>#3<>"?site=codegolf"];và xem nếu nó hoạt động.

2

Python 2, 392 byte

Vâng, tôi đã cho nó một shot.

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

Logic rất giống với câu trả lời của Julia của Alex . Tôi muốn lặp lại câu hỏi này để xem câu hỏi nào là lý tưởng nhất nhưng tôi không muốn liên tục gọi api hàng giờ liền.


Yêu cầu là gói của bên thứ ba. Kể từ khi được cho phép.
pppery

1
@ppperry Vì luôn luôn trừ khi OP không cho phép rõ ràng. Sử dụng các tài nguyên bên ngoài để giải quyết chính xác thách thức bị cấm theo mặc định nhưng đó không phải là trường hợp ở đây.
Alex A.

2

Groovy, 459 457 byte

Khá giống như phần còn lại của câu trả lời.

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

Đã lưu 2 byte nhờ Cᴏɴᴏʀ O'Bʀɪᴇɴ!

Ung dung:

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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.