내 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 NJorge오류를 수정했습니다 .

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


그것은 나에게 데이터를 제공합니다 ..
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.