我的PPCG ID是什么?


16

挑战

输入PPCG成员的名称,然后输出其PPCG ID号。如果该用户不存在,则可能会报告错误或返回任何非正数。如果有多个使用此名称的成员,则可以选择仅输出一个ID或全部输出。

测试用例

“ musicman523”-> 69054
“丹尼斯”-> 12012
“ xnor”-> 20260
“泄漏修女”-> 48934
“ fəˈnɛtɪk”-> 64505
“约格·赫尔瑟曼”-> 59107
“社区”-> -1
“任何不存在的用户”-> 0
“ Alex”-> 69198(这是一种可能的结果)
“泄漏N”-> 0
“豪尔赫”-> 3716

1
推荐测试用例:“泄漏N”。应该返回
0。– Okx

5
对于不存在的用户,我们的程序能否导致未定义的行为(例如,对于不存在的用户,我的图像为48934)?我认为应该允许这样做,因为存在错误。
Xcoder先生17年

4
@Okx不,我不知道。我问OP是否允许这种行为。如果不是,我将删除或修复我的答案。
Xcoder先生17年

3
@OliverNi有毒吗?怎么样?
Okx

5
@Okx他正在向OP询问有效问题,您立即将他击落。让OP回答。
奥利弗·尼

Answers:


30

Stack Exchange Data Explorer56 54 53 51 46字节

-1个字节感谢Hyper Neutrino。-5个字节,感谢Giacomo Garabello。

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

在线尝试!

不知道这是否完全有效,但是...输入必须用单引号引起来'

另外,我还是不明白为什么SQL程序员喜欢喊,但它显然是很好的做法所以...... SELECT一切FROM一切WHERE一切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

13
-2 BYTES
删除

1
NINJA'D YOUR NINJA in CHAT XD
HyperNeutrino

1
通过反转相等运算符周围的操作数顺序来获得-1字节
HyperNeutrino

10
+1是指希望大声喊叫的SQL程序员的参考(并且为您的回答提供了不错的语言选择:)
NH。

4
为什么在此查询中放前1名?OP表示“如果有多个使用此名称的成员,则可以选择仅输出一个ID或全部ID” ...
Giacomo Garabello

5

JavaScript中,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
是否支持in等特殊字符Jörg Hülsermann
Arnauld

4
这返回0Oliver:(
奥利弗·奥利弗

替换为r=>r.items[0]).then(r,节省7个字节({items:[r]})破坏分配任务
kamoroso94 '17

您可以使用:i=>fetch('//api.stackexchange.com/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)因为失败将返回一个Promise错误。您也可以i=>fetch('/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)说它需要在api域上运行
Downgoat

2
@Oliver还有什么奥利弗????只能是一个人
奥利弗·尼

5

Python 3 + 请求,196字节

感谢@Wondercricket -6个字节!

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

使用Stack Exchange API。修复了Leaky NJorge错误。

如果有多个同名用户,则会打印所有用户,这是允许的。


它为我提供了压缩的数据。–
奥利弗·尼

输入失败Leaky N
Okx

@Okx固定。---
奥利弗·尼

由于如果用户不存在,则可以“报告错误返回0”,所以最后一行不能是just print a['user_id'],这将引发KeyError吗?
丹尼尔(Daniel)

1
失败的“豪尔赫”
费利佩·纳尔迪·巴蒂斯塔

5

Python 2 + 请求,187字节

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]

如果存在单个用户,则返回用户ID;如果存在更多用户,则返回符合要求的第一个用户,否则返回错误。


您可以/2.2从API网址中删除。
凯文·克鲁伊森

@KevinCruijssen非常感谢
Xcoder先生17年

提示:请勿尝试使用来运行它fəˈnɛtɪk\u{...}而应改用它,因为Python不能容忍非ASCII
Xcoder先生,2017年

无论如何,Python 2。
完全人类

3
失败的“豪尔赫”
费利佩·纳尔迪·巴蒂斯塔

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
Xcoder先生17年

@Okx不适合我,不适合。>>> f('Leaky N')\n48934
完全人类

@totallyhuman应该返回0Leaky N不存在
Okx

@Okx固定。--–
totallyhuman

3

JavaScript中,128个 119字节

-9个字节感谢Rogem

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

1
认为您将使用IPv4地址保存一些字节。(198.252.206.16而不是api.stackexchange.com)

-1

的JavaScript(ES6)+ HTML,154 152 151 202个 179 161 145字节

牺牲了几个字节来处理特殊字符。

需要在api.stackexchange.com域下运行。返回一个包含ID的Promise,或者如果找不到用户名,则在Promise中引发错误。

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)'17

1
@Downvoter,请发表评论。
毛茸茸的

@Shaggy我想假设与开始元讨论的原因相同。

拒绝投票,如果您不同意已建立的共识(如@Rogem建议),请拒绝投票相关的元帖子,而不是遵循该共识的解决方案。
毛茸茸的
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.