堆栈交换投票计数器


40

编写一个程序/函数,在执行时返回其自己的Stack Exchange答案的投票计数。

  • 您的程序/功能可以通过Internet访问此页面(codegolf.stackexchange.com/questions/82609),但是:
  • 您的程序/功能可能不接受任何用户输入,并且
  • 不允许使用URL缩短器
  • 您的程序/函数只能使用其自身的来源作为其投票计数的参考点(例如:在其包含的答案中没有引用文本字符串,但在其自身的来源中没有引用字符串)
  • 您的程序/函数必须输出自己的投票数,并且只能输出自己的投票数(例如:在此页面上不返回所有投票数)

这是代码高尔夫,最短的代码胜利。


perl -e'($_)=`curl -s http://api.stackexchange.com/2.2/posts/123?site=codegolf`;/score":(\d+)/&&print$1'看起来应该可以,但不能。但是也许有人可以使用它。
msh210 '16

7
对于其他尝试使用该API失败的人:即使客户端不支持它,它也会提供gzip编码的响应。
丹尼斯

13
“您的程序/功能只能将其自身的源用作其投票计数的参考点”,这有点令人困惑。这是否意味着答案应该仅尝试使用自己的代码知识而不是通过帖子ID之类的方法来识别自己?我认为这样的规则不会很好,因为其他任何人发布新答案都可能破坏它。
FryAmTheEggman'6

@FryAmTheEggman我确实想出了打破其他人答案的想法,我什至考虑将其作为KOTH,您的消息来源试图破坏另一个答案,尽管最后似乎在推动格式超出我的期望...我添加了using its own source一些位,以防止用户设置页面,以便在答案不使用post id方法的情况下,更轻松地查找自己而不增加其字节数。
Dendrobium

2
好吧,措辞有点怪异。我建议不要以这种方式允许某些行为,而应直接禁止使用stackexchange提供的那些Web服务(除非我误解了您)。附带说明一下,由于完整性问题的性质,不可能使此类内容牢不可破。您能做的最好的事情就是让它变得难以置信。
FryAmTheEggman

Answers:


39

jQuery + JavaScript,85个字节

$.get("//api.stackexchange.com/posts/82610?site=codegolf",d=>alert(d.items[0].score))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

历史

  • -6个字节,因为我使用的是var data而不是d
  • -3个字节,感谢@ msh210
  • -13个字节,感谢@CᴏɴᴏʀO'Bʀɪᴇɴ
  • -4个字节,感谢@ user6188402
  • -5字节归功于@Suever
  • -4个字节,感谢@RobW

推荐用法

  • 运行摘要。
  • 赞成。
  • 运行摘要,并随着数字的神奇增加而惊讶。

奖金!!

谁不喜欢奖金?

$.getJSON("//api.stackexchange.com/posts/" + prompt() + "?site=codegolf",d=>alert(d.items[0].score));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

在奖金中输入ID,它会告诉您得分。

甚至更多的奖金!运行此代码片段以自动运行程序,投票并再次运行!(需要代表> 15,验证)。如果不起作用,请告诉我。


2
posts而不是answershttp不是https保存三个字节(或者您可以http:完全省略吗?)。(未经测试。)
msh210 '16

2
您可以使用http://,它将301重定向到https://更好,只需完全删除http//api.stackexchange.com...
Suever 2016年

8
jQuery不是一种语言,也不是JS中的内置库。因此,如果您正在使用它,也要在分数中包含jQuery的字节数。
Optimizer

10
@Optimizer:这是正确的方法:将JS + jQuery视为自己的“语言”。看到这个meta post:meta.codegolf.stackexchange.com/a/9279/12914
El'endia Starman

3
使用$.get代替$.getJSON。API的内容类型为application/json,并且jQuery会自动将响应视为JSON。
罗伯W

24

JavaScript ES6,107个字节

fetch`//api.stackexchange.com/posts/82672?site=codegolf`.then(r=>r.json()).then(b=>alert(b.items[0].score))

真正的程序员不使用XMLHttpRequest。真正的程序员使用Fetch API


1
好吧...你让我在那里。我从来不知道这个API!
Conor O'Brien

我收到一个错误fetch是没有定义
安东尼范

1
@PythonMaster并非所有浏览器都提供Fetch API:caniuse.com/#feat=fetch
Jordan

21

Bash,80 79 75 69字节

w3m api.stackexchange.com/posts/82616?site=codegolf|tr ,: \\t|cut -f20

出于评分目的,\t应替换为TAB字符。

这需要w3m,大多数Linux发行版默认都应提供。

感谢@NoOneIsHere -2个字节!

这个怎么运作

w3m是命令行Web浏览器。它查询URL,并(通常)以可读格式显示其内容。在这里,我们只(AB)的使用,以避免调用zcatcurl需要的,因为SE提供的API响应gzip压缩。

tr ,: \^I用制表符替换所有逗号和冒号,制表符是cut的默认字段定界符。

最后,cut -f20删除除第二十个字段(投票数)以外的所有内容。


或者--compressed,甚至比更长zcat
尼尔

9

JavaScript的ES6,175个 165 160 145字节

感谢Optimizer和Dendrobium,节省了很多字节!它们都是5的倍数!

使用普通的ol'javascript。谁需要那些新颖的图书馆?真正的程序员使用XMLHttpRequest()

with(new XMLHttpRequest)send(open("get","//api.stackexchange.com/posts/82614?site=codegolf"),onload=_=>alert(response.match(/re..([0-9]+)/)[1]))

测试一下

alert=x=>o.innerHTML=x;

with(new XMLHttpRequest)send(open("get","//api.stackexchange.com/posts/82614?site=codegolf"),onload=_=>alert(response.match(/re..([0-9]+)/)[1]))
*{font-family:Consolas,monospace;}
<div id=o></div>


@Optimizer谢谢!但是为什么要使用prompt呢?
科纳·奥布莱恩

@Optimizer由于某种原因,"g"对我来说不起作用。
Conor O'Brien

with(new XMLHttpRequest)(open("get","//api.stackexchange.com/2.2/posts/82614?site=codegolf"),onload=_=>alert(response.items[0].score),send(responseType="json"))-5个字节
Dendrobium

@Dendrobium哦,很好。我忘了with
Conor O'Brien

@Optimizer我得到了TypeError: response.split(...)[12] is undefined",
Conor O'Brien

7

bash + jq,69字节

w3m api.stackexchange.com/posts/82615?site=codegolf|jq .items[].score

我以前curlzcat以前;w3m受到丹尼斯(惊人的相似)答案的启发。事实证明jqtr/ cut具有相同的字节开销!


6

凸0.5,63个字节

0000000: 22 d1 2e 46 91 32 e5 69 5d b2 66 81 12 a4 8d d1  "..F.2.i].f.....
0000010: 27 40 b5 32 47 68 97 2c b9 5c 22 05 16 49 10 31  '@.2Gh.,.\"..I.1
0000020: 44 9e f3 0a 6a 16 b0 68 91 93 35 0b 96 dc 91 0a  D...j..h..5.....
0000030: 3c 18 80 22 dc 67 27 3c 2f 32 36 39 3d 37 3e     <..".g'</269=7>

这将从搜索页面而不是API(特别是从查询https://codegolf.stackexchange.com/search?q=inquestion:82714)中检索分数。幸运的是,它inquestion也可以解决问题。

验证

$ echo $LANG
en_US
$ cat gen.convex
"codegolf.stackexchange.com:80/search?q=inquestion:82714"Ö`"Üg'</269=7>"
$ java -jar Convex/out/builds/convex-0.5/convex/convex.jar gen.conv > count.conv
$ cksum count.conv
2414634109 63 count.conv
$ java -jar Convex/out/builds/convex-0.5/convex/convex.jar count.conv
1

这个怎么运作

"..."Ü           e# Use the built-in string compression to push
                 e# "codegolf.stackexchange.com:80/search?q=inquestion:82714".
      g          e# Retrieve the HTML page at that URL.
       '</       e# Split at occurrences of '<'.
          269=   e# Select the chunk at index 269.
                 e# This pushes "strong>", followed by the vote count.
              7> e# Discard the leading seven characters.

这真太了不起了。您甚至怎么知道这种语言可以做到这一点?
阿德南

3
这是CJam叉子。我最初用CJam(67字节)写我的答案,但后来我想起了Convex具有内置的字符串压缩功能。
丹尼斯

5

05AB1E89 87 81字节

谢谢Python ...

•1Ö8•D’£Ø ˆå§¾.‡¢ as g;#.¾¿„–(g.ˆåƒÛ('·Ç://ƒËŠˆ.‚‹º.ŒŒ/…é/ÿ/').‚Ø())’.er¡14èžz£þ

使用CP-1252编码。


4

MATLAB,103字节

g=@getfield;g(g(webread('http://api.stackexchange.com/2.2/posts/82611?site=codegolf'),'items'),'score')

4

JavaScript(Node.js + Unirest),123字节

require("unirest").get("http://api.stackexchange.com/posts/82683?site=codegolf").end(x=>console.log(x.body.items[0].score))

我喜欢这个库,因为它会自动解析JSON。


4

利亚,128个 107字节

using Requests
f()=split(readall(get("http://api.stackexchange.com/posts/82621?site=codegolf")),r":|,")[20]

此函数不输入任何内容,而是以字符串形式返回此帖子的分数。它需要Requests安装软件包。

这个怎么运作:

  • get 向SE API发出GET请求
  • readall 读取响应中的原始字节并返回一个字符串
  • split 在冒号和逗号处分割字符串
  • 结果数组的第20个元素是帖子的得分

感谢Dennis,节省了21个字节!


4

JavaScript(Node.js),166字节

-1个字节,因为@CᴏɴᴏʀO'Bʀɪᴇɴ教我如何计数;)

-4个字节,感谢@NoOneIsHere

require("http").get("http://api.stackexchange.com/posts/82620?site=codegolf",a=>a.on("data",d=>console.log(JSON.parse(require("zlib").gunzipSync(d)).items[0].score)))

这有点尴尬。让您SE压缩您的API!/秒

任何改进都非常欢迎。


3

PHP,137字节

非常简单。解压缩需要很多字节:

<?=json_decode(gzinflate(substr(file_get_contents('http://api.stackexchange.com/2.2/posts/82619?site=codegolf'),10)),1)[items][0][score];

不打高尔夫球

print
  json_decode(
    gzinflate(
      substr(
        file_get_contents('http://api.stackexchange.com/2.2/posts/82619?site=codegolf'),
        10
      )
    ),
    1
  )
  [items][0][score];

2

PHP,121字节

没有api。

<?php preg_match('/t ">(.*)/',file_get_contents('http://codegolf.stackexchange.com/posts/82799/ajax-load'),$v);echo$v[1];

获取整个帖子,并使用正则表达式提取投票数。(不要用正则表达式解析HTML!)

取消高尔夫:

<?php
   preg_match('/t ">(.*)/',
              file_get_contents('http://codegolf.stackexchange.com/posts/82799/ajax-load'),
              $v);

   echo $v[1];

你能删除http:吗?
NoOneIsHere

@NoOne不,然后似乎不起作用。
nicael

1

05AB1E,45 个字节

•2íЕ’¸¸.‚‹º.ŒŒ/„¤/ÿ?€¼=ƒËŠˆ’žYì.w'ŒÂ¡θ',¡нþ

整个程序没有TIO,因为 .w访问Internet内置功能在TIO上不起作用。

说明:

我们首先创建URL,然后访问它:

2íЕ       # Push compressed integer 190437 (the id of this answer)
  ’¸¸.‚‹º.ŒŒ/„¤/ÿ?€¼=ƒËŠˆ’
            # Push dictionary string "api.stackexchange.com/posts/ÿ?site=codegolf",
            # where the `ÿ` is automatically filled with the 190437
    žY      # Push builtin "https://"
      ì     # And prepend it in front of the string
.w          # Go to this website, and get all its contents

在线尝试(不使用.w)。

之后,我们从JSON中提取分数:

'ŒÂ        '# Push dictionary string "score"
   ¡        # Split the website content on this
    θ       # Only leave the last item (of the two)
     ',¡   '# Split this string on ","
        н   # And this time leave the first item (i.e. `":10`)
         þ  # Only leave the digits of this string
            # (which is output implicitly as result)

在线尝试。

第二部分的等效10 字节替代方法可能是:

„ŒÂ‚¡       # Push dictionary string "score after"
     #      # Split it on spaces: ["score","after"]
      ¡     # Split the website content on these
       Ås   # Only leave the middle element
         þ  # Only leave the digits of this string
            # (which is output implicitly as result)

在线尝试。

请参阅我的05AB1E技巧(如何使用字典?如何压缩大整数部分以了解为什么•2íЕis 190437’¸¸.‚‹º.ŒŒ/„¤/ÿ?€¼=ƒËŠˆ’is "api.stackexchange.com/posts/ÿ?site=codegolf"'ŒÂis "score"„ŒÂ‚¡is "score after"

PS / EDIT:我意识到使用þI会永远不会得到负分数。;)

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.