Calcola la reputazione di un utente


12

Sfida

Dato il nome di un utente (non ID, abbiamo già quella sfida), ha prodotto la sua reputazione attuale e il suo ID.

Ingresso

L'input sarà una singola stringa che è il nome utente dell'utente. Si può presumere che questo utente esista.

Produzione

L'output sarà di due numeri interi su STDOUT o STDERR che sarà la reputazione dell'utente e l'ID dell'utente. Devono essere in quell'ordine specifico e possono essere prodotti in qualsiasi formato ragionevole

specifiche

  • L'output della reputazione non deve essere scaduto per più di 10 minuti.
  • Il tuo programma non può generare errori durante la normale esecuzione
  • Si applicano scappatoie standard (incluso nessun accorciatore di URL)
  • Se esiste più di un utente con quel nome utente, è possibile generare le statistiche di qualsiasi utente con quel nome utente. Questo è anche il motivo per cui devi generare l'ID.
  • La reputazione da emettere è la reputazione dell'utente su PPCG, non il punteggio totale della rete.

Il sito API di Stack Exchange è disponibile qui . Puoi leggere la documentazione da lì.


Collegare l'API di scambio di stack.
Magic Octopus Urn

@carusocomputing Lo farà, grazie. Devo anche riparare qualcosa perché apparentemente più utenti possono avere lo stesso nome.
HyperNeutrino,

Suppongo che questa regola si applichi? Inoltre, puoi confermare che è la reputazione totale dell'utente su PPCG piuttosto che su SE?
Arnauld,

@Arnauld dirò di sì. E confermo che è solo la reputazione di PPCG. Lo chiarirò nella sfida. Grazie.
HyperNeutrino,

Bene, ho fatto questa voce T-SQL ma non soddisfa la regola 1 in quanto non è abbastanza aggiornata :(
ʰᵈˑ

Risposte:


1

Bash + JQ , 93 byte

Ripristino della versione a 87 byte, poiché non gestiva correttamente le risposte multiutente.

golfed

curl "api.stackexchange.com/users?site=codegolf&inname=$1"|zcat|jq ..\|numbers|sed -n 4p\;12p

Produrrà ID e reputazione del primo utente su righe separate.

Come funziona ?

1) curl + zcatvengono utilizzati per recuperare la risposta API formattata JSON

2) jq ..|numberssvolgerà JSON in modo ricorsivo e stamperà tutti i valori numerici, uno per riga

...
1   35
2   8
3   2
4   3315904
5   1487694154
6   1492702469
7   4565
8   82
9   82
10  60
11  20
12  6275
...

(i numeri di riga sono stati aggiunti nlsolo a scopo illustrativo)

3) Quindi usiamo sedper cercare il primo account_ide reputation, in base ai loro numeri di riga assoluti

Test

>./reputation zeppelin
3315904
6275

6

JavaScript (ES6), 145 139 136 125 123 117 byte

a=>fetch(`//api.stackexchange.com/users?site=codegolf&filter=!)LgZAmQ6ls0hH&inname=`+a).then(_=>_.text()).then(alert)

6 byte salvati grazie a Shaggy e 6 byte grazie a Cyoce.

Non sono sicuro che dovrebbe generare tutti gli utenti con lo stesso nome o solo uno di essi; questo codice li genera tutti.

f=a=>fetch(`//api.stackexchange.com/users?site=codegolf&filter=!)LgZAmQ6ls0hH&inname=`+a).then(_=>_.text()).then(alert)

f("tom")


Battimi. Salva 6 byte con "//api.stackexchange.com/users?site=codegolf&inname="+a.
Shaggy,

Nota: sembra che tu restituisca più risultati di quanto tu (possibilmente) dovresti. Ho cercato di ottenere il feedback di HyperNeutrino su ciò che è appropriato, ma il tuo risultato restituisce valori per gli utenti il ​​cui nome contiene solo l'input, non esattamente corrisponde. Quindi il tuo risultato migliore è per "Tom Carpenter" e non per "Tom".
Dason,

Sarebbe possibile sostituire _=>alert(_)con solo alert?
Cyoce,

@Dason Sì, questo è un punto su cui non ero sicuro; Cambierò la mia risposta quando sarà confermata.
Tom,

@Cyoce Ha funzionato, grazie!
Tom,

4

Python 2, 178 169 149 byte

Userei le richieste per questo:

from requests import*
a=get("http://api.stackexchange.com/users?site=codegolf&inname="+input()).json()["items"][0]
print a["reputation"],a["user_id"]

Fondamentalmente, utilizza l'API dello stack per recuperare le informazioni come JSON e quindi ottiene l'elemento "reputazione". Inoltre, l' API presentava molti parametri extra, anch'io li ho rasati.

Contributi generosi da: carusocomputing, ElPedro, Malivil, Keerthana Prabhakaran


["items"][0]questo ottiene solo il primo risultato, nel caso di più utenti ignorerà comunque gli extra se non sbaglio.
Magic Octopus Urn,

import requests as re r.get(...salva 4 byte.
ElPedro,

@ElPedro lo ha aggiornato, grazie per l'input.
Neil,

1
Se riorganizzi i parametri in modo che legga ?site=codegolf&inname="puoi salvare 3 byte (+ "")
Malivil

1
L'uso from requests import*;a=get()riduce un byte!
Keerthana Prabhakaran,

3

Groovy, 144 156 byte

{new groovy.json.JsonSlurper().parse(new URL("http://api.stackexchange.com/2.2/users/?site=codegolf&inname=$it")).items.collect{[it.user_id,it.reputation]}}

Chiusura anonima.

EDIT: dimenticato di utilizzare l'importazione di groovy.json.per JSON Slurper + 14 byte.

Esempio di output [[UserID, Reputation],...]:

[[20260, 60695], [20469, 21465], [3103, 8856], [41805, 7783], [134, 6829], [42643, 5622], [45268, 4389], [10732, 3976], [32, 3635], [53745, 3392], [10801, 3216], [49362, 2418], [2104, 2160], [3563, 1988], [18280, 1491], [742, 1466], [59487, 1362], [19039, 1330], [56642, 1133], [9522, 951], [34438, 886], [1744, 793], [52661, 778], [18187, 768], [11426, 751], [26850, 711], [178, 637], [29451, 631], [19700, 616], [15862, 601]]

8
JsonSlurper ... o_O
HyperNeutrino,

slurrrrrrrrrp
Magic Octopus Urn

@HyperNeutrino se mai avessi la possibilità di guardarlo, lo considero la mia libreria di analisi JSON preferita. È così facile.
Magic Octopus Urn

Va bene grazie! Lo darò un'occhiata.
HyperNeutrino,

0

Rapido, 225 201 byte

import Foundation;var f:(String)->Any={return try!JSONSerialization.jsonObject(with:Data(contentsOf:URL(string:"http://api.stackexchange.com/users?site=codegolf&filter=!)LgZAmQ6ls0hH&inname=\($0)")!))}

Un-giocato a golf:

import Foundation

var f:(String) -> [String: Any] = {
    return try! JSONSerialization.jsonObject(with:Data(contentsOf:URL(string:"http://api.stackexchange.com/users?site=codegolf&filter=!)LgZAmQ6ls0hH&inname=\($0)")!)) as! [String:Any]
}

Esempio di output:

["items": <__NSArrayI 0x6180001ffc00>(
{
    reputation = 2820;
    "user_id" = 42295;
},
{
    reputation = 2468;
    "user_id" = 31203;
},
{
    reputation = 2106;
    "user_id" = 2800;
},
{
    reputation = 1479;
    "user_id" = 6689;
},
{
    reputation = 1287;
    "user_id" = 64424;
},
{
    reputation = 1037;
    "user_id" = 64070;
},
{
    reputation = 644;
    "user_id" = 25193;
},
{
    reputation = 641;
    "user_id" = 3171;
},
{
    reputation = 639;
    "user_id" = 743;
},
{
    reputation = 590;
    "user_id" = 33233;
},
{
    reputation = 571;
    "user_id" = 26993;
},
{
    reputation = 563;
    "user_id" = 1730;
},
{
    reputation = 321;
    "user_id" = 18570;
},
{
    reputation = 309;
    "user_id" = 39156;
},
{
    reputation = 291;
    "user_id" = 7880;
},
{
    reputation = 281;
    "user_id" = 25190;
},
{
    reputation = 261;
    "user_id" = 40820;
},
{
    reputation = 231;
    "user_id" = 14154;
},
{
    reputation = 206;
    "user_id" = 2774;
},
{
    reputation = 196;
    "user_id" = 48231;
},
{
    reputation = 181;
    "user_id" = 1230;
},
{
    reputation = 176;
    "user_id" = 64077;
},
{
    reputation = 171;
    "user_id" = 31365;
},
{
    reputation = 171;
    "user_id" = 43455;
},
{
    reputation = 163;
    "user_id" = 21469;
},
{
    reputation = 161;
    "user_id" = 11845;
},
{
    reputation = 157;
    "user_id" = 25181;
},
{
    reputation = 131;
    "user_id" = 263;
},
{
    reputation = 131;
    "user_id" = 3922;
},
{
    reputation = 128;
    "user_id" = 67227;
}
)
]
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.