投票率答复


18

这个问题是受以下事实启发的:我喜欢看到投票和答案均等的问题。


因此,这是一个针对所有人的简单挑战:

挑战:

给定codegolf.stackexchange问题ID,输出问题的票数与答案数之间的比率(例如votes/answers)。

细节:

  • 您可以访问Internet,但您只能访问Internet stackexchange.com及其各个子域。您不能使用URL缩短器。

  • 您可以输入任何标准格式的输出。

  • 您必须将比率输出为以10为底的十进制数字,并在小数点后至少4个{准确的}数字(零可能会被截断)。

  • 如果未回答问题,则您的程序可能会产生不确定的行为。

  • 您应该score将问题的用作投票数,请参见此处

这是,每种语言的最小字节数对该语言获胜,总体上最小字节数获胜。

这是一个示例程序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"])

即使比率为零,该比率是否也需要在小数点后至少需要4个小数位?例如41/4 = 10.25或10.2500
比萨饼184

@ pizzapants184 10.25很好
苏格拉底凤凰城

如果挑战没有得到解决怎么办?那么比率将是无限的?
Xcoder先生17年

您是指该问题的得分还是总票数
AdmBorkBork

@ Mr.Xcoder在这种情况下,未定义的行为就可以了
苏格拉底菲尼克斯

Answers:


10

的JavaScript(ES6),103个 102字节

需要从的根目录运行api.stackexchange.com。返回Promise包含结果的对象。

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

如果要求从特定路径运行,则它将变为92 90字节。

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

尝试一下

添加了完整的URL,使其可以在此处使用。

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
替换i=>(j=i.items[0])({items:[j]})=>j保存字节。
kamoroso94

好招,谢谢,@ kamoroso94。我必须记住那个。
毛茸茸的

8

Stratos,40个字节

-4个字节,感谢Shaggy

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

尝试一下!

Stratos专门研究问题。

说明:

该代码解压缩为以下内容:

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

从第一行开始,Stratos从右到左评估二元组。

f"api.stackexchange.com/questions/%?site=codegolf"r"items"@0意思是“ @使用左手参数f"api.stackexchange.com/questions/%?site=codegolf"r"items"和右手参数评估dyad 0@获取JSON数组的第n个元素。

为了进行评估f"api.stackexchange.com/questions/%?site=codegolf"r"items",我们接下来将r使用左手参数f"api.stackexchange.com/questions/%?site=codegolf"和右手参数评估二元组"items"r获取具有指定名称的JSON数组。

接下来,我们将需要评估f"api.stackexchange.com/questions/%?site=codegolf"。首先,%将其替换为输入。f表示“获取此URL的内容”。

现在,我们可以继续第二行。换行符的意思是“将我们评估的内容添加到隐式参数列表中”

接下来,我们评估s与(在某个名字JSON对象获取字符串){"answer_count"{从隐式参数堆栈中获取一个元素,将其返回,然后将其添加回堆栈中。

然后,我们将其输出添加到隐式参数堆栈中。

为了进行求值⁰s"score"/,我们将dyad /(除法)应用到⁰s"score"隐式参数堆栈中,并使用元素。

为了评估,⁰s"score"我们"score"从隐式参数堆栈中的第0个元素从JSON对象获取字符串。

现在,输出的输出,/程序终止。


放弃API版本(2.2/),可节省4个字节。
毛茸茸的

1
@Shaggy没意识到不需要API版本,谢谢。没有越过44:P
Okx

5

R + jsonlite,111字节

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

R小提琴链接

jsonlite是一个很好的JSON <-> R转换库,效果很好。我本来不想为R使用JSON解析器...


您可以使用该http协议保存一个字节。另外,我猜142729不应该在那里硬编码?
毛茸茸的

@粗野的好电话,谢谢。我复制和粘贴得太快了。
朱塞佩

4

T-SQL,64 54字节

SQL很少能击败(大多数)其他语言!我直接使用Stack Exchange Data Explorer而不是API URL :

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

##i##不是标准的SQL,而是Stack Exchange提示输入的格式。

请注意,数据浏览器源仅每晚更新一次,因此值不是最新的。

对于没有答案的问题,将抛出零除错误。

编辑:通过乘以1.0而不是显式CONVERT来保存10个字节FLOAT


可以击败其他人,但不是全部:)
Okx

哦,maaan,我有另一个解决方案,但是我当时在学校,所以我从来没有把它发布出去……我的答案和你的答案太相似了吗?我应该删除我的吗?
–totalhuman

@icrieverytim哈,是的,看起来很像相同的查询,尽管我只是编辑了我的,以节省10个字节。
BradC

@BradC我将答案编辑成Mathematica答案。
–totalhuman

3

PowerShell,130字节

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

执行Invoke- WEB ReQUEST的针对URL,获取.content它们,做了ConvertFrom-Json该内容的,并获取.items该JSON对象的。将其存储到分子中$a.score作为分子拉出。分母是.answer_count。该值保留在管道上,并且输出是隐式的。

如果未回答问题,则应抛出“除以零”错误。


3

Japt83 82字节

想要尝试一下,看看Japt不能自然完成它,将如何工作。本质上这就是eval在压缩我的JS解决方案的版本。由于Japt JS,因此我们可以要求它从的根级别运行,api.stackexchange.com并且还返回Promise包含结果的对象。

Ox`fet®("quÀËs/{U}?ÐÒ=¬¸golf").È(r=>r.js()).È(i=>(j=i.ems[0]).sÖ/j.s³r_Öt)
  • 查看它
  • 尝试一下 -此版本中的多余字节由//api.stackexchange.com/URL中的和占,console.log因此您可以实际看到它的作用

1
o0为什么将代码设为链接?它甚至与用户脚本的字节数显示大声笑有关。i.imgur.com/SO2zgAy.png
完全人类

2

Mathematica,124个字节

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

Mathematica的数据类型称为Rule,这让我很困惑。:P


1

Python 3 +请求,149字节

-1个字节感谢Xcoder先生。

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

链接指向Python2。顺便说一句,它在Python 2和Python 3(在TIO上)均引发错误。

在TIO上无法上网。我只是将TIO用于答案格式,大声笑。
–totalhuman

我认为(目前)http就足够了。
Xcoder先生17年


0

PHP,167字节

<?$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;

涡轮快速裂纹。另存为文件并在终端中执行,如下所示:

php -f file.php 143083

可能是减少这种情况的一种方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.