Answer to Vote Ratio

18

Diese Frage ist inspiriert von der Tatsache, dass ich es liebe, Fragen mit gleicher Stimme und gleicher Beantwortung zu sehen ...


Hier ist eine einfache Herausforderung für euch:

Herausforderung:

Geben Sie bei gegebener codegolf.stackexchangeFragen-ID das Verhältnis zwischen den Stimmen der Frage und der Anzahl der Antworten aus (z votes/answers. B. ).

Besonderheiten:

  • Sie können auf das Internet zugreifen, aber Sie dürfen nur auf stackexchange.comdie verschiedenen Subdomains zugreifen . Sie dürfen keine URL-Kürzungen verwenden.

  • Sie können Eingaben und Ausgaben in jedem Standardformat vornehmen.

  • Sie müssen das Verhältnis als Dezimalzahl in Basis 10 mit mindestens 4 {genauen} Nachkommastellen ausgeben (Nullen können abgeschnitten sein).

  • Wenn die Frage nicht beantwortet wird, kann Ihr Programm undefiniertes Verhalten erzeugen.

  • Sie sollten das scorevon der Frage als Stimmenzahl verwenden, siehe hier .

Dies ist , die wenigsten Bytes in jeder Sprache gewinnen für diese Sprache, die wenigsten Bytes insgesamt gewinnen insgesamt.

Hier ist ein Beispielprogramm in Python 3 + requests:

import requests
import json

id = input("id> ")
url = "https://api.stackexchange.com/2.2/questions/" + id + "?site=codegolf"
content = requests.get(url).text
question = json.loads(content)["items"][0]

print(float(question["score"]) / question["answer_count"])
Sokratischer Phönix
quelle
Benötigt das Verhältnis mindestens 4 Dezimalstellen nach dem Komma, auch wenn sie Null sind? ZB 41/4 = 10,25 oder 10,2500
Pizzapants184
@ pizzapants184 10.25 ist in Ordnung
Socratic Phoenix
Was ist, wenn die Herausforderung nicht beantwortet wird? Dann wäre das Verhältnis unendlich?
Mr. Xcoder
Meinst du Punktzahl oder Gesamtstimmenzahl bei der Frage?
AdmBorkBork
@ Mr.Xcoder in diesem Fall ist undefiniertes Verhalten in Ordnung
Socratic Phoenix

Antworten:

10

JavaScript (ES6), 103 bis 102 Byte

Muss von der Root-Ebene von ausgeführt werden api.stackexchange.com. Gibt ein PromiseObjekt zurück, das das Ergebnis enthält.

n=>fetch(`questions/${n}?site=codegolf`).then(r=>r.json()).then(({items:[j]})=>j.score/j.answer_count)

Wenn es erforderlich ist, dass es von einem bestimmten Pfad ausgeführt wird , werden 92 bis 90 Bytes zugelassen.

n=>fetch(n+`?site=codegolf`).then(r=>r.json()).then(({items:[j]})=>j.score/j.answer_count)

Versuch es

Vollständige URL hinzugefügt, damit es hier funktioniert.

f=
n=>fetch(`//api.stackexchange.com/questions/${n}?site=codegolf`).then(r=>r.json()).then(({items:[j]})=>j.score/j.answer_count)
onchange=_=>f(+i.value).then(t=>o.innerText=t)
<input id=i type=number><pre id=o>

Zottelig
quelle
7
Ersetzen Sie i=>(j=i.items[0])durch ({items:[j]})=>j, um ein Byte zu speichern.
Kamoroso94
Netter Trick, danke, @ kamoroso94. Ich muss mich daran erinnern.
Shaggy
8

Stratos , 40 Bytes

-4 Bytes dank Shaggy

f"¹⁵s/%²"r"⁷s"@0
{s"answer_⁰"
⁰s"score"/

Versuch es!

Stratos ist spezialisiert auf Fragen.

Erläuterung:

Der Code wird wie folgt dekomprimiert:

f"api.stackexchange.com/questions/%?site=codegolf"r"items"@0
{s"answer_count"
⁰s"score"/

Ab der ersten Zeile wertet Stratos die Dyaden von rechts nach links aus.

f"api.stackexchange.com/questions/%?site=codegolf"r"items"@0bedeutet "evaluiere die Dyade @mit dem linken Argument f"api.stackexchange.com/questions/%?site=codegolf"r"items"und dem rechten Argument 0. @Erhält das n-te Element eines JSON-Arrays.

Um zu bewerten f"api.stackexchange.com/questions/%?site=codegolf"r"items", werden wir als nächstes die Dyade rmit dem linken Argument f"api.stackexchange.com/questions/%?site=codegolf"und dem rechten Argument bewerten "items". rRuft das JSON-Array mit dem angegebenen Namen ab.

Als nächstes müssen wir auswerten f"api.stackexchange.com/questions/%?site=codegolf". Erstens %wird durch die Eingabe ersetzt. fbedeutet "den Inhalt dieser URL erhalten".

Jetzt können wir zur zweiten Zeile übergehen. Der Zeilenumbruch bedeutet "das, was wir ausgewertet haben, zur Liste der impliziten Argumente hinzufügen".

Als nächstes evaluieren wir s(erhalten String im JSON-Objekt mit einem bestimmten Namen) mit{ und aus"answer_count" . {Nimmt ein Element aus dem impliziten Argumentstapel, gibt es zurück und fügt es dem Stapel hinzu.

Dann fügen wir die Ausgabe davon dem impliziten Argumentstapel hinzu.

Zur Bewertung ⁰s"score"/wenden wir die Dyade an/ (Division) auf ⁰s"score"und ein Element aus dem impliziten Argumentstapel an.

Zur Bewertung bekommen ⁰s"score"wir den String"score" aus dem JSON-Objekt aus dem 0. Element im impliziten Argumentstapel.

Jetzt wird die Ausgabe von /gedruckt und das Programm beendet.

Okx
quelle
Sparen Sie 4 Bytes, indem Sie die API-Version ( 2.2/) löschen .
Shaggy
1
@Shaggy Wusste nicht, dass die API-Version nicht benötigt wurde, danke. Nicht
streichen
5

R + Jsonlite , 111 Bytes

function(n,x=jsonlite::fromJSON(sprintf('http://api.stackexchange.com/questions/%s?site=codegolf',n))$i)x$s/x$a

R-Geige Link

jsonlite ist eine nette JSON <-> R-Konvertierungsbibliothek, die recht gut funktioniert. Ich wollte keinen JSON-Parser für R ...

Giuseppe
quelle
Sie können ein Byte mit dem httpProtokoll speichern . Ich schätze, 142729sollte da nicht hartcodiert sein?
Shaggy
@ Shaggy guten Anruf, danke. Ich habe zu schnell kopiert und eingefügt.
Giuseppe
4

T-SQL, 64 54 Bytes

Es ist selten, dass SQL (die meisten) anderen Sprachen schlagen kann! Anstelle der API-URL bin ich direkt zum Stack Exchange Data Explorer gegangen :

SELECT 1.0*Score/AnswerCount FROM Posts WHERE Id=##i##

Dies ##i##ist kein Standard-SQL, sondern das Format von Stack Exchange, um zur Eingabe aufzufordern.

Beachten Sie, dass die Daten-Explorer-Quelle nur nachts aktualisiert wird, sodass die Werte nicht aktuell sind.

Wirft bei Fragen ohne Antwort einen Fehler durch Division durch Null.

Edit : 10 Bytes durch Multiplikation mit 1.0 anstelle eines expliziten CONVERTto gespeichert FLOAT.

BradC
quelle
kann andere schlagen, aber nicht alle :)
Okx
Oh maaan, ich hatte eine andere Lösung, aber ich war in der Schule, also habe ich sie nie veröffentlicht ... Ist meine Antwort Ihrer zu ähnlich? Soll ich meine löschen?
Totalhuman
@icrieverytim Ha, yep sieht aus wie fast die gleiche Abfrage, obwohl ich meine gerade bearbeitet habe, um 10 weitere Bytes zu sparen.
BradC
@BradC Ich habe meine Antwort in eine Mathematica-Antwort umgewandelt. Lol.
Totalhuman
3

PowerShell , 130 Byte

($a=(ConvertFrom-Json(iwr("http://api.stackexchange.com/questions/"+$args+"?site=codegolf")).content).items).score/$a.answer_count

Führt einen Invoke- Web- RTest für die URL durch, .contentruft deren ConvertFrom-JsonInhalt ab, führt einen Inhalt aus und ruft .itemsdas JSON-Objekt ab. Speichert das in $aund zieht das .scoreals Zähler heraus. Der Nenner ist der .answer_count. Dieser Wert bleibt in der Pipeline und die Ausgabe ist implizit.

Wenn die Frage unbeantwortet bleibt, sollte dies den Fehler "Division durch Null" auslösen.

AdmBorkBork
quelle
3

Japt , 83 82 Bytes

Wollte dies versuchen, um zu sehen, wie es funktionieren würde, da Japt es von Haus aus nicht schaffen kann. Im Wesentlichen handelt es sich dabei nur evalum eine komprimierte Version meiner JS-Lösung . Wie Japt ist JS dann können wir verlangen , dass diese von der Root - Ebene durchgeführt werden api.stackexchange.comund auch ein Rück PromiseObjekt das Ergebnis enthält.

Ox`fet®("quÀËs/{U}?ÐÒ=¬¸golf").È(r=>r.js()).È(i=>(j=i.ems[0]).sÖ/j.s³r_Öt)
  • Schau es dir an
  • Probieren Sie es aus - die zusätzlichen Bytes in dieser Version werden durch die Aufnahme //api.stackexchange.com/in die URL berücksichtigt, console.logsodass Sie sehen können, wie es tatsächlich funktioniert
Zottelig
quelle
1
o0 Warum hast du den Code zu einem Link gemacht? Sogar die Anzeige der Byteanzahl des Userscripts wird durcheinander gebracht. Lol. i.imgur.com/SO2zgAy.png
totalhuman
2

Mathematica, 124 Bytes

N@("score"/.(u="items"/.Import["http://api.stackexchange.com/questions/"<>#<>"?site=codegolf","JSON"]))/("answer_count"/.u)&

Mathematica hat einen Datentyp namens Ruleund verwirrt mich. : P

total menschlich
quelle
1

Python 3 + -Anfragen, 149 Byte

-1 Byte danke an Herrn Xcoder.

from requests import*
u=get('http://api.stackexchange.com/questions/%s?site=codegolf'%input()).json()['items'][0]
print(u['score']/u['answer_count'])
total menschlich
quelle
Der Link ist zu Python 2. Übrigens wird sowohl in Python 2 als auch in Python 3 (unter TIO) ein Fehler ausgegeben.
Kein Internetzugang bei TIO whoops. Ich habe gerade TIO für die Formatierung der Antwort verwendet lol.
Totalhuman
Ich denke, das reicht (vorerst) httpaus.
Mr. Xcoder
125 Bytes
LyricLy
0

PHP, 167 Bytes

<?$f=json_decode(gzdecode(file_get_contents('https://api.stackexchange.com/2.2/questions/'.$argv[1].'?site=codegolf')))->items[0];echo $f->score/$f->answer_count;

Turboschneller Riss dabei. Als Datei speichern und im Terminal wie folgt ausführen:

php -f file.php 143083

Könnte ein Weg sein, dies zu reduzieren.

Orpheus
quelle