내 PPCG ID는 무엇입니까?


16

도전

PPCG 구성원의 이름이 주어지면 PPCG ID 번호를 출력하십시오. 사용자가 존재하지 않으면 오류를보고하거나 양수가 아닌 숫자를 반환 할 수 있습니다. 이 이름을 가진 멤버가 여러 개인 경우 하나의 ID 만 또는 모두를 출력하도록 선택할 수 있습니다.

테스트 사례

"musicman523"-> 69054
"데니스"-> 12012
"xnor"-> 20260
"누설 수녀"-> 48934
"fəˈnɛtɪk"-> 64505
"Jörg Hülsermann"-> 59107
"커뮤니티"-> -1
"존재하지 않는 사용자"-> 0
"Alex"-> 69198 (이것은 가능한 결과입니다)
"리키 N"-> 0
"조지"-> 3716

1
권장 테스트 사례 : "Leaky N". 0을 반환해야합니다.
— Okx

5
Google 프로그램이 존재하지 않는 사용자에게 정의되지 않은 동작을 일으킬 수 있습니까 (예 : 존재하지 않는 사용자를위한 인쇄소 48934). 오류가 있기 때문에 이것이 허용되어야한다고 생각합니다.
— Mr. Xcoder

4
@Okx 아니요. 이 동작이 허용되는지 OP에 묻습니다. 그렇지 않은 경우 답변을 삭제하거나 수정합니다.
— Mr. Xcoder

3
@OliverNi 독성? 어떻게?
— Okx

5
@Okx 그는 OP에 유효한 질문을하고 있으며 즉시 그를 격추하고 있습니다. OP가 대답하자.
— Oliver Ni

답변:


30

스택 교환 데이터 탐색기 , 56 54 53 51 46 바이트

Hyper Neutrino 덕분에 -1 바이트. Giacomo Garabello 덕분에 -5 바이트.

SELECT ID FROM USERS WHERE##S##=DISPLAYNAME--S

온라인으로 사용해보십시오!

이것이 완전히 유효한지 확실하지 않지만 ... 입력은 작은 따옴표로 묶어야합니다 '.

또한, 난 아직도 왜 SQL 프로그래머 소리에 같이하지 않지만 그것은 분명히 너무 좋습니다 ...의 SELECT모든 것을 FROM모든 것을 WHEREEVERYTHING의 LIKE모든 것!

설명

설명해주세요.

SELECT ID FROM USERS WHERE##S##=DISPLAYNAME--S

                                           --S  -- DECLARE AN INPUT PARAMETER NAMED S
SELECT                                          -- FIND...
       ID                                       -- ID OF THE USERS...
          FROM USERS                            -- IN THE TABLE USERS...
                     WHERE                      -- THAT SATISFIES THE CONDITION...
                          ##S##=DISPLAYNAME     -- S EQUALS THE USERS' DISPLAY NAME


1
채팅 닌자 닌자 XD
— HyperNeutrino

1
항등 연산자 주위의 피연산자 순서를 반대로함으로써 -1 바이트
— HyperNeutrino

10
+1하고 싶은 SQL 프로그래머를위한 참고 자료 (답변을위한 훌륭한 언어 선택)
— NH.

4
이 쿼리에서 왜 최상위 1을 넣었습니까? OP는 "이 이름을 가진 회원이 여러 명인 경우 하나의 ID 만 또는 모두를 출력하도록 선택할 수 있습니다"...
— Giacomo Garabello

5

자바 스크립트, 155 149 142 135 바이트

i=>fetch("//api.stackexchange.com/users?site=codegolf&inname="+i).then(r=>r.json()).then(r=>r.items.find(u=>u.display_name==i).user_id)

f=i=>fetch("//api.stackexchange.com/users?site=codegolf&inname="+i).then(r=>r.json()).then(r=>r.items.find(u=>u.display_name==i).user_id)
<input onchange="f(this.value).then(console.log)"><br>Fill input and press Enter


1
?와 같은 특수 문자를 지원합니까 Jörg Hülsermann?
— Arnauld

4
이것은 반환 0에 대한 Oliver:(
— 올리버

로 교체 r=>r.items[0]).then(r하여 7 바이트를 절약하십시오 ({items:[r]}). 구조화 할당 ftw!
— kamoroso94

i=>fetch('//api.stackexchange.com/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)실패하면 약속 오류를 반환 하므로 다음 을 사용할 수 있습니다 . 또한 i=>fetch('/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)api 도메인에서 실행해야한다고 말할 수도 있습니다
— Downgoat

2
@Oliver 또 다른 올리버 ???? 하나만있을 수있다
— Oliver Ni

5

Python 3 + 요청 , 196 바이트

-6 바이트에 대한 @Wondercricket 감사합니다!

from requests import*
x=lambda s:all([print(a['user_id'])if s==a['display_name']else''for a in get('http://api.stackexchange.com/users?inname=%s&site=codegolf'%utils.quote(s)).json()['items']])and d

스택 교환 API를 사용합니다. Leaky N및 Jorge오류를 수정했습니다 .

이름이 같은 사용자가 여러 명인 경우 모든 사용자를 인쇄하여 허용됩니다.


그것은 나에게 데이터를 제공합니다 ..
— Oliver Ni

입력 실패Leaky N
— Okx

@Okx 고정. ---
— Oliver Ni

사용자가 존재하지 않으면 " 오류를보고 하거나 0을 반환 "할 수 있기 때문에 마지막 줄은 그냥있을 수 없습니다. print a['user_id']그러면 KeyError가 발생합니까?
— Daniel

1
"Jorge"실패
— Felipe Nardi Batista

5

파이썬 2 + requests, 187 bytes

from requests import*
def f(x):t=get("http://api.stackexchange.com/users?inname="+utils.quote(x)+"&site=codegolf").json()["items"];print[k['user_id']for k in t if k['display_name']==x][0]

Returns the user ID if a single user exists, the first user which matches the requirements if more exist, and reports an error otherwise.


/2.2API-url에서 제거 할 수 있습니다 .
— 케빈 크루이 센

@KevinCruijssen 감사합니다
— Mr. Xcoder

힌트 : 그것을 실행하려고하지 마십시오 fəˈnɛtɪk사용, \u{...}파이썬은 비 ASCII를 용납하지 않기 때문에, 대신
— 씨 Xcoder을

어쨌든 파이썬 2.
— 완전히 인간적인

3
"Jorge"에 실패
— Felipe Nardi Batista

3

Python 2 + 요청 , 173 바이트

lambda s:[i['user_id']for i in get('http://api.stackexchange.com/users?inname=%s&site=codegolf'%utils.quote(s)).json()['items']if i['display_name']==s]
from requests import*

샘플 런

>>> f=\
... lambda s:[i['user_id']for i in get('http://api.stackexchange.com/users?inname=%s&site=codegolf'%utils.quote(s)).json()['items']if i['display_name']==s]
>>> from requests import*
>>>
>>> tests = ['musicman523', 'Dennis', 'xnor', 'Leaky Nun', 'Community', 'Any user that does not exist', 'Alex', 'Leaky N', 'Jorge']
>>> for i in tests: print '%-30r -> %s'%(i, f(i))
... 
'musicman523'                  -> [69054]
'Dennis'                       -> [12012, 13891, 14912, 24937]
'xnor'                         -> [20260]
'Leaky Nun'                    -> [48934]
'Community'                    -> [-1]
'Any user that does not exist' -> []
'Alex'                         -> [21536, 69198, 11192]
'Leaky N'                      -> []
'Jorge'                        -> [3716]

재미있는 사실 : 결과는 평판에 따라 정렬됩니다.


입력 실패Leaky N
— Okx

와 좋은 트릭 %s.
— Mr. Xcoder

@Okx 나를 위해, 그렇지 않습니다. >>> f('Leaky N')\n48934
— 완전히 인간적인

@totallyhuman 반환해야합니다 0. Leaky N존재하지 않음
— Okx

@Okx 고정. - -
— totallyhuman

3

자바 스크립트, 128 119 바이트

Rogem 덕분에 -9 바이트 .

n=>fetch("198.252.206.16/users?site=codegolf&inname="+n).then(r=>r.text()).then(t=>t.match(`\\/([^\\/]*)\\/`+n+`"`)[1])

1
IPv4 주소로 일부 바이트를 저장한다고 생각하십시오. (api.stackexchange.com 대신 198.252.206.16)

-1

자바 스크립트 (ES6) + HTML, 154 152 151 202 179 161 145 바이트

특수 문자를 처리하기 위해 몇 바이트를 희생했습니다.

api.stackexchange.com도메인에서 실행해야 합니다. 아이디가 포함 된 약속을 반환하거나 사용자 이름을 찾을 수없는 경우 약속에 오류를 발생시킵니다.

s=>fetch(`/users?site=codegolf&inname=`+s).then(r=>r.json()).then(j=>j.items.find(i=>(o.innerHTML=i.display_name,o.innerText==s)).user_id)

<a id=o

참고 :이 솔루션은 Uriel 및 해당 의견과 독립적으로 개발되었습니다. Uriel이이 find방법 을 사용하기로 결정하면 더 길고 재귀적인 버전으로 롤백 할 수 있습니다.


2
내가 만든 메타 토론 그 이후, 특정 실행 도메인을 필요에를 않습니다 꽤 몇 바이트 저장합니다.
— Birjolaxew

1
@Downvoter, 의견을 남겨주세요.
— Shaggy

@Shaggy 메타 토론이 시작된 것과 같은 이유로 가정합니다.

Downvoter, if you disagree with an established consensus (as @Rogem suggests), please downvote the relevant meta post rather than solutions that adhere to that consensus.
— Shaggy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.