Trả lời tỷ lệ bình chọn


18

Câu hỏi này được lấy cảm hứng từ thực tế là tôi thích nhìn thấy các câu hỏi với số phiếu và số câu trả lời bằng nhau ...


Vì vậy, đây là một thách thức đơn giản cho bạn:

Thử thách:

Đưa ra một codegolf.stackexchangeid câu hỏi, xuất tỷ lệ giữa phiếu bầu của câu hỏi và số câu trả lời (ví dụ votes/answers).

Cụ thể:

  • Bạn có thể truy cập internet, nhưng bạn chỉ có thể truy cập stackexchange.comvà các tên miền phụ khác nhau. Bạn không thể sử dụng rút ngắn URL.

  • Bạn có thể lấy đầu vào và đưa ra đầu ra ở bất kỳ định dạng tiêu chuẩn nào.

  • Bạn phải xuất tỷ lệ dưới dạng số thập phân trong cơ sở 10, với ít nhất 4 chữ số {chính xác} sau số thập phân (số không có thể bị cắt bớt).

  • Nếu câu hỏi chưa được trả lời, chương trình của bạn có thể tạo ra hành vi không xác định.

  • Bạn nên sử dụng scorecâu hỏi làm phiếu bầu, xem tại đây .

Đây là , ít byte nhất trong mỗi ngôn ngữ sẽ giành chiến thắng cho ngôn ngữ đó, tổng số byte ít nhất sẽ thắng tổng thể.

Đây là một chương trình mẫu trong Python 3 + requests:

import requests
import json

id = input("id> ")
url = "https://api.stackexchange.com/2.2/questions/" + id + "?site=codegolf"
content = requests.get(url).text
question = json.loads(content)["items"][0]

print(float(question["score"]) / question["answer_count"])

Có phải tỷ lệ cần ít nhất 4 chữ số thập phân sau điểm thập phân ngay cả khi chúng bằng không? Ví dụ: 41/4 = 10,25 hoặc 10,200
pizzapants184

@ pizzapants184 10.25 vẫn ổn
Socratic Phoenix

Nếu thử thách không được trả lời thì sao? Vậy thì tỷ lệ sẽ là vô hạn?
Ông Xcoder

Bạn có nghĩa là điểm hoặc tổng số phiếu cho câu hỏi?
admBorkBork

@ Mr.Xcoder trong trường hợp đó, hành vi không xác định là ổn
Socratic Phoenix

Câu trả lời:


10

JavaScript (ES6), 103 102 byte

Cần phải được chạy từ cấp độ gốc của api.stackexchange.com. Trả về một Promiseđối tượng chứa kết quả.

n=>fetch(`questions/${n}?site=codegolf`).then(r=>r.json()).then(({items:[j]})=>j.score/j.answer_count)

Nếu yêu cầu nó được chạy từ một đường dẫn cụ thể được phép thì nó sẽ trở thành 92 90 byte.

n=>fetch(n+`?site=codegolf`).then(r=>r.json()).then(({items:[j]})=>j.score/j.answer_count)

Thử nó

URL đầy đủ được thêm vào để cho phép nó hoạt động ở đây.

f=
n=>fetch(`//api.stackexchange.com/questions/${n}?site=codegolf`).then(r=>r.json()).then(({items:[j]})=>j.score/j.answer_count)
onchange=_=>f(+i.value).then(t=>o.innerText=t)
<input id=i type=number><pre id=o>


7
Thay thế i=>(j=i.items[0])bằng ({items:[j]})=>jđể tiết kiệm một byte.
kamoroso94

Thủ thuật hay, cảm ơn, @ kamoroso94. Tôi sẽ phải nhớ điều đó.
Xù xì

8

Stratos , 40 byte

-4 byte nhờ Shaggy

f"¹⁵s/%²"r"⁷s"@0
{s"answer_⁰"
⁰s"score"/

Thử nó!

Stratos chuyên về câu hỏi .

Giải trình:

Mã giải nén như sau:

f"api.stackexchange.com/questions/%?site=codegolf"r"items"@0
{s"answer_count"
⁰s"score"/

Bắt đầu từ dòng đầu tiên, Stratos đánh giá các con đê từ phải sang trái.

f"api.stackexchange.com/questions/%?site=codegolf"r"items"@0có nghĩa là "đánh giá dyad @bằng đối số bên trái f"api.stackexchange.com/questions/%?site=codegolf"r"items"và đối số bên phải 0. @lấy phần tử thứ n của mảng JSON.

Để đánh giá f"api.stackexchange.com/questions/%?site=codegolf"r"items", tiếp theo chúng ta sẽ đánh giá dyad rbằng đối số bên trái f"api.stackexchange.com/questions/%?site=codegolf"và đối số bên phải "items". rlấy mảng JSON với tên được chỉ định.

Tiếp theo, chúng ta sẽ cần đánh giá f"api.stackexchange.com/questions/%?site=codegolf". Đầu tiên, %được thay thế bằng đầu vào. fcó nghĩa là "lấy nội dung của URL này".

Bây giờ, chúng ta có thể chuyển sang dòng thứ hai. Dòng mới có nghĩa là "thêm những gì chúng tôi đã đánh giá vào danh sách đối số ngầm"

Tiếp theo, chúng tôi đánh giá s(lấy chuỗi trong đối tượng JSON có tên nhất định) với {"answer_count". {lấy một phần tử từ ngăn xếp đối số ngầm, trả về nó và thêm nó trở lại ngăn xếp.

Sau đó, chúng ta thêm đầu ra của nó vào ngăn đối số ẩn.

Để đánh giá ⁰s"score"/, chúng tôi đang áp dụng dyad /(chia) cho ⁰s"score"và một phần tử từ ngăn xếp đối số ngầm.

Để đánh giá, ⁰s"score"chúng ta sẽ lấy chuỗi "score"từ đối tượng JSON từ phần tử thứ 0 trong ngăn xếp đối số ẩn.

Bây giờ, đầu ra của /được in và chương trình kết thúc.


Lưu 4 byte bằng cách bỏ phiên bản API ( 2.2/).
Xù xì

1
@Shaggy Không nhận ra phiên bản API không bắt buộc, cảm ơn. Không bỏ qua 44: P
Okx

5

R + jsonlite , 111 byte

function(n,x=jsonlite::fromJSON(sprintf('http://api.stackexchange.com/questions/%s?site=codegolf',n))$i)x$s/x$a

Liên kết R-fiddle

jsonlite là một thư viện chuyển đổi JSON <-> R hoạt động khá tốt. Tôi đã không định chơi một trình phân tích cú pháp JSON cho R ...


Bạn có thể lưu một byte bằng cách sử dụng httpgiao thức. Ngoài ra, tôi đoán 142729không nên mã hóa cứng ở đó?
Xù xì

@Shaggy gọi tốt, cảm ơn bạn. Tôi đã sao chép và dán quá nhanh.
Giuseppe

4

T-SQL, 64 54 byte

Rất hiếm khi SQL có thể đánh bại (hầu hết) các ngôn ngữ khác! Thay vì URL API, tôi đã truy cập trực tiếp vào Stack Exchange Data Explorer :

SELECT 1.0*Score/AnswerCount FROM Posts WHERE Id=##i##

Các ##i##không phải là SQL tiêu chuẩn, đó là định dạng stack Exchange để nhắc nhở cho đầu vào.

Lưu ý rằng nguồn trình duyệt dữ liệu chỉ được cập nhật hàng đêm, vì vậy các giá trị không hiện hành.

Sẽ ném một số chia cho số không cho các câu hỏi không có câu trả lời.

Chỉnh sửa : Saved 10 byte bằng cách nhân 1.0 thay vì một rõ ràng CONVERTđể FLOAT.


có thể đánh bại người khác, nhưng không phải tất cả :)
Okx

Oh maaan, tôi đã có một giải pháp khác nhưng tôi đang ở trường nên cuối cùng tôi chưa bao giờ đăng nó ... Câu trả lời của tôi có quá giống với bạn không? Tôi có nên xóa của tôi?
hoàn toàn là

@icrieverytim Ha, yep trông khá giống với cùng một truy vấn, mặc dù tôi chỉ chỉnh sửa của tôi để tiết kiệm thêm 10 byte.
BradC

@BradC Tôi đã chỉnh sửa câu trả lời của mình thành câu trả lời Mathicala lol.
hoàn toàn là

3

PowerShell , 130 byte

($a=(ConvertFrom-Json(iwr("http://api.stackexchange.com/questions/"+$args+"?site=codegolf")).content).items).score/$a.answer_count

Thực hiện một Invoke- Web Request chống URL, nhận được .contentchúng, thực hiện một ConvertFrom-Jsonnội dung đó, và nhận được .itemsđiều đó đối tượng JSON. Lưu trữ vào $avà rút ra .scorelàm tử số. Mẫu số là .answer_count. Giá trị đó được để lại trên đường ống và đầu ra là ẩn.

Nếu câu hỏi chưa được trả lời, câu hỏi này sẽ gây ra lỗi "Chia cho số 0".


3

Japt , 83 82 byte

Muốn thử cái này để xem nó sẽ hoạt động như thế nào, xem như Japt không thể thực hiện được nó. Về cơ bản, tất cả những gì đang làm là lấy evalmột phiên bản nén của giải pháp JS của tôi . Vì Japt JS nên chúng ta có thể yêu cầu điều này được chạy từ cấp gốc api.stackexchange.comvà cũng trả về một Promiseđối tượng có chứa kết quả.

Ox`fet®("quÀËs/{U}?ÐÒ=¬¸golf").È(r=>r.js()).È(i=>(j=i.ems[0]).sÖ/j.s³r_Öt)
  • Xem nó
  • Hãy thử nó - các byte bổ sung trong phiên bản này được tính bằng cách đưa //api.stackexchange.com/vào URL và console.logdo đó bạn thực sự có thể thấy nó hoạt động

1
o0 Tại sao bạn tạo mã liên kết? Nó thậm chí còn gây rối với màn hình đếm byte của usercript. i.imgur.com/SO2zgAy.png
hoàn toàn là

2

Toán học, 124 byte

N@("score"/.(u="items"/.Import["http://api.stackexchange.com/questions/"<>#<>"?site=codegolf","JSON"]))/("answer_count"/.u)&

Mathematica có một kiểu dữ liệu được gọi Rulevà nó làm tôi bối rối. : P


1

Yêu cầu Python 3 +, 149 byte

-1 byte nhờ ông Xcoder.

from requests import*
u=get('http://api.stackexchange.com/questions/%s?site=codegolf'%input()).json()['items'][0]
print(u['score']/u['answer_count'])

Liên kết là tới Python 2. Btw, nó đưa ra một lỗi cả trong Python 2 và Python 3 (trên TIO).

Không có truy cập internet trên TIO whoops. Tôi chỉ sử dụng TIO cho định dạng câu trả lời lol.
hoàn toàn là

Tôi nghĩ rằng (bây giờ) httpđủ.
Ông Xcoder


0

PHP, 167 byte

<?$f=json_decode(gzdecode(file_get_contents('https://api.stackexchange.com/2.2/questions/'.$argv[1].'?site=codegolf')))->items[0];echo $f->score/$f->answer_count;

Turbo-crack nhanh tại đây. Lưu dưới dạng tệp và thực thi trong thiết bị đầu cuối như vậy:

php -f file.php 143083

Có thể là một cách để giảm điều này.

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.