คำถามในอุดมคติ


16

อะไรเป็นคำถามในอุดมคติ? บางทีมันอาจเป็นเพียงนามธรรมของความคิดที่ลึกซึ้งและการเริ่มต้นของความฝันความหวังความคิดและ (… 5,024.2 ตัวอักษรที่ละไว้ ) ดังนั้นฉันจึงเสนอให้เราพบปัจจัยดังกล่าวในการหาจำนวนคำถาม ฉันเสนอว่าปัจจัยนี้เรียกว่าQ Fหรือ Q-factor ฉันพิจารณาปัจจัย Q ของคำถามดังนี้:

(จำได้ว่า)

วัตถุประสงค์ให้ตัวเลขเป็นข้อมูลกำหนดคำถาม Q- ปัจจัยที่เกี่ยวข้องใน PPCG.SE หากคำถามไม่มีอยู่ก็เพียงแค่เอาท์พุท;-;(เสียงร้องไห้)

ใช้ตัวอย่างเช่น, ( คำถามนี้ ):

โหวตสุทธิในกรณีนี้หมายถึง

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 สำหรับมัน นอกจากนี้สามารถใช้ตัวย่อ URL ได้หรือไม่
งานอดิเรกของ Calvin

1
@DJMcMayhem ความคิดเห็นทำให้เป็นคำถามที่มีค่ายิ่งขึ้น - ทำให้ส่วนเล็กลง
Daniel M.

5
ในขณะที่ฉันอาจไม่รู้ว่าคำถามคืออะไรฉันค่อนข้างแน่ใจว่าคำตอบคือ 42
สถานะ

คำตอบ:


11

Julia, 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 ในการตอบกลับ

Ungolfed:

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 (ปัจจุบันเป็นรุ่นล่าสุด) บนเครื่องของคุณและเรียกใช้ในเครื่อง คุณสามารถตั้งค่าแลมบ์ดาให้เป็นชื่อf=n->...และส่งf(16327)ที่ REPL หรือprintln(f(16327))ถ้าคุณเรียกใช้จาก.jlไฟล์ มันทำงานบนJuliaBox (ต้องมีบัญชี Google) กับ Julia 0.4.0-rc2 แต่ให้คำเตือนเมื่อทำการคอมไพล์Requestsโมดูล
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]]})&

มีเพียงสามคำค้นหา 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 Bytes

ฉันให้มันยิง

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 การใช้ทรัพยากรภายนอกที่แก้ไขข้อท้าทายนั้นเป็นสิ่งต้องห้ามโดยค่าเริ่มต้น แต่ไม่ใช่ในกรณีนี้
Alex 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()))}

บันทึก 2 ไบต์ต้องขอบคุณCᴏɴᴏʀO'Bʀɪᴇɴ!

Ungolfed:

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.