이상적인 질문


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 자리 이상의 유효 숫자를 입력하십시오 .

이것은 이므로 바이트 단위의 가장 짧은 프로그램이 승리합니다.


참고 : 실행중인 프로그램의 세 가지 예를 포함 시키십시오. 그 중 하나가이 질문이어야합니다. 다른 두 사람이 결정해야합니다. (확인 확인 일뿐입니다.) 또한 쿼리를 입력 한 시간도보고하십시오.


1
@AlexA. 어느 쪽이든 괜찮습니다. 그리고 내 담당자를 봐! : D 담당자 숫자입니다! (누군가 투표하는 경우 888입니다.)
Conor O'Brien

3
SE API는 게시물에 대한 수정 횟수를 노출하지 않습니다.
Alex A.

2
Alex는 편집 내용에 대해 좋은 지적을합니다. API를 사용하는 빠른 방법이 없기 때문에 다른 모든 통계를 합한 것만 큼 많은 수의 수정 사항을 얻는 데 코드가 많이 필요할 수 있습니다. 또한 URL 단축기를 사용할 수 있습니까?
Calvin 's Hobbies

1
@DJMcMayhem Comments 더 가치있는 질문으로 분모를 작게 만듭니다.
Daniel M.

5
나는 그 질문이 무엇인지 모를 수도 있지만, 그 대답은 42 일 것입니다.
Status

답변:


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

골프 도움을 주신 Dennis와 Martin Büttner에게 감사드립니다!


좋은! 이것을 테스트 할 수있는 곳이 있습니까?
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ 최상의 결과를 얻으려면 컴퓨터에 Julia 0.4.0 (현재 최신 릴리스)을 설치하고 로컬에서 실행하는 것이 좋습니다. 람다에 이름을 지정 하고 REPL에서 f=n->...제출 f(16327)하거나 파일 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

파이썬 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를 계속 호출하고 싶지 않습니다.


요청은 타사 패키지입니다. 언제부터 허용 되었습니까?
pppery

1
@ppperry OP가 명시 적으로 허용하지 않는 한 항상 그렇습니다. 문제를 정확하게 해결하는 외부 리소스를 사용하는 것은 기본적으로 금지되어 있지만 여기서는 그렇지 않습니다.
Alex A.

2

그루비, 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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.