스택 교환 투표 카운터


40

실행시 자체 스택 교환 답변의 투표 수를 반환하는 프로그램 / 함수를 작성하십시오.

  • 그러나 귀하의 프로그램 / 기능은 인터넷 에서이 페이지 ( 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 2016 년

7
API 사용을 시도하고 실패한 다른 모든 사람에게 : 클라이언트가 지원하지 않더라도 응답 gzip으로 인코딩됩니다.
Dennis

13
"귀하의 프로그램 / 기능은 자체 소스 만 투표 수의 기준점으로 사용할 수 있습니다."약간 혼동됩니다. 이것은 답변이 게시물 ID와 같은 것이 아닌 자신의 코드 지식 만 사용하여 자신을 식별하려고 시도한다는 것을 의미합니까? 나는 새로운 규칙을 게시하는 다른 사람이 위반 할 수 있기 때문에 그러한 규칙이 좋을 것이라고 생각하지 않습니다.
FryAmTheEggman 2016 년

@FryAmTheEggman 나는 다른 사람들의 대답을 깨뜨리는 것에 대해 약간의 생각을 가졌으며, 심지어 소스가 다른 대답을 훼손하려고하는 KOTH로 만드는 것을 고려했습니다. using its own source답이 post id 메소드를 사용하지 않는 경우 사용자가 바이트 수에 기여하지 않고 쉽게 찾을 수 있도록 페이지를 설정하지 못하게 하는 비트를 추가 했습니다.
Dendrobium 2016 년

2
좋아, 문구는 좀 이상합니다. 이런 식으로 특정 동작을 허용하는 대신 스택 교환에서 제공하는 웹 서비스 이외의 웹 서비스 사용을 직접 금지하는 것이 좋습니다 (내가 오해하지 않는 한). 부수적으로, 완전성 문제의 본질로 인해 이와 같은 것을 깨뜨리는 것은 불가능합니다. 당신이 할 수있는 최선은 그것이 깨지기 어려운 것을 만드는 것입니다.
FryAmTheEggman 2016 년

답변:


39

jQuery + 자바 스크립트, 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>

역사

  • data대신 var 를 사용했기 때문에 -6 바이트 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대신에 answers그리고 http대신에 https3 바이트 를 저장합니다 (또는 아마도 생략 할 수 http:있습니까?). (테스트되지
않음

2
당신은 사용할 수 http://있고 그것은 https://더 나은 아직 301로 리디렉션됩니다 , 그냥 http를 제거하십시오//api.stackexchange.com...
Suever

8
jQuery는 언어가 아니며 JS의 내장 라이브러리도 아닙니다. 따라서 이것을 사용하는 경우 점수에 jQuery의 바이트 수를 포함하십시오.
Optimizer

10
@Optimizer : 이것이 올바른 방법입니다 : JS + jQuery를 효과적으로 "언어"라고 생각하십시오. 이 메타 포스트를보십시오 : meta.codegolf.stackexchange.com/a/9279/12914
El'endia Starman

3
$.get대신에 사용하십시오 $.getJSON. API의 컨텐츠 유형은입니다 application/json. jQuery는 응답을 JSON으로 자동 처리합니다.
Rob W

24

자바 스크립트 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정의되지 않은 오류가 발생합니다
Anthony Pham

1
@PythonMaster Fetch API를 아직 모든 브라우저에서 사용할 수있는 것은 아닙니다 : caniuse.com/#feat=fetch
Jordan

21

배쉬, 80 79 75 69 바이트

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

점수를 매기기 위해 \tTAB 문자로 교체해야합니다.

이를 위해서는 w3m대부분의 Linux 배포판에서 기본적으로 사용할 수 있어야합니다.

-2 바이트를위한 @NoOneIsHere에 감사합니다!

작동 원리

w3m명령 줄 웹 브라우저입니다. URL을 쿼리하고 일반적으로 해당 내용을 읽을 수있는 형식으로 표시합니다. 여기, 우리는 단지 (AB)의 호출을 방지하기 위해 사용 zcat하는이 curl필요 SE는 API 응답 gzip으로 압축 된 역할을하기 때문에.

tr ,: \^I모든 쉼표와 콜론을 cut기본 필드 구분 기호 인 탭으로 바꿉니다 .

마지막으로 cut -f20투표 수인 20 번째 필드를 제외한 모든 항목을 제거합니다.


또는 --compressed보다 깁니다 zcat.
Neil

9

자바 스크립트 ES6, 175 165 160 145 바이트

Optimizer와 Dendrobium 덕분에 lota 바이트가 절약되었습니다! 그들은 모두 5의 배수입니다!

일반 ol '자바 스크립트를 사용합니다. 새로운 도서관이 필요한 사람은 누구입니까? 실제 프로그래머 사용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합니까?
Conor O'Brien

@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

@ 덴드로 비움 아, 좋아. 나는 잊었다with
Conor O'Brien

@Optimizer I getTypeError: response.split(...)[12] is undefined",
Conor O'Brien

7

bash + jq , 69 바이트

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

내가 사용 curl하고 zcat전에; w3mDennis의 (놀랍게도 비슷한) 답변에서 영감을 얻었습니다. 그것은 밝혀 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.

이것은 놀랍다. 이 언어가 이것을 할 수 있다는 것을 어떻게 알았습니까?
Adnan

3
CJam 포크입니다. 나는 원래 CJam (67 바이트)으로 답을 썼다. 그러나 Convex에 내장 문자열 압축이 있다는 것을 기억했다.
Dennis

5

05AB1E , 89 87 81 바이트

고마워 파이썬 ...

•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

자바 스크립트 (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

자바 스크립트 (Node.js), 166 바이트

@ CᴏɴᴏʀO'Bʀɪᴇɴ가 나에게 계산하는 방법을 가르쳐 주었기 때문에 -1 바이트

@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를 gzipping 해 주셔서 감사합니다. /에스

모든 개선은 매우 환영합니다.


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:?
NoOneIsHere6

@NoOne 아니요, 그때 작동하지 않는 것 같습니다.
nicael

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)

온라인으로 사용해보십시오.

이 두 번째 부분에 대한 동일한 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".

추신 : 편집을 사용하여 þ 결코 부정적인 점수를 얻지 못할 것이라는 있습니다. ;)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.