Hitung Reputasi Pengguna


12

Tantangan

Mengingat pengguna nama (tidak ID, kita memiliki tantangan sudah), output reputasi mereka saat ini dan ID mereka.

Memasukkan

Input akan berupa string tunggal yang merupakan nama pengguna pengguna. Anda dapat berasumsi bahwa pengguna ini ada.

Keluaran

Output akan berupa dua bilangan bulat baik untuk STDOUT atau STDERR yang akan menjadi reputasi pengguna dan ID pengguna. Mereka harus dalam urutan tertentu dan dapat dihasilkan dalam format yang masuk akal

Spesifik

  • Output reputasi harus tidak lebih dari 10 menit kedaluwarsa.
  • Program Anda mungkin tidak melakukan kesalahan selama eksekusi normal
  • Celah standar berlaku (termasuk Tidak Ada Penyingkat URL)
  • Jika ada lebih dari satu pengguna dengan nama pengguna itu, Anda dapat menampilkan statistik setiap pengguna dengan nama pengguna itu. Ini juga mengapa Anda harus menampilkan ID.
  • Reputasi sebagai output adalah reputasi pengguna di PPCG, bukan skor total jaringan.

Situs Stack Exchange API dapat ditemukan di sini . Anda dapat membaca dokumentasi dari sana.


Tautkan API pertukaran-tumpukan.
Magic Gurita Guci

@carusocomputing Akan lakukan, terima kasih. Saya juga perlu memperbaiki sesuatu karena ternyata banyak pengguna dapat memiliki nama yang sama.
HyperNeutrino

Saya kira aturan ini berlaku? Juga, dapatkah Anda mengonfirmasi bahwa itu adalah reputasi total pengguna di PPCG daripada di SE?
Arnauld

@Arnauld saya akan mengatakan ya. Dan saya mengkonfirmasi bahwa itu hanya reputasi PPCG. Saya akan mengklarifikasi hal itu dalam tantangan. Terima kasih.
HyperNeutrino

Yah saya melakukan entri T-SQL ini tetapi tidak memenuhi aturan 1 karena tidak cukup diperbarui :(
ʰᵈˑ

Jawaban:


1

Bash + JQ , 93 byte

Memutar kembali versi 87 byte, karena tidak menangani respons multi-pengguna dengan benar.

Golf

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

Akan menampilkan id dan reputasi pengguna pertama di baris yang berbeda.

Bagaimana itu bekerja ?

1) curl + zcatdigunakan untuk mengambil balasan API yang diformat JSON

2) jq ..|numbersakan membuka JSON secara rekursif, dan mencetak semua nilai numerik, satu per baris

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

(nomor baris ditambahkan dengan hanya nluntuk tujuan ilustrasi)

3) Selanjutnya kita gunakan seduntuk mencari yang pertama account_iddan reputation, dengan nomor baris absolut mereka

Uji

>./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)

Disimpan 6 byte berkat Shaggy dan 6 byte berkat Cyoce.

Saya tidak yakin apakah harus menampilkan semua pengguna dengan nama yang sama, atau hanya satu dari mereka; kode ini menghasilkan semuanya.

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

f("tom")


Kalahkan aku untuk itu. Hemat 6 byte dengan "//api.stackexchange.com/users?site=codegolf&inname="+a.
Shaggy

Catatan: Tampaknya Anda mengembalikan lebih banyak hasil daripada yang seharusnya (mungkin). Saya telah mencoba untuk mendapatkan umpan balik HyperNeutrino tentang apa yang sesuai tetapi hasil Anda mengembalikan nilai bagi pengguna yang namanya hanya berisi input - tidak persis cocok. Jadi hasil teratas Anda adalah untuk "Tom Carpenter" dan bukan "tom".
Dason

Apakah mungkin untuk mengganti _=>alert(_)dengan adil alert?
Cyoce

@ Alasan Yap, itu satu hal yang saya tidak yakin; Saya akan mengubah jawaban saya ketika sudah dikonfirmasi.
Tom

@Cyoce Itu berhasil, terima kasih!
Tom

4

Python 2, 178 169 149 Bytes

Saya akan menggunakan permintaan untuk ini:

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

Pada dasarnya, ia menggunakan stack's api untuk mengambil informasi sebagai JSON dan kemudian mendapatkan item "reputasi". Selain itu, API menampilkan banyak parameter tambahan, saya mencukurnya juga.

Kontribusi murah hati dari: carusocomputing, ElPedro, Malivil, Keerthana Prabhakaran


["items"][0]ini hanya mendapatkan hasil pertama, pada beberapa kasus pengguna masih akan mengabaikan tambahan jika saya tidak salah.
Magic Gurita Guci

import requests as rdan r.get(...menyimpan 4 byte.
ElPedro

@ ElPedro memperbaruinya, terima kasih atas masukannya.
Neil

1
Jika Anda mengatur ulang parameter agar berbunyi, ?site=codegolf&inname="Anda dapat menyimpan 3 byte (+ "")
Malivil

1
Menggunakan from requests import*;a=get()mengurangi satu byte!
Keerthana Prabhakaran

3

Groovy, 144 156 bytes

{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]}}

Penutupan anonim.

EDIT: lupa menggunakan impor groovy.json.JSON Slurper + 14 byte.

Contoh 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 Mm

@HyperNeutrino jika Anda pernah mendapatkan kesempatan untuk melihatnya, saya menganggapnya sebagai parsing perpustakaan JSON favorit saya. Sangat mudah.
Magic Gurita Guci

Baik terima kasih! Saya akan melihatnya.
HyperNeutrino

0

Swift, 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)")!))}

Tidak 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]
}

Contoh 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;
}
)
]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.