사용자의 명성 계산


12

도전

사용자 이름 (ID가 아니라 이미 도전을 받고 있음)이 주어지면 현재 평판과 ID를 출력합니다.

입력

입력은 사용자의 사용자 이름 인 단일 문자열입니다. 이 사용자가 존재한다고 가정 할 수 있습니다.

산출

출력은 STDOUT 또는 STDERR에 대한 두 개의 정수이며 이는 사용자의 평판과 사용자의 ID입니다. 그것들은 특정한 순서로 이루어져야하며 어떤 합리적인 형식으로도 출력 될 수 있습니다

사양

  • 평판 출력은 10 분을 초과해서는 안됩니다.
  • 정상적인 실행 중에 프로그램에서 오류가 발생하지 않을 수 있습니다
  • 표준 허점 적용 (URL 단축기 제외)
  • 해당 사용자 이름을 가진 사용자가 두 명 이상인 경우 해당 사용자 이름을 가진 사용자의 통계를 출력 할 수 있습니다. 이 또한 ID를 출력해야하는 이유입니다.
  • 출력 될 평판은 네트워크 총 점수가 아닌 PPCG에 대한 사용자의 평판입니다.

Stack Exchange API 사이트는 여기 에서 찾을 수 있습니다 . 거기에서 설명서를 읽을 수 있습니다.


스택 교환 API를 연결하십시오.
Magic Octopus Urn

@carusocomputing 감사합니다. 분명히 여러 사용자가 같은 이름을 가질 수 있기 때문에 무언가를 수정해야합니다.
HyperNeutrino

이 규칙이 적용 된다고 생각 합니까? 또한 SE가 아닌 PPCG에 대한 사용자의 총 평판임을 확인할 수 있습니까?
Arnauld

@Arnauld 예라고 말할 것입니다. 그리고 나는 그것이 단지 PPCG 평판이라는 것을 확인합니다. 나는 도전에서 그것을 분명히 할 것이다. 감사.
HyperNeutrino

글쎄, 나는이 T-SQL 항목을 수행 했지만 충분히 업데이트되지 않았기 때문에 규칙 1을 충족하지 않습니다 :(
ʰᵈˑ

답변:


1

배쉬 + JQ , 93 바이트

다중 사용자 응답을 올바르게 처리하지 않았으므로 87 바이트 버전을 롤백했습니다.

골프

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

별도의 행에 첫 번째 사용자 ID와 평판을 출력합니다.

작동 원리

1) curl + zcatJSON 형식의 API 응답을 가져 오는 데 사용됩니다.

2) jq ..|numbersJSON을 재귀 적으로 전개하고 모든 숫자 값을 한 줄에 하나씩 인쇄합니다.

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

(행 번호는 nl설명 목적으로 만 추가되었습니다 )

3) 다음과 같이 사용할 sed첫 번째 조회하기 account_idreputation절대 열 번호에 의해,

테스트

>./reputation zeppelin
3315904
6275

6

자바 스크립트 (ES6) 145 139 136 125 123 117 바이트

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

Shaggy 덕분에 6 바이트를 절약하고 Cyoce 덕분에 6 바이트를 절약했습니다.

이름이 같은 모든 사용자를 출력해야하는지 또는 그 중 하나만 출력해야하는지 잘 모르겠습니다. 이 코드는 모든 것을 출력합니다.

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

f("tom")


나를 이길. 로 6 바이트를 절약하십시오 "//api.stackexchange.com/users?site=codegolf&inname="+a.
Shaggy

참고 : 예상보다 많은 결과를 반환하는 것 같습니다. 적절한 것에 대한 HyperNeutrino의 피드백을 얻으려고 노력했지만 결과에 이름이 입력 만 포함 된 사용자의 값이 정확하게 일치하지 않습니다. 따라서 최고의 결과는 "톰"이 아니라 "톰 카펜터"입니다.
Dason

_=>alert(_)그냥 대체 할 수 alert있습니까?
Cyoce

@Dason Yep, 그것이 확실하지 않은 요점입니다. 확인되면 답변을 변경하겠습니다.
Tom

@Cyoce 감사합니다!
Tom

4

파이썬 2, 178 169 149 바이트

나는 이것에 대한 요청을 사용할 것이다 :

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

기본적으로 스택의 API를 사용하여 정보를 JSON으로 가져온 다음 항목 "평판"을 가져옵니다. 또한 API 에는 많은 추가 매개 변수가 포함되어있어 그 매개 변수도 줄였습니다.

carusocomputing, ElPedro, Malivil, Keerthana Prabhakaran의 풍부한 기여


["items"][0]이것은 첫 번째 결과 만 얻습니다. 여러 사용자의 경우 실수하지 않으면 여분의 것을 무시합니다.
Magic Octopus Urn

import requests as r그리고 r.get(...4 바이트를 저장합니다.
ElPedro

@ElPedro가 입력 해 주셔서 감사합니다.
Neil

1
읽을 ?site=codegolf&inname="수 있도록 매개 변수를 재 배열하면 3 바이트 (+ "")를 절약 할 수 있습니다.
Malivil

1
를 사용 from requests import*;a=get()하면 바이트가 줄어 듭니다!
Keerthana Prabhakaran

3

당연, 144 156 바이트

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

익명 폐쇄.

편집 : groovy.json.JSON Slurper + 14 바이트의 가져 오기를 사용하지 않았습니다.

출력 예 [[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 당신이 그것을 볼 기회가 있다면, 내가 가장 좋아하는 JSON 파싱 라이브러리라고 생각합니다. 너무 쉽습니다.
Magic Octopus Urn

알았어, 고마워! 내가 살펴볼 게
HyperNeutrino

0

스위프트, 225 201 바이트

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

언 골프 :

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

출력 예 :

["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;
}
)
]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.