Tính toán danh tiếng của người dùng


12

Thử thách

Với tên người dùng (không phải ID, chúng tôi đã có thách thức đó), xuất ra danh tiếng hiện tại và ID của họ.

Đầu vào

Đầu vào sẽ là một chuỗi duy nhất là tên người dùng. Bạn có thể cho rằng người dùng này tồn tại.

Đầu ra

Đầu ra sẽ là hai số nguyên cho STDOUT hoặc STDERR sẽ là danh tiếng của người dùng và ID người dùng. Chúng phải theo thứ tự cụ thể đó và có thể được xuất ra ở bất kỳ định dạng hợp lý nào

Cụ thể

  • Sản lượng danh tiếng không được quá 10 phút kể từ ngày.
  • Chương trình của bạn không được ném bất kỳ lỗi nào trong khi thực hiện bình thường
  • Các lỗ hổng tiêu chuẩn được áp dụng (bao gồm Không rút ngắn URL)
  • Nếu có nhiều người dùng có tên người dùng đó, bạn có thể xuất số liệu thống kê của bất kỳ người dùng nào có tên người dùng đó. Đây cũng là lý do tại sao bạn phải xuất ID.
  • Danh tiếng là đầu ra là uy tín của người dùng trên PPCG, chứ không phải tổng điểm của mạng.

Trang web Stack Exchange API có thể được tìm thấy ở đây . Bạn có thể đọc tài liệu từ đó.


Liên kết API trao đổi ngăn xếp.
Bạch tuộc ma thuật Urn

@carusocomputing Sẽ làm được, cảm ơn. Tôi cũng cần sửa một cái gì đó vì rõ ràng nhiều người dùng có thể có cùng tên.
HyperNeutrino

Tôi cho rằng quy tắc này được áp dụng? Ngoài ra, bạn có thể xác nhận rằng đó là toàn bộ danh tiếng của người dùng trên PPCG chứ không phải SE không?
Arnauld

@Arnauld Tôi sẽ nói có. Và tôi xác nhận rằng đó chỉ là danh tiếng của PPCG. Tôi sẽ làm rõ điều đó trong thử thách. Cảm ơn.
HyperNeutrino

Vâng, tôi đã làm điều này vào T-SQL nhưng nó không đáp ứng quy tắc 1 là nó không cập nhật đủ :(
ʰᵈˑ

Câu trả lời:


1

Bash + JQ , 93 byte

Đã khôi phục phiên bản 87 byte, vì nó không xử lý chính xác các phản hồi của nhiều người dùng.

Chơi gôn

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

Sẽ xuất id người dùng đầu tiên và danh tiếng trên các dòng riêng biệt.

Làm thế nào nó hoạt động ?

1) curl + zcatđược sử dụng để tìm nạp trả lời API được định dạng JSON

2) jq ..|numberssẽ mở ra đệ quy JSON và in tất cả các giá trị số, mỗi giá trị một dòng

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

(số dòng đã được thêm vào chỉ với nlmục đích minh họa)

3) Tiếp theo, chúng tôi sử dụng sedđể tra cứu đầu tiên account_idreputation, bằng số hàng tuyệt đối của chúng

Kiểm tra

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

Đã lưu 6 byte nhờ Shaggy và 6 byte nhờ Cyoce.

Tôi không chắc liệu nó có nên xuất tất cả người dùng có cùng tên hay chỉ một trong số họ; mã này xuất ra tất cả chúng.

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

f("tom")


Đánh tôi với nó Lưu 6 byte với "//api.stackexchange.com/users?site=codegolf&inname="+a.
Xù xì

Lưu ý: Có vẻ như bạn trả lại kết quả nhiều hơn bạn (có thể) nên. Tôi đã cố gắng nhận phản hồi của HyperNeutrino về những gì phù hợp nhưng kết quả của bạn trả về giá trị cho người dùng có tên chỉ chứa đầu vào - không khớp chính xác. Vì vậy, kết quả hàng đầu của bạn là cho "Tom Carpenter" chứ không phải "tom".
Dason

Nó sẽ có thể thay thế _=>alert(_)chỉ alert?
Cyoce

@Dason Yep, đó là một điểm tôi không chắc chắn; Tôi sẽ thay đổi câu trả lời khi được xác nhận.
Tom

@Cyoce Điều đó đã làm việc, cảm ơn!
Tom

4

Python 2, 178 169 149 byte

Tôi sẽ sử dụng các yêu cầu cho việc này:

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

Về cơ bản, nó sử dụng api của stack để lấy thông tin dưới dạng JSON và sau đó lấy mục "danh tiếng". Ngoài ra, API còn có nhiều tham số bổ sung, tôi cũng loại bỏ chúng.

Đóng góp hào phóng từ: carusocomputing, ElPedro, Malivil, Keerthana Mitchhakaran


["items"][0]điều này chỉ nhận được kết quả đầu tiên, trong trường hợp nhiều người dùng, nó vẫn sẽ bỏ qua các tính năng bổ sung nếu tôi không nhầm.
Bạch tuộc ma thuật Urn

import requests as rr.get(...tiết kiệm 4 byte.
ElPedro

@ElPedro đã cập nhật nó, cảm ơn vì đầu vào.
Neil

1
Nếu bạn sắp xếp lại các tham số để nó đọc, ?site=codegolf&inname="bạn có thể lưu 3 byte (+ "")
Malivil

1
Sử dụng from requests import*;a=get()làm giảm một byte!
Keerthana Mitchhakaran

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

Ẩn danh đóng cửa.

EDIT: quên sử dụng nhập groovy.json.cho JSON Slurper + 14 byte.

Ví dụ đầu ra [[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


@HyperNeutrino nếu bạn có cơ hội nhìn vào nó, tôi coi đó là thư viện phân tích cú pháp JSON yêu thích của tôi. Nó rất dễ.
Bạch tuộc ma thuật Urn

Được rồi, cám ơn! Tôi sẽ xem nó.
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)")!))}

Chưa chơi gôn:

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

Ví dụ đầu ra:

["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;
}
)
]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.