Réponse au ratio de vote

18

Cette question est inspirée par le fait que j'aime voir des questions avec un nombre égal de votes et de réponses ...


Voici donc un simple défi de pour vous tous:

Défi:

Étant donné un codegolf.stackexchangeidentifiant de question, affichez le rapport entre les votes de la question et le nombre de réponses (par exemple votes/answers).

Détails:

  • Vous pouvez accéder à Internet, mais vous ne pouvez accéder stackexchange.comqu'à ses différents sous-domaines. Vous ne pouvez pas utiliser de raccourcisseurs d'URL.

  • Vous pouvez prendre une entrée et donner une sortie dans n'importe quel format standard.

  • Vous devez afficher le rapport sous la forme d'un nombre décimal dans la base 10, avec au moins 4 {précis} chiffres après la décimale (les zéros peuvent être tronqués).

  • Si la question est sans réponse, votre programme peut produire un comportement indéfini.

  • Vous devez utiliser la scorequestion comme décompte des voix, voir ici .

Il s'agit du , le moins d'octets dans chaque langue gagne pour cette langue, le moins d'octets dans l'ensemble gagne.

Voici un exemple de programme en 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"])
Phénix socratique
la source
Le rapport a-t-il besoin d'au moins 4 chiffres décimaux après le point décimal même s'ils sont nuls? Par exemple 41/4 = 10,25 ou 10,2500
pizzapants184
@ pizzapants184 10,25 est très bien
Socratic Phoenix
Et si le défi n'est pas répondu? Alors le rapport serait infini?
M. Xcoder
Voulez-vous dire score ou le total des votes sur la question?
AdmBorkBork
@ Mr.Xcoder dans ce cas, le comportement indéfini est correct
Socratic Phoenix

Réponses:

10

JavaScript (ES6), 103 102 octets

Doit être exécuté à partir du niveau racine de api.stackexchange.com. Renvoie un Promiseobjet contenant le résultat.

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

Si le fait de l'exécuter à partir d'un chemin spécifique est autorisé, cela devient 92 à 90 octets.

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

Essayez-le

URL complète ajoutée pour lui permettre de fonctionner ici.

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>

Hirsute
la source
7
Remplacez i=>(j=i.items[0])par ({items:[j]})=>jpour enregistrer un octet.
kamoroso94
Belle astuce, merci, @ kamoroso94. Je dois m'en souvenir.
Shaggy
8

Stratos , 40 octets

-4 octets grâce à Shaggy

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

Essayez!

Stratos est spécialisé dans le .

Explication:

Le code se décompresse comme suit:

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

À partir de la première ligne, Stratos évalue les dyades de droite à gauche.

f"api.stackexchange.com/questions/%?site=codegolf"r"items"@0signifie "évaluer la dyade @avec l'argument de gauche f"api.stackexchange.com/questions/%?site=codegolf"r"items"et l' argument de droite 0. @obtient le nième élément d'un tableau JSON.

Pour évaluer f"api.stackexchange.com/questions/%?site=codegolf"r"items", nous allons ensuite évaluer la dyade ravec l'argument de gauche f"api.stackexchange.com/questions/%?site=codegolf"et l' argument de droite"items" . robtient le tableau JSON avec le nom spécifié.

Ensuite, nous devrons évaluer f"api.stackexchange.com/questions/%?site=codegolf". Tout d'abord, %est remplacé par l'entrée.fsignifie "obtenir le contenu de cette URL".

Maintenant, nous pouvons passer à la deuxième ligne. La nouvelle ligne signifie "ajouter ce que nous avons évalué à la liste des arguments implicites"

Ensuite, nous évaluons s(obtenir une chaîne dans un objet JSON avec un certain nom) avec {et "answer_count".{prend un élément de la pile d'arguments implicites, le renvoie et l'ajoute à la pile.

Ensuite, nous ajoutons la sortie de cela à la pile d'arguments implicites.

Pour évaluer ⁰s"score"/, nous appliquons la dyade /(division) à⁰s"score" et un élément de la pile d'arguments implicites.

Pour évaluer, ⁰s"score"nous obtenons la chaîne "score"de l'objet JSON du 0e élément de la pile d'arguments implicite.

Maintenant, la sortie de /est imprimée et le programme se termine.

Okx
la source
Économisez 4 octets en abandonnant la version de l'API ( 2.2/).
Shaggy
1
@Shaggy Je ne savais pas que la version de l'API n'était pas requise, merci. Pas de
barrage
5

R + jsonlite , 111 octets

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

Lien R-violon

jsonlite est une belle bibliothèque de conversion JSON <-> R qui fonctionne assez bien. Je n'étais pas sur le point de jouer au golf avec un analyseur JSON pour R ...

Giuseppe
la source
Vous pouvez enregistrer un octet en utilisant le httpprotocole. De plus, je suppose 142729que cela ne devrait pas être codé en dur là-dedans?
Shaggy
@Shaggy bon appel, merci. J'ai copié et collé trop vite.
Giuseppe
4

T-SQL, 64 54 octets

Il est rare que SQL puisse battre (la plupart) d'autres langues! Au lieu de l'URL de l'API, je suis allé directement à l' explorateur de données Exchange Stack :

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

le ##i## SQL n'est pas standard, c'est le format de Stack Exchange pour demander une entrée.

Notez que la source de l'explorateur de données n'est mise à jour que la nuit, les valeurs ne sont donc pas actuelles.

Va jeter une division par zéro erreur sur les questions sans réponse.

Modifier : enregistré 10 octets en multipliant par 1,0 au lieu d'une explicite CONVERTà FLOAT.

BradC
la source
peut battre les autres, mais pas tous :)
Okx
Oh maaan, j'avais une autre solution mais j'étais à l'école donc je n'ai jamais fini de la poster ... Ma réponse est-elle trop similaire à la tienne? Dois-je supprimer le mien?
2017 totalement humain
@icrieverytim Ha, yep ressemble à peu près à la même requête, bien que je viens de modifier le mien pour économiser 10 octets de plus.
BradC
@BradC J'ai édité ma réponse dans une réponse Mathematica lol.
2017 totalement humain
3

PowerShell , 130 octets

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

Effectue une Iéquation nvoke- Web Rcontre l'URL, obtient .contentcelle - ci, fait un ConvertFrom-Jsonde ce contenu et obtient le .itemsde cet objet JSON. Stocke cela dans $aet sort le .scorecomme numérateur. Le dénominateur est le .answer_count. Cette valeur est laissée sur le pipeline et la sortie est implicite.

Si la question est sans réponse, cela devrait générer une erreur "Diviser par zéro".

AdmBorkBork
la source
3

Japt , 83 82 octets

Je voulais essayer ceci pour voir comment cela fonctionnerait, vu que Japt ne peut pas l'accomplir nativement. Pour l'essentiel, tout cela consiste à evalcréer une version compressée de ma solution JS . Comme Japt est JS, nous pouvons exiger que cela soit exécuté à partir du niveau racine de api.stackexchange.comet renvoyer également un Promiseobjet contenant le résultat.

Ox`fet®("quÀËs/{U}?ÐÒ=¬¸golf").È(r=>r.js()).È(i=>(j=i.ems[0]).sÖ/j.s³r_Öt)
  • Le voir
  • Essayez-le - les octets supplémentaires dans cette version sont pris en compte par l'inclusion de //api.stackexchange.com/dans l'URL et de console.logsorte que vous pouvez réellement le voir fonctionner
Hirsute
la source
1
o0 Pourquoi avez-vous fait du code un lien? Il dérange même l'affichage du nombre d'octets du script utilisateur lol. i.imgur.com/SO2zgAy.png
totalement humain
2

Mathematica, 124 octets

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

Mathematica a un type de données appelé Ruleet il me dérange. : P

totalement humain
la source
1

Python 3 + requêtes, 149 octets

-1 octet merci à M. Xcoder.

from requests import*
u=get('http://api.stackexchange.com/questions/%s?site=codegolf'%input()).json()['items'][0]
print(u['score']/u['answer_count'])
totalement humain
la source
Le lien est vers Python 2. Btw, il lance une erreur à la fois en Python 2 et Python 3 (sur TIO).
Pas d'accès Internet sur les whoops TIO. Je viens d'utiliser TIO pour le formatage de la réponse lol.
2017 totalement humain
Je pense que (pour l'instant) httpsuffit.
M. Xcoder
125 octets
LyricLy
0

PHP, 167 octets

<?$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;

Fissure ultra-rapide à cela. Enregistrer en tant que fichier et exécuter dans le terminal comme suit:

php -f file.php 143083

Cela pourrait être un moyen de réduire cela.

Orphée
la source