Respuesta a la relación de voto

18

Esta pregunta está inspirada en el hecho de que me encanta ver preguntas con igual voto y conteo ...


Así que aquí hay un simple desafío para todos ustedes:

Desafío:

Dada una codegolf.stackexchangeidentificación de pregunta, genera la relación entre los votos de la pregunta y el número de respuestas (por ejemplo votes/answers).

Detalles específicos:

  • Puede acceder a Internet, pero solo puede acceder stackexchange.comy sus diversos subdominios. No puede usar acortadores de URL.

  • Puede tomar entrada y dar salida en cualquier formato estándar.

  • Debe generar la razón como un número decimal en base 10, con al menos 4 dígitos {precisos} después del decimal (los ceros pueden truncarse).

  • Si la pregunta no tiene respuesta, su programa puede producir un comportamiento indefinido.

  • Debe usar la scorepregunta como conteo de votos, consulte aquí .

Este es el , menos bytes en cada idioma gana para ese idioma, menos bytes en general gana en general.

Aquí hay un programa de muestra 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"])
Fénix Socrático
fuente
¿La relación necesita al menos 4 dígitos decimales después del punto decimal incluso si son cero? Por ejemplo, 41/4 = 10.25 o 10.2500
pizzapants184
@ pizzapants184 10.25 está bien
Socratic Phoenix
¿Qué pasa si el desafío no se responde? Entonces la relación sería infinita?
Sr. Xcoder
¿Te refieres a puntaje o votos totales en la pregunta?
AdmBorkBork
@ Mr.Xcoder en ese caso, el comportamiento indefinido está bien
Socratic Phoenix

Respuestas:

10

JavaScript (ES6), 103 102 bytes

Debe ejecutarse desde el nivel raíz de api.stackexchange.com. Devuelve un Promiseobjeto que contiene el resultado.

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

Si se requiere que se ejecute desde una ruta específica, se convierte en 92 90 bytes.

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

Intentalo

URL completa agregada para permitir que funcione aquí.

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>

Lanudo
fuente
77
Reemplace i=>(j=i.items[0])con ({items:[j]})=>jpara guardar un byte.
kamoroso94
Buen truco, gracias, @ kamoroso94. Tendré que recordar eso.
Shaggy
8

Stratos , 40 bytes

-4 bytes gracias a Shaggy

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

¡Intentalo!

Stratos se especializa en preguntas de .

Explicación:

El código se descomprime a lo siguiente:

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

A partir de la primera línea, Stratos evalúa las díadas de derecha a izquierda.

f"api.stackexchange.com/questions/%?site=codegolf"r"items"@0significa "evaluar la díada @con el argumento de la izquierda y el argumento de f"api.stackexchange.com/questions/%?site=codegolf"r"items"la derecha 0. @Obtiene el enésimo elemento de una matriz JSON.

Para evaluar f"api.stackexchange.com/questions/%?site=codegolf"r"items", evaluaremos a continuación la díada rcon el argumento de la izquierda y el argumento de f"api.stackexchange.com/questions/%?site=codegolf"la derecha "items".robtiene la matriz JSON con el nombre especificado.

A continuación, tendremos que evaluar f"api.stackexchange.com/questions/%?site=codegolf". Primero, %se reemplaza con la entrada. fsignifica "obtener el contenido de esta URL".

Ahora, podemos pasar a la segunda línea. La nueva línea significa "agregar lo que evaluamos a la lista de argumentos implícitos"

A continuación, evaluamos s(obtener una cadena en un objeto JSON con un nombre determinado) con {y "answer_count". {toma un elemento de la pila de argumentos implícitos, lo devuelve y lo agrega nuevamente a la pila.

Luego, agregamos el resultado de eso a la pila de argumentos implícitos.

Para evaluar ⁰s"score"/, estamos aplicando la díada /(división) ⁰s"score"y un elemento de la pila de argumentos implícitos.

Para evaluar ⁰s"score", estamos obteniendo la cadena "score"del objeto JSON del elemento 0 en la pila de argumentos implícitos.

Ahora, la salida de /se imprime y el programa termina.

Okx
fuente
Ahorre 4 bytes abandonando la versión API ( 2.2/).
Shaggy
1
@Shaggy No se dio cuenta de que la versión API no era necesaria, gracias. No
tachando
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

Enlace R-Fiddle

jsonlite es una buena biblioteca de conversión JSON <-> R que funciona bastante bien. No iba a jugar un analizador JSON para R ...

Giuseppe
fuente
Puede guardar un byte utilizando el httpprotocolo. Además, supongo 142729que no debería estar codificado allí.
Shaggy
@ Shaggy buena llamada, gracias. Copié y pegué demasiado rápido.
Giuseppe
4

T-SQL, 64 54 bytes

¡Es raro que SQL pueda vencer a (la mayoría) de otros idiomas! En lugar de la URL de la API, fui directamente al Explorador de datos de Stack Exchange :

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

El ##i##SQL no es estándar, es el formato de Stack Exchange para solicitar la entrada.

Tenga en cuenta que la fuente del explorador de datos solo se actualiza todas las noches, por lo que los valores no son actuales.

Lanzará un error dividir por cero en las preguntas sin respuestas.

Editar : guardado 10 bytes multiplicando por 1.0 en lugar de un explícito CONVERTa FLOAT.

BradC
fuente
puede vencer a otros, pero no a todos :)
Okx
Oh maaan, tenía otra solución pero estaba en la escuela, así que nunca terminé publicando ... ¿Mi respuesta es muy similar a la tuya? ¿Debo eliminar el mío?
totalmente humano
@icrieverytim Ha, sí, parece la misma consulta, aunque acabo de editar la mía para ahorrar 10 bytes más.
BradC
@BradC Edité mi respuesta en una respuesta de Mathematica jajaja.
totalmente humano
3

PowerShell , 130 bytes

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

Realiza una Ibúsqueda nvoke- Web Rcontra la URL, obtiene la .contentmisma, realiza una ConvertFrom-Jsonde ese contenido y obtiene la .itemsde ese objeto JSON. Almacena eso $ay lo saca .scorecomo numerador. El denominador es el .answer_count. Ese valor se deja en la tubería y la salida es implícita.

Si la pregunta no tiene respuesta, esto debería arrojar un error "Dividir por cero".

AdmBorkBork
fuente
3

Japt , 83 82 bytes

Quería probar esto para ver cómo funcionaría, ya que Japt no puede lograrlo de forma nativa. Esencialmente, todo lo que está haciendo es evalcrear una versión comprimida de mi solución JS . Como Japt es JS, entonces podemos exigir que esto se ejecute desde el nivel raíz de api.stackexchange.comy también devolver un Promiseobjeto que contenga el resultado.

Ox`fet®("quÀËs/{U}?ÐÒ=¬¸golf").È(r=>r.js()).È(i=>(j=i.ems[0]).sÖ/j.s³r_Öt)
  • Mirarlo
  • Pruébelo : los bytes adicionales en esta versión se explican por la inclusión de //api.stackexchange.com/en la URL y de console.logmodo que realmente pueda verlo funcionando
Lanudo
fuente
1
o0 ¿Por qué has convertido el código en un enlace? Incluso se mete con la pantalla de conteo de bytes de usercript jajaja. i.imgur.com/SO2zgAy.png
totalmente humano
2

Mathematica, 124 bytes

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

Mathematica tiene un tipo de datos llamado Ruley me confunde muchísimo. :PAG

totalmente humano
fuente
1

Python 3 + solicitudes, 149 bytes

-1 byte gracias al Sr. Xcoder.

from requests import*
u=get('http://api.stackexchange.com/questions/%s?site=codegolf'%input()).json()['items'][0]
print(u['score']/u['answer_count'])
totalmente humano
fuente
El enlace es a Python 2. Por cierto, arroja un error tanto en Python 2 como en Python 3 (en TIO).
No hay acceso a internet en TIO whoops. Acabo de usar TIO para el formato de respuesta lol.
totalmente humano
Creo que (por ahora) es httpsuficiente.
Sr. 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;

Grieta turbo rápida en esto. Guarde como un archivo y ejecútelo en la terminal así:

php -f file.php 143083

Podría ser una forma de reducir esto.

Orfeo
fuente