Penghitung Pemilihan Stack Exchange


40

Tulis program / fungsi yang mengembalikan penghitungan suara jawaban Stack Exchange sendiri pada saat eksekusi.

  • Program / fungsi Anda dapat mengakses halaman ini ( codegolf.stackexchange.com/questions/82609 ) dari internet, namun:
  • Program / fungsi Anda mungkin tidak menerima input pengguna dan
  • Penggunaan penyingkat URL tidak diizinkan
  • Program / fungsi Anda hanya dapat menggunakan sumbernya sendiri sebagai titik referensi untuk penghitungan suaranya (misalnya: tidak ada referensi string teks dalam jawaban yang terkandung tetapi tidak dalam sumbernya sendiri)
  • Program / fungsi Anda harus menampilkan penghitungan suaranya sendiri dan hanya penghitungan suaranya sendiri (misalnya: tidak mengembalikan semua penghitungan suara di halaman ini)

Ini adalah kode-golf, kode terpendek yang menang.


perl -e'($_)=`curl -s http://api.stackexchange.com/2.2/posts/123?site=codegolf`;/score":(\d+)/&&print$1'Sepertinya itu harus bekerja, tetapi tidak. Tapi mungkin seseorang bisa menggunakannya.
msh210

7
Untuk semua orang yang mencoba dan gagal menggunakan API: Ini melayani respon yang dikodekan gzip, bahkan jika klien tidak mendukungnya.
Dennis

13
"Program / fungsi Anda hanya dapat menggunakan sumbernya sendiri sebagai titik referensi untuk penghitungan suaranya" Agak membingungkan. Apakah ini berarti bahwa jawaban harus mencoba mengidentifikasi diri mereka hanya menggunakan pengetahuan kode mereka sendiri, dan tidak melalui sesuatu seperti id posting? Saya tidak berpikir bahwa aturan seperti itu akan baik, karena dapat dilanggar oleh orang lain yang memposting jawaban baru.
FryAmTheEggman

@FryAmTheEggman Saya benar-benar berpikir untuk memecahkan jawaban orang lain, dan saya bahkan mempertimbangkan menjadikan ini KOTH di mana sumber Anda mencoba untuk merusak jawaban lain, meskipun pada akhirnya yang sepertinya mendorong format lebih dari yang saya inginkan ... Saya menambahkan using its own sourcebit untuk mencegah pengguna mengatur halaman agar lebih mudah menemukan dirinya sendiri tanpa berkontribusi pada jumlah byte-nya, dalam hal jawabannya tidak menggunakan metode post id.
Dendrobium

2
Baiklah, kata-katanya agak aneh. Saya akan merekomendasikan daripada membiarkan perilaku tertentu dengan cara ini, alih-alih langsung melarang menggunakan layanan web apa pun selain yang disediakan oleh stackexchange (kecuali saya salah paham dengan Anda). Sebagai catatan, karena sifat dari masalah kelengkapan, tidak mungkin untuk membuat sesuatu seperti ini tidak bisa dipecahkan. Yang terbaik yang dapat Anda lakukan adalah membuatnya tidak masuk akal untuk dilanggar.
FryAmTheEggman

Jawaban:


39

jQuery + JavaScript, 85 byte

$.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>

Sejarah

  • -6 byte karena saya menggunakan var databukan d.
  • -3 byte terima kasih kepada @ msh210
  • -13 byte terima kasih kepada @ CᴏɴᴏʀO'Bʀɪᴇɴ
  • -4 byte terima kasih kepada @ user6188402
  • -5 byte terima kasih kepada @Suever
  • -4 byte terima kasih kepada @RobW

Penggunaan yang disarankan

  • Jalankan cuplikan.
  • Suara positif.
  • Jalankan cuplikan, dan kagum saat jumlahnya meningkat secara ajaib.

Bonus !!

Siapa yang tidak suka bonus?

$.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>

Masukkan ID ke dalam bonus dan itu akan memberi tahu Anda skor.

Bonus lebih banyak lagi !! Jalankan cuplikan ini untuk secara otomatis menjalankan program, upvote, dan jalankan lagi! (Membutuhkan perwakilan> 15, auth). Jika tidak berhasil, tolong beri tahu saya.


2
postsbukannya answersdan httpbukannya httpsmenyimpan tiga byte (atau mungkin Anda bisa menghilangkan http:sama sekali?). (Belum diuji.)
msh210

2
Anda dapat menggunakan http://dan itu akan mengarahkan ulang 301 ke https://Better yet, cukup hapus http sama sekali//api.stackexchange.com...
Suever

8
jQuery bukan bahasa, juga pustaka inbuilt di JS. Jadi, jika Anda menggunakannya, sertakan juga jumlah byte jQuery dalam skor Anda.
Pengoptimal

10
@Optimizer: Ini adalah cara yang tepat untuk melakukannya: pertimbangkan JS + jQuery untuk secara efektif menjadi "bahasa" sendiri. Lihat posting meta ini: meta.codegolf.stackexchange.com/a/9279/12914
El'endia Starman

3
Gunakan $.getsebagai ganti $.getJSON. Jenis konten API adalah application/json, dan jQuery akan secara otomatis memperlakukan respons sebagai JSON.
Rob W

24

JavaScript ES6, 107 byte

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

Pemrogram sungguhan tidak menggunakan XMLHttpRequest. Pemrogram sungguhan menggunakan Fetch API .


1
Nah ... Anda membuat saya di sana. Saya tidak pernah tahu tentang API ini!
Conor O'Brien

Saya mendapatkan kesalahan yang fetchtidak didefinisikan
Anthony Pham

1
@PythonMaster Fetch API belum tersedia di semua browser: caniuse.com/#feat=fetch
Jordan

21

Bash, 80 79 75 69 byte

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

Untuk tujuan penilaian, \tharus diganti dengan karakter TAB.

Ini membutuhkan w3m, yang seharusnya tersedia secara default di sebagian besar distro Linux.

Terima kasih kepada @NoOneIsHere untuk -2 byte!

Bagaimana itu bekerja

w3madalah browser web baris perintah. Itu pertanyaan URL dan (biasanya) menampilkan kontennya dalam format yang dapat dibaca. Di sini, kami hanya (ab) menggunakannya untuk menghindari panggilan ke zcatyang curlakan membutuhkan, karena SE melayani respons API yang dikompresi gzip.

tr ,: \^Imengganti semua koma dan titik dua dengan tab, yang merupakan cutpembatas bidang default.

Akhirnya, cut -f20hapus semuanya kecuali bidang kedua puluh, yang merupakan penghitungan suara.


Atau --compressed, yang bahkan lebih lama dari itu zcat.
Neil

9

JavaScript ES6, 175 165 160 145 byte

Lotsa byte tersimpan berkat Pengoptimal dan Dendrobium! Mereka semua adalah kelipatan lima!

Menggunakan javascript ol sederhana. Siapa yang butuh perpustakaan bermodel baru itu? Gunakan programmer nyataXMLHttpRequest()

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

Uji itu

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 Terima kasih! Tapi mengapa digunakan prompt?
Conor O'Brien

@Optimizer Untuk beberapa alasan, "g"tidak berfungsi sebagai opsi bagi saya.
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"))untuk -5 byte
Dendrobium

@Dendrobium Oh, bagus. Saya lupa tentangwith
Conor O'Brien

@Optimizer yang saya dapatkanTypeError: response.split(...)[12] is undefined",
Conor O'Brien

7

bash + jq , 69 byte

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

Saya menggunakan curldan zcatsebelumnya; w3mterinspirasi oleh jawaban Dennis (sangat mirip). Ternyata jqdan tr/ cutmemiliki biaya byte yang sama!


6

Convex 0,5, 63 bytes

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>

Ini mengambil skor dari halaman pencarian alih-alih API, khususnya dari permintaan https://codegolf.stackexchange.com/search?q=inquestion:82714 . Untung,inquestion juga berfungsi untuk jawaban.

Verifikasi

$ 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

Bagaimana itu bekerja

"..."Ü           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.

Ini luar biasa. Bagaimana Anda tahu bahwa bahasa ini dapat melakukan ini?
Adnan

3
Itu adalah garpu CJam. Saya awalnya menulis jawaban saya dalam CJam (67 byte), tetapi kemudian saya ingat bahwa Convex memiliki kompresi string bawaan.
Dennis

5

05AB1E , 89 87 81 byte

Terima kasih Python ...

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

Menggunakan pengkodean CP-1252 .


4

MATLAB, 103 byte

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

4

JavaScript (Node.js + Unirest ), 123 byte

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

Saya suka perpustakaan ini, karena secara otomatis mem-parsing JSON.


4

Julia, 128 107 byte

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

Ini adalah fungsi yang tidak mengambil input dan mengembalikan skor posting ini sebagai string. Ini membutuhkan Requestspaket yang harus diinstal.

Bagaimana itu bekerja:

  • get membuat permintaan GET ke API SE
  • readall membaca byte mentah dalam respons dan mengembalikan string
  • split memisahkan string pada titik dua dan koma
  • Elemen ke-20 dari array yang dihasilkan adalah skor posting

Disimpan 21 byte berkat Dennis!


4

JavaScript (Node.js), 166 Bytes

-1 byte karena @ CᴏɴᴏʀO'Bʀɪᴇɴ mengajari saya cara menghitung;)

-4 byte terima kasih kepada @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)))

Ini agak memalukan. Berani SE untuk gzipping API Anda! / s

Setiap perbaikan sangat disambut.


3

PHP, 137 byte

Cukup lurus ke depan. Pengompresan membutuhkan banyak byte:

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

Tidak disatukan

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 byte

Tanpa api.

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

Dapatkan seluruh pos dan ekstrak penghitungan suara dengan regex. (jangan parsing HTML dengan regex!)

Tidak Disatukan:

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

   echo $v[1];

Bisakah Anda menghapus http:?
NoOneIsHere

@NoOne Tidak, tampaknya tidak berfungsi saat itu.
nicael

1

05AB1E , 45 byte

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

Tidak ada TIO untuk keseluruhan program, karena .wbawaan untuk mengakses internet tidak berfungsi pada TIO.

Penjelasan:

Kami mulai dengan membuat url, dan mengaksesnya:

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

Cobalah online (tanpa .w).

Setelah itu, kami mengekstrak skor dari 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)

Cobalah online.

Alternatif 10 byte yang setara untuk bagian kedua ini bisa berupa:

„ŒÂ‚¡       # 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)

Cobalah online.

Lihat ini 05AB1E ujung tambang (bagian Cara menggunakan kamus? Dan Cara kompres bilangan bulat besar? ) Untuk memahami mengapa •2íЕadalah 190437, ’¸¸.‚‹º.ŒŒ/„¤/ÿ?€¼=ƒËŠˆ’adalah "api.stackexchange.com/posts/ÿ?site=codegolf", 'ŒÂadalah "score", dan „ŒÂ‚¡ini "score after".

PS / EDIT: Saya menyadari bahwa dengan menggunakan þSaya menganggap saya tidak akan pernah mendapatkan skor negatif. ;)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.