Risposta al rapporto di voto


18

Questa domanda si ispira al fatto che adoro vedere le domande con uguale voto e conteggio delle risposte ...


Quindi ecco una semplice sfida di per tutti voi:

Sfida:

Dato un codegolf.stackexchangeID domanda, genera il rapporto tra i voti della domanda e il numero di risposte (ad es votes/answers.).

specifiche:

  • Puoi accedere a Internet, ma puoi accedere solo stackexchange.come ai suoi vari sottodomini. Non è possibile utilizzare accorciatori di URL.

  • È possibile accettare input e fornire output in qualsiasi formato standard.

  • È necessario generare il rapporto come numero decimale nella base 10, con almeno 4 cifre {accurate} dopo il decimale (gli zeri possono essere troncati).

  • Se la domanda non ha risposta, il programma potrebbe produrre un comportamento indefinito.

  • Dovresti usare la scoredomanda come numero di voti, vedi qui .

Questo è , il numero minimo di byte in ogni lingua vince per quella lingua, il numero minimo di byte in totale vince.

Ecco un programma di esempio 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"])

Il rapporto necessita di almeno 4 cifre decimali dopo il punto decinale anche se sono zero? Ad esempio 41/4 = 10.25 o 10.2500
pizzapants184

@ pizzapants184 10.25 va bene
Socratic Phoenix,

Cosa succede se la sfida non riceve risposta? Quindi il rapporto sarebbe infinito?
Mr. Xcoder,

Intendi punteggio o voti totali sulla domanda?
AdmBorkBork,

@ Mr.Xcoder in quel caso, il comportamento indefinito va bene
Socratic Phoenix

Risposte:


10

JavaScript (ES6), 103 102 byte

Deve essere eseguito dal livello principale di api.stackexchange.com. Restituisce un Promiseoggetto contenente il risultato.

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

Se è richiesto che sia eseguito da un percorso specifico è consentito che diventa 92 90 byte.

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

Provalo

URL completo aggiunto per consentirne il funzionamento qui.

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>


7
Sostituisci i=>(j=i.items[0])con ({items:[j]})=>jper salvare un byte.
kamoroso94,

Bel trucco, grazie, @ kamoroso94. Dovrò ricordare quello.
Shaggy,

8

Stratos , 40 byte

-4 byte grazie a Shaggy

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

Provalo!

Stratos è specializzato in domande di .

Spiegazione:

Il codice si decomprime nel modo seguente:

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

A partire dalla prima riga, Stratos valuta le diade da destra a sinistra.

f"api.stackexchange.com/questions/%?site=codegolf"r"items"@0significa "valuta la diade @con l'argomento di sinistra f"api.stackexchange.com/questions/%?site=codegolf"r"items"e l' argomento di destra 0. @ottiene l' ennesimo elemento di un array JSON.

Per valutare f"api.stackexchange.com/questions/%?site=codegolf"r"items", valuteremo successivamente la diade rcon l'argomento di sinistra f"api.stackexchange.com/questions/%?site=codegolf"e l' argomento di destra "items". rottiene l'array JSON con il nome specificato.

Successivamente, dovremo valutare f"api.stackexchange.com/questions/%?site=codegolf". Innanzitutto, %viene sostituito con l'input. fsignifica "ottieni i contenuti di questo URL".

Ora possiamo passare alla seconda riga. La nuova riga significa "aggiungi ciò che abbiamo valutato all'elenco degli argomenti impliciti"

Successivamente, valutiamo s(ottieni la stringa nell'oggetto JSON con un determinato nome) con {e "answer_count". {prende un elemento dallo stack degli argomenti impliciti, lo restituisce e lo aggiunge nuovamente allo stack.

Quindi, aggiungiamo l'output di quello allo stack di argomenti implicito.

Per valutare ⁰s"score"/, stiamo applicando la diade /(divide) ⁰s"score"e un elemento dallo stack di argomenti implicito.

Per valutare ⁰s"score"stiamo ottenendo la stringa "score"dall'oggetto JSON dall'elemento 0 nello stack di argomenti implicito.

Ora, l'output di /viene stampato e il programma termina.


Salva 4 byte abbandonando la versione API ( 2.2/).
Shaggy,

1
@Shaggy Non ho realizzato che la versione dell'API non era richiesta, grazie. Non cancellando 44: P
Okx,

5

R + jsonlite , 111 byte

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

Collegamento a violino

jsonlite è una libreria di conversione JSON <-> R che funziona abbastanza bene. Non avevo intenzione di giocare a golf con un parser JSON per R ...


È possibile salvare un byte utilizzando il httpprotocollo. Inoltre, immagino 142729che non dovrebbe essere codificato lì dentro?
Shaggy,

@Shaggy buona chiamata, grazie. Ho copiato e incollato troppo velocemente.
Giuseppe,

4

T-SQL, 64 54 byte

È raro che SQL possa battere (la maggior parte) altre lingue! Invece dell'URL dell'API sono andato direttamente a Stack Exchange Data Explorer :

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

L' ##i##SQL non è standard, è il formato di Stack Exchange che richiede input.

Si noti che l'origine di Esplora dati viene aggiornata solo di notte, quindi i valori non sono correnti.

Genererà un divario per zero errore su domande senza risposta.

Modifica : salvato 10 byte moltiplicando per 1,0 anziché esplicito CONVERTin FLOAT.


può battere gli altri, ma non tutti :)
Okx,

Oh maaan, avevo un'altra soluzione ma ero a scuola, quindi non ho mai finito per pubblicarla ... La mia risposta è troppo simile alla tua? Devo cancellare il mio?
totalmente umano il

@icrieverytim Ha, sì, sembra praticamente la stessa query, anche se ho appena modificato il mio per salvare altri 10 byte.
BradC,

@BradC Ho modificato la mia risposta in una risposta Mathematica lol.
totalmente umano il

3

PowerShell , 130 byte

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

Esegue un Iequest nvoke- Web Rrispetto all'URL, ottiene il relativo .content, esegue uno ConvertFrom-Jsondi quel contenuto e ottiene l' .itemsoggetto JSON. Memorizza quello dentro $aed estrae il .scorecome numeratore. Il denominatore è il .answer_count. Tale valore viene lasciato sulla pipeline e l'output è implicito.

Se la domanda è senza risposta, questo dovrebbe generare un errore "Dividi per zero".


3

Japt , 83 82 byte

Volevo provare questo per vedere come avrebbe funzionato, visto che Japt non può realizzarlo nativamente. In sostanza, tutto ciò che sta facendo è evalcreare una versione compressa della mia soluzione JS . Poiché Japt è JS, possiamo richiedere che questo venga eseguito dal livello principale di api.stackexchange.come restituisca anche un Promiseoggetto contenente il risultato.

Ox`fet®("quÀËs/{U}?ÐÒ=¬¸golf").È(r=>r.js()).È(i=>(j=i.ems[0]).sÖ/j.s³r_Öt)
  • Visualizza
  • Provalo : i byte extra in questa versione sono giustificati dall'inclusione //api.stackexchange.com/nell'URL e in console.logmodo che tu possa effettivamente vederlo funzionare

1
o0 Perché hai reso il codice un link? Si scherza persino con il display lol del conteggio dei byte dell'utente. i.imgur.com/SO2zgAy.png
totalmente umano

2

Mathematica, 124 byte

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

Mathematica ha un tipo di dati chiamato Rulee mi confonde. : P


1

Python 3 + richieste, 149 byte

-1 byte grazie a Mr. Xcoder.

from requests import*
u=get('http://api.stackexchange.com/questions/%s?site=codegolf'%input()).json()['items'][0]
print(u['score']/u['answer_count'])

Il collegamento è a Python 2. A proposito, genera un errore sia in Python 2 che in Python 3 (su TIO).

Nessun accesso a Internet su TIO whoops. Ho appena usato TIO per la formattazione della risposta lol.
totalmente umano il

Penso che (per ora) sia httpsufficiente.
Mr. Xcoder,


0

PHP, 167 byte

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

Crepa turbo-veloce a questo. Salvare come file ed eseguire nel terminale in questo modo:

php -f file.php 143083

Potrebbe essere un modo per ridurre questo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.