スタック交換投票カウンター


40

実行時に独自のStack Exchange回答の投票数を返すプログラム/関数を作成します。

  • ただし、プログラム/関数はインターネットからこのページ(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

7
APIを使用しようとして失敗した他のすべての人に:クライアントがサポートしていない場合でも、エンコードされた応答gzipを提供します。
デニス

13
「あなたのプログラム/関数は、投票数への参照点としてそれ自身のソースのみを使用するかもしれません」少し混乱しています。これは、回答が自分のコードの知識のみを使用して自分自身を識別しようとすることを意味し、投稿IDのようなものを通してではありませんか?新しい答えを投稿する他の誰かによって破られる可能性があるため、そのようなルールは良いとは思いません。
FryAmTheEggman

@FryAmTheEggman私は他の人々の答えを壊すことに少し考えました。あなたのソースが別の答えを弱体化しようとするKOTHにすることも考えましたが、最終的には私が望んでいた以上にフォーマットをプッシュしているように見えました... using its own source答えがpost idメソッドを使用しない場合に、ユーザーがバイトカウントに寄与せずに自分自身を見つけやすくするためにページを設定できないようにするビットを追加しました。
デンドロビウム

2
さて、言葉遣いは少し奇妙です。この方法で特定の動作を許可する代わりに、stackexchangeによって提供されるWebサービス以外のWebサービスの使用を直接禁止することをお勧めします(誤解しない限り)。補足説明として、完全性の問題の性質により、このようなものを壊れないようにすることはできません。あなたができる最善のことは、壊れることを信じられないようにすることです。
FryAmTheEggman

回答:


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バイトのdata代わりにvarを使用していたためd
  • @ msh210のおかげで-3バイト
  • @CᴏɴᴏʀO'Bʀɪᴇɴのおかげで-13バイト
  • @ user6188402のおかげで-4バイト
  • @Sueverのおかげで-5バイト
  • @RobWのおかげで-4バイト

推奨される使用法

  • スニペットを実行します。
  • 賛成票。
  • スニペットを実行し、数が魔法のように増加するのに驚かれます。

ボーナス!!

ボーナスが嫌いな人はいますか?

$.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を入力すると、スコアが表示されます。

さらにボーナス!! このスニペットを実行して、プログラムを自動的に実行し、投票して、再度実行します!(rep> 15、authが必要です)。うまくいかない場合は教えてください。


2
posts代わりにanswershttp代わりにhttps3バイトを節約します(または、http:完全に省略できますか?)。(テストなし)
msh210

2
あなたはhttp://それを使用することができ、それはhttps://まだより良いに301リダイレクトし、ちょうどhttpを完全に削除するだけ//api.stackexchange.com...
です-Suever

8
jQueryは言語ではなく、JSの組み込みライブラリでもありません。したがって、それを使用している場合は、jQueryのバイトカウントもスコアに含めてください。
オプティマイザー

10
@Optimizer:これは適切な方法です。JS+ jQueryが独自の「言語」であると考えてください。このメタ投稿を参照してください: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については知りませんでした!
コナーオブライエン

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ディストリビューションでデフォルトで使用可能になっている必要があります。

-2バイトの@NoOneIsHereに感謝します!

使い方

w3mコマンドラインWebブラウザーです。URLを照会し、(通常)読み取り可能な形式でコンテンツを表示します。ここで、私たちは(AB)はへの呼び出しを避けるためにそれを使用するzcatことがcurlSEのAPIレスポンスgzipで圧縮を提供するため、必要になります。

tr ,: \^Iすべてのコンマとコロンを、cutデフォルトのフィールド区切り文字であるタブに置き換えます。

最後に、cut -f2020番目のフィールド(投票数)以外のすべてを削除します。


または--compressed、それよりもさらに長いzcat
ニール

9

JavaScriptのES6、175の 165 160 145バイト

OptimizerとDendrobiumのおかげでlotsaバイトを節約できました!それらはすべて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"私のオプションとして機能しません。
コナーオブライエン

with(new XMLHttpRequest)(open("get","//api.stackexchange.com/2.2/posts/82614?site=codegolf"),onload=_=>alert(response.items[0].score),send(responseType="json"))-5バイトの場合
デンドロビウム

@デンドロビウムああ、いいもの。忘れていたwith
コナーオブライエン

@Optimizerを取得TypeError: response.split(...)[12] is undefined",
コナーオブライエン

7

bash + jq、69バイト

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

私は以前使用curlしましたzcatw3mデニスの(印象的に似た)答えに触発されています。それは判明し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番目の要素は、投稿のスコアです

デニスのおかげで21バイト節約されました!


4

JavaScript(Node.js)、166バイト

-1バイト。@CᴏɴᴏʀO'Bʀɪᴇɴがカウント方法を教えてくれたからです;)

@NoOneIsHereのおかげで-4バイト

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)))

これはやや恥ずかしいです。APIをgzipで圧縮してくれてありがとう / s

どんな改善も大歓迎です。


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いいえ、その時は動作しないようです。
ニカエル

1

05AB1E、45 バイト

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

.wインターネットにアクセスするためのビルトインがTIOで機能しないため、プログラム全体に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)

オンラインでお試しください。

この2番目の部分の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íЕ190437’¸¸.‚‹º.ŒŒ/„¤/ÿ?€¼=ƒËŠˆ’ある"api.stackexchange.com/posts/ÿ?site=codegolf"'ŒÂある"score"、と„ŒÂ‚¡あります"score after"

PS / EDIT:を使用þすることで、決して負のスコアを取得しないと思います。;)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.