Stack Exchange Counter Counter


40

Viết chương trình / hàm trả về số phiếu của câu trả lời Stack Exchange của chính nó tại thời điểm thực hiện.

  • Tuy nhiên, chương trình / chức năng của bạn có thể truy cập trang này ( codegolf.stackexchange.com/questions/82609 ) ngoài internet:
  • Chương trình / chức năng của bạn có thể không chấp nhận bất kỳ đầu vào của người dùng và
  • Không được phép sử dụng các công cụ rút ngắn URL
  • Chương trình / chức năng của bạn chỉ có thể sử dụng nguồn riêng của nó làm điểm tham chiếu cho số phiếu bầu của nó (ví dụ: không có chuỗi văn bản tham chiếu nào trong câu trả lời chứa trong đó nhưng không phải trong nguồn riêng của nó)
  • Chương trình / chức năng của bạn phải xuất số phiếu bầu của chính nó và chỉ có số phiếu bầu của riêng nó (ví dụ: không trả lại tất cả số phiếu trên trang này)

Đây là mã golf, mã ngắn nhất thắng.


perl -e'($_)=`curl -s http://api.stackexchange.com/2.2/posts/123?site=codegolf`;/score":(\d+)/&&print$1'Có vẻ như nó nên hoạt động, nhưng không. Nhưng có lẽ ai đó có thể sử dụng điều đó.
msh210

7
Đối với những người khác đang cố gắng và không sử dụng API: Nó phục vụ mã hóa gzip phản hồi, ngay cả khi máy khách không hỗ trợ.
Dennis

13
"Chương trình / chức năng của bạn chỉ có thể sử dụng nguồn của chính nó làm điểm tham chiếu cho số phiếu bầu của nó" Hơi khó hiểu. Điều này có nghĩa là các câu trả lời nên cố gắng tự xác định chỉ sử dụng kiến ​​thức về mã của riêng họ chứ không phải thông qua một cái gì đó như id bài đăng? Tôi không nghĩ rằng một quy tắc như vậy sẽ tốt, vì nó có thể bị phá vỡ bởi bất kỳ ai khác đăng một câu trả lời mới.
FryAmTheEggman

@FryAmTheEggman Tôi đã suy nghĩ một chút về việc phá vỡ các câu trả lời của người khác, và tôi thậm chí đã cân nhắc việc biến nó thành một KOTH nơi nguồn của bạn cố gắng làm suy yếu một câu trả lời khác, mặc dù cuối cùng dường như nó đang đẩy định dạng nhiều hơn tôi muốn ... Tôi đã thêm using its own sourcebit để ngăn người dùng thiết lập trang để dễ tìm hơn mà không cần đóng góp vào số byte của nó, trong trường hợp câu trả lời không sử dụng phương thức id bài.
Dendrobium

2
Được rồi, từ ngữ hơi kỳ lạ. Tôi sẽ đề nghị thay vì cho phép một số hành vi nhất định theo cách này, thay vào đó trực tiếp cấm sử dụng bất kỳ dịch vụ web nào ngoài các dịch vụ được cung cấp bởi stackexchange (trừ khi tôi hiểu lầm bạn). Như một lưu ý phụ, do bản chất của vấn đề hoàn chỉnh, không thể làm cho một cái gì đó như thế này không thể phá vỡ. Điều tốt nhất bạn có thể làm là làm cho nó không thể bị phá vỡ.
FryAmTheEggman

Câu trả lời:


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>

Lịch sử

  • -6 byte vì tôi đang sử dụng var datathay vì d.
  • -3 byte nhờ @ msh210
  • -13 byte nhờ @ CᴏɴᴏʀO'Bʀɪᴇɴ
  • -4 byte nhờ @ user6188402
  • -5 byte nhờ @Suever
  • -4 byte nhờ @RobW

Khuyến nghị sử dụng

  • Chạy đoạn trích.
  • Upvote.
  • Chạy đoạn trích và ngạc nhiên khi số lượng tăng lên một cách kỳ diệu.

Tiền thưởng !!

Ai không thích tiền thưởng?

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

Nhập ID vào phần thưởng và nó sẽ cho bạn biết điểm số.

Phần thưởng nhiều hơn nữa !! Chạy đoạn mã này để tự động chạy chương trình, upvote và chạy lại! (Yêu cầu đại diện> 15, auth). Nếu nó không hoạt động, xin vui lòng cho tôi biết.


2
poststhay vì answershttpthay vì httpslưu ba byte (hoặc có lẽ bạn có thể bỏ qua http:hoàn toàn?). (Chưa được kiểm tra.)
msh210

2
Bạn có thể sử dụng http://và nó sẽ chuyển hướng 301 thành https://Tốt hơn nữa, chỉ cần xóa http hoàn toàn//api.stackexchange.com...
Suever

8
jQuery không phải là một ngôn ngữ, cũng không phải là một thư viện sẵn có trong JS. Vì vậy, nếu bạn đang sử dụng điều đó, hãy bao gồm số byte của jQuery trong điểm số của bạn.
Tối ưu hóa

10
@Optimizer: Đây là cách thích hợp để làm điều đó: coi JS + jQuery thực sự là "ngôn ngữ" của chính nó. Xem bài đăng meta này: meta.codegolf.stackexchange.com/a/9279/12914
El'endia Starman

3
Sử dụng $.getthay vì $.getJSON. Loại nội dung của API là application/jsonvà jQuery sẽ tự động coi phản hồi là 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))

Lập trình viên thực sự không sử dụng XMLHttpRequest. Các lập trình viên thực sự sử dụng API Fetch .


1
Chà ... bạn đã đưa tôi đến đó. Tôi chưa bao giờ biết về API này!
Conor O'Brien

Tôi đang nhận được một lỗi fetchkhông được xác định
Anthony Phạm

1
@PythonMaster API Fetch chưa khả dụng trong tất cả các trình duyệt: caniuse.com/#feat=fetch
Jordan

21

Bash, 80 79 75 69 byte

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

Đối với mục đích ghi điểm, \tnên được thay thế bằng một ký tự TAB.

Điều này đòi hỏi w3m, phải có sẵn theo mặc định trên hầu hết các bản phân phối Linux.

Cảm ơn @NoOneIsHere cho -2 byte!

Làm thế nào nó hoạt động

w3mlà một trình duyệt web dòng lệnh. Nó truy vấn URL và (thông thường) hiển thị nội dung của nó ở định dạng có thể đọc được. Dưới đây, chúng tôi chỉ (ab) sử dụng nó để tránh những cuộc gọi đến zcatcurlsẽ đòi hỏi, vì SE phục vụ đáp ứng API gzip nén.

tr ,: \^Ithay thế tất cả dấu phẩy và dấu hai chấm bằng các tab, là cutdấu phân cách trường mặc định.

Cuối cùng, cut -f20loại bỏ tất cả mọi thứ trừ lĩnh vực thứ hai mươi, đó là số phiếu.


Hoặc --compressed, thậm chí còn dài hơn zcat.
Neil

9

JavaScript ES6, 175 165 160 145 byte

Đã lưu rất nhiều byte nhờ Trình tối ưu hóa và Dendrobium! Tất cả đều là bội số của năm!

Sử dụng javascript đơn giản. Ai cần những thư viện mới lạ? Lập trình viên thực sự sử dụngXMLHttpRequest()

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

Kiểm tra nó ra

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 Cảm ơn! Nhưng tại sao lại dùng prompt?
Conor O'Brien

@Optimizer Vì một số lý do, "g"tôi không làm việc như một lựa chọn cho tôi.
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"))cho -5 byte
Dendrobium

@Dendrobium ơi, đẹp quá. Tôi đã quên mấtwith
Conor O'Brien

@Optimizer tôi nhận đượcTypeError: response.split(...)[12] is undefined",
Conor O'Brien

7

bash + jq , 69 byte

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

Tôi đã sử dụng curlzcattrước đây; w3mđược lấy cảm hứng từ câu trả lời (tương tự nổi bật) của Dennis. Hóa ra jqtr/ cutcó cùng chi phí byte!


6

Lồi 0,5, 63 byte

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>

Điều này lấy điểm từ trang tìm kiếm thay vì API, cụ thể là từ truy vấn https://codegolf.stackexchange.com/search?q=rowestion:82714 . May mắn thay, inquestioncũng làm việc cho câu trả lời.

xác minh

$ 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

Làm thế nào nó hoạt động

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

Thật đáng kinh ngạc. Làm thế nào bạn thậm chí biết rằng ngôn ngữ này có thể làm điều này?
Adnan

3
Đó là một ngã ba CJam. Ban đầu tôi đã viết câu trả lời của mình bằng CJam (67 byte), nhưng sau đó tôi nhớ rằng Convex có tính năng nén chuỗi tích hợp.
Dennis

5

05AB1E , 89 87 81 byte

Cảm ơn Python ...

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

Sử dụng mã hóa 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))

Tôi thích thư viện này, vì nó tự động phân tích cú pháp JSON.


4

Julia, 128 107 byte

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

Đây là một hàm không có đầu vào và trả về số điểm của bài đăng này dưới dạng một chuỗi. Nó đòi hỏi Requestsgói phải được cài đặt.

Làm thế nào nó hoạt động:

  • get thực hiện một yêu cầu GET cho API SE
  • readall đọc các byte thô trong phản hồi và trả về một chuỗi
  • split chia chuỗi tại dấu hai chấm và dấu phẩy
  • Yếu tố thứ 20 của mảng kết quả là điểm của bài

Đã lưu 21 byte nhờ Dennis!


4

JavaScript (Node.js), 166 byte

-1 byte vì @ CᴏɴᴏʀO'Bʀɪᴇɴ đã dạy tôi cách đếm;)

-4 byte nhờ @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)))

Điều này có phần xấu hổ. Dang bạn SE để gzipping API của bạn! /S

Bất kỳ cải tiến đều rất đáng hoan nghênh.


3

PHP, 137 byte

Khá thẳng về phía trước. Việc giải nén mất rất nhiều byte:

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

Bị đánh cắp

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

Không có api.

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

Nhận toàn bộ bài đăng và trích xuất số phiếu bằng regex. (không phân tích HTML bằng regex!)

Ung dung:

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

   echo $v[1];

Bạn có thể loại bỏ http:?
NoOneIsHãy

@NoOne Không, không xuất hiện để làm việc sau đó.
nicael

1

05AB1E , 45 byte

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

Không có TIO cho toàn bộ chương trình, vì tích hợp .wđể truy cập internet không hoạt động trên TIO.

Giải trình:

Chúng tôi bắt đầu bằng cách tạo url và truy cập nó:

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

Hãy thử trực tuyến (không có .w).

Sau đó, chúng tôi trích xuất điểm từ 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)

Hãy thử trực tuyến.

Một thay thế 10 byte bằng nhau cho phần thứ hai này có thể là:

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

Hãy thử trực tuyến.

Xem 05AB1E mẹo này của tôi (phần Làm thế nào để sử dụng từ điển?Làm thế nào để nén các số nguyên lớn? ) Để hiểu tại sao •2íЕ190437, ’¸¸.‚‹º.ŒŒ/„¤/ÿ?€¼=ƒËŠˆ’"api.stackexchange.com/posts/ÿ?site=codegolf", 'ŒÂ"score", và „ŒÂ‚¡"score after" .

PS / EDIT: Tôi nhận ra rằng bằng cách sử dụng þTôi giả sử tôi sẽ không bao giờ bị điểm âm. ;)

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.