स्टैक एक्सचेंज वोट काउंटर


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

7
API का उपयोग करने की कोशिश करने वाले और असफल होने वाले हर किसी के लिए: यह प्रतिक्रिया gzip को एन्कोड किया गया है, भले ही क्लाइंट इसका समर्थन न करे।
डेनिस

13
"आपका कार्यक्रम / कार्य केवल अपने स्वयं के स्रोत का उपयोग अपनी वोट गणना के संदर्भ बिंदु के रूप में कर सकता है" थोड़ा भ्रमित है। क्या इसका मतलब यह है कि उत्तर को केवल अपने कोड के ज्ञान का उपयोग करके स्वयं को पहचानने का प्रयास करना चाहिए, न कि पोस्ट आईडी जैसी किसी चीज़ के माध्यम से? मुझे नहीं लगता कि ऐसा कोई नियम अच्छा होगा, क्योंकि यह किसी और द्वारा तोड़ा जा सकता है।
FryAmTheEggman

@FryAmTheEggman मैंने अन्य लोगों के जवाबों को तोड़ने में थोड़ा सोचा था, और मैंने इसे एक KOTH बनाने पर भी विचार किया, जहां आपका स्रोत एक अन्य उत्तर को कम करने की कोशिश करता है, हालांकि अंत में मुझे लगता है कि मैं जितना चाहता था प्रारूप को धक्का दे रहा था ... मैंने using its own sourceउपयोगकर्ताओं को पृष्ठ को सेट करने से रोकने के लिए बिट जोड़ा, यह आसान है कि वह अपनी बाइट की गिनती में योगदान किए बिना आसानी से मिल जाए, इस मामले में कि उत्तर आईडी विधि का उपयोग नहीं करता है।
डेंड्रोबियम

2
ठीक है, शब्दांकन थोड़ा अजीब है। मैं इस तरह से कुछ व्यवहार की अनुमति देने के बजाय सिफारिश करूंगा, इसके बजाय सीधे किसी भी वेब सेवाओं का उपयोग करने पर प्रतिबंध लगाने के अलावा, स्टैटेक्सचेंज द्वारा आपूर्ति की गई (जब तक कि मैंने आपको गलत नहीं समझा है)। साइड नोट के रूप में, संपूर्णता समस्या की प्रकृति के कारण, इस तरह के अटूट को कुछ बनाना संभव नहीं है। सबसे अच्छा आप यह कर सकते हैं कि यह टूटने के लिए अनुमानित है।
FryAmTheEggman

जवाबों:


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>

इतिहास

  • -6 बाइट्स क्योंकि मैं dataइसके बजाय var का उपयोग कर रहा था d
  • -3 बाइट्स @ msh210 के लिए धन्यवाद
  • -13 बाइट्स @ CᴏɴᴏʀO'B to की बदौलत
  • -4 बाइट्स @ user6188402 पर धन्यवाद
  • -5 बाइट्स @ शुक्रिया के लिए धन्यवाद
  • -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>

आईडी को बोनस में दर्ज करें और यह आपको स्कोर बताएगा।

और भी अधिक बोनस !! इस स्निपेट को प्रोग्राम को स्वचालित रूप से चलाने, अपवोट और फिर से चलाने के लिए चलाएं! (आवश्यक प्रतिनिधि 15, अधिकार)। यदि यह काम नहीं करता है, तो कृपया मुझे बताएं।


2
postsके बजाय answersऔर httpके बजाय httpsतीन बाइट्स की बचत होती है (या शायद आप छोड़ सकते हैं http:पूरी तरह?)। (
अप्रकाशित

2
आप इसका उपयोग कर सकते हैं http://और यह 301 https://तक बेहतर तरीके से पुनर्निर्देशित कर देगा , बस http को पूरी तरह से हटा दें//api.stackexchange.com...
स्वेवर

8
jQuery एक भाषा नहीं है, और न ही JS में एक इनबिल्ट लाइब्रेरी है। इसलिए यदि आप इसका उपयोग कर रहे हैं, तो अपने स्कोर में jQuery के बाइट काउंट को भी शामिल करें।
ऑप्टिमाइज़र

10
@Optimizer: यह इसे करने का उचित तरीका है: प्रभावी रूप से अपनी "भाषा" होने के लिए JS + jQuery पर विचार करें। इस मेटा पोस्ट को देखें: meta.codegolf.stackexchange.com/a/9279/12914
El'endia Straan

3
के $.getबजाय का उपयोग करें $.getJSON। एपीआई की सामग्री प्रकार है application/json, और jQuery स्वतः प्रतिक्रिया को JSON के रूप में मानेगा।
रॉब डब्ल्यू

24

जावास्क्रिप्ट ईएस 6, 107 बाइट्स

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

वास्तविक प्रोग्रामर उपयोग नहीं करते हैं XMLHttpRequest। वास्तविक प्रोग्रामर Fetch API का उपयोग करते हैं ।


1
अच्छा ... तुम मुझे वहाँ ले गए। मैं इस एपीआई के बारे में कभी नहीं जानता था!
कॉनर ओ'ब्रायन

मुझे एक त्रुटि मिल रही है जो fetchपरिभाषित नहीं है
एंथोनी फाम

1
@PythonMaster Fetch API अभी तक सभी ब्राउज़रों में उपलब्ध नहीं है: caniuse.com/#feat=fetch
जॉर्डन

21

बैश, 80 79 75 69 बाइट्स

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

स्कोरिंग उद्देश्यों के लिए, \tएक TAB चरित्र के साथ प्रतिस्थापित किया जाना चाहिए।

इसके लिए आवश्यकता होती है w3m, जो कि अधिकांश लिनक्स डिस्ट्रोस पर डिफ़ॉल्ट रूप से उपलब्ध होनी चाहिए।

-2 बाइट्स के लिए @NoOneIsHere को धन्यवाद!

यह काम किस प्रकार करता है

w3mएक कमांड लाइन वेब ब्राउज़र है। यह URL पर सवाल करता है और (सामान्य रूप से) इसकी सामग्री को पठनीय प्रारूप में प्रदर्शित करता है। यहाँ, हम बस (ab) इसका उपयोग उस कॉल से बचने के लिए करेंगे zcatजिसकी curlआवश्यकता होगी, क्योंकि SE API API gzip- संपीड़ित करता है।

tr ,: \^Iटैब के साथ सभी कॉमा और कॉलोनों को प्रतिस्थापित करता है, जो कि cutडिफॉल्ट फील्ड डिलिमिटर हैं।

अंत में, cut -f20हर चीज को हटा देता है लेकिन बीसवां क्षेत्र, जो वोट की गिनती है।


या --compressed, जो इससे भी अधिक लंबा है zcat
नील

9

जावास्क्रिप्ट ईएस 6, 175 165 160 145 बाइट्स

ऑप्टिमाइज़र और डेंड्रोबियम के लिए सेवित लोटा बाइट्स धन्यवाद! वे सभी पांच के गुणक हैं!

सादे ओल 'जावास्क्रिप्ट का उपयोग करना। उन नए पुस्तकालयों की जरूरत किसे है? असली प्रोग्रामर का उपयोग करें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?
कॉनर ओ'ब्रायन

@ किसी कारण से, "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
कॉनर ओ'ब्रायन

@ ओप्टिमाइज़र मुझे मिलता हैTypeError: response.split(...)[12] is undefined",
कॉनर ओ'ब्रायन

7

bash + jq , 69 बाइट्स

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

मैंने इस्तेमाल किया curlऔर zcatपहले; w3mडेनिस के (हड़ताली समान) उत्तर से प्रेरित है। यह पता चला है jqऔर tr/ 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>

यह एपीआई के बजाय विशेष रूप से क्वेरी 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 (67 बाइट्स) में अपना जवाब लिखा था, लेकिन फिर मुझे याद आया कि कॉनवेक्स में बिल्ट-इन स्ट्रिंग कंप्रेशन है।
डेनिस

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 वां तत्व पोस्ट का स्कोर है

डेनिस की बदौलत 21 बाइट बच गईं!


4

जावास्क्रिप्ट (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)))

यह कुछ हद तक शर्मनाक है। आप अपने एपीआई gzipping के लिए एसई डांग! / 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];

Ungolfed

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 बाइट्स

आपी के बिना।

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

पूरे पद को प्राप्त करता है और रेगेक्स के साथ वोट मायने रखता है। (रेगेक्स के साथ HTML को पार्स न करें!)

Ungolfed:

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

   echo $v[1];

क्या आप निकाल सकते हैं http:?
NoOneIsHere

@ नो, नहीं, तब काम नहीं करता है।
निकेल

1

05AB1E , 45 बाइट्स

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

पूरे कार्यक्रम के लिए कोई TIO नहीं, क्योंकि .wइंटरनेट तक पहुंचने के लिए बनाया गया 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"

पीएस / ईडीआईटी: मुझे लगता है कि þमैं यह मानकर कि मैं एक नकारात्मक अंक प्राप्त नहीं करूंगा। ;)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.