ID PPCG của tôi là gì?


16

Thử thách

Đặt tên của thành viên PPCG, xuất số ID PPCG của họ. Nếu người dùng không tồn tại, bạn có thể báo cáo lỗi hoặc trả về bất kỳ số không tích cực nào. Nếu có nhiều thành viên có tên này, bạn có thể chọn chỉ xuất một ID hoặc tất cả chúng.

Các trường hợp thử nghiệm

"nhạc sĩ523" -> 69054
"Dennis" -> 12012
"xnor" -> 20260
"Nữ tu bị rò rỉ" -> 48934
"fəˈnɛtɪk" -> 64505
"Jörg Hülsermann" -> 59107
"Cộng đồng" -> -1
"Bất kỳ người dùng nào không tồn tại" -> 0
"Alex" -> 69198 (đây là một kết quả có thể)
"Rò rỉ N" -> 0
"Jorge" -> 3716

1
Trường hợp thử nghiệm được đề xuất: "Leaky N". Nên trả về 0.
Okx

5
Chương trình của chúng tôi có thể dẫn đến hành vi không xác định cho người dùng không tồn tại (của tôi in 48934, ví dụ cho người dùng không tồn tại)? Tôi nghĩ rằng điều này nên được cho phép, vì lỗi là.
Ông Xcoder

4
@Okx Không, tôi không. Tôi đang hỏi OP nếu hành vi này được cho phép. Nếu không, tôi sẽ xóa hoặc sửa câu trả lời của mình.
Ông Xcoder

3
@OliverNi Độc? Làm sao?
Okx

5
@Okx Anh ấy đang hỏi một câu hỏi hợp lệ cho OP và bạn đang bắn anh ấy ngay lập tức. Hãy để OP trả lời.
Oliver Ni

Câu trả lời:


30

Stack Exchange Data Explorer , 56 54 53 51 46 byte

-1 byte nhờ Hyper Neutrino. -5 byte nhờ Giacomo Garabello.

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

Hãy thử trực tuyến!

Không chắc chắn nếu điều này là hoàn toàn hợp lệ nhưng ... Đầu vào phải được bao quanh trong dấu ngoặc đơn '.

Ngoài ra, tôi vẫn không hiểu tại sao các lập trình viên SQL thích hét lên nhưng rõ ràng đó là cách thực hành tốt nên ... SELECTMỌI FROMTHỨ WHEREMỌI LIKETHỨ MỌI THỨ MỌI THỨ!

Giải trình

HÃY ĐỂ TÔI GIẢI THÍCH.

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
NINJA'D NINJA CỦA BẠN TRONG CHAT XD
HyperNeutrino

1
-1 byte bằng cách đảo ngược thứ tự các toán hạng xung quanh toán tử đẳng thức
HyperNeutrino

10
+1 để tham khảo cho các lập trình viên SQL thích hét lên (và cho một sự lựa chọn tốt về ngôn ngữ cho câu trả lời của bạn :)
NH.

4
Tại sao bạn lại đặt top 1 trong truy vấn này? OP cho biết "Nếu có nhiều thành viên có tên này, bạn có thể chọn chỉ xuất một ID hoặc tất cả họ" ...
Giacomo Garabello

5

JavaScript, 155 149 142 135 byte

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
Nó có hỗ trợ các ký tự đặc biệt như trong Jörg Hülsermannkhông?
Arnauld

4
Điều này được trả lại 0cho Oliver:(
Oliver

Lưu 7 byte bằng cách thay thế r=>r.items[0]).then(rbằng ({items:[r]}). Phân công chuyển nhượng ftw!
kamoroso94

Bạn có thể sử dụng: i=>fetch('//api.stackexchange.com/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)vì nó sẽ trả về lỗi hứa nếu thất bại. Bạn cũng có thể vừa làm i=>fetch('/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)vừa nói rằng nó cần được chạy trên miền api
Downgoat

2
@Oliver CÁI GÌ khác ???? CÓ THỂ CHỈ CÓ MỘT
Oliver Ni

5

Yêu cầu Python 3 + , 196 byte

Cảm ơn @Wondercricket cho -6 byte!

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

Sử dụng API trao đổi ngăn xếp. Đã sửa lỗi Leaky NJorgelỗi.

Nếu có nhiều người dùng có cùng tên, nó sẽ in tất cả, cho phép.


Nó cung cấp cho tôi dữ liệu được nén.
Oliver Ni

Leaky N
Thất

@Okx Đã sửa. ---
Oliver Ni

Vì bạn có thể "báo cáo lỗi hoặc trả về 0" nếu người dùng không tồn tại, dòng cuối cùng có thể là chính xác print a['user_id'], điều này sẽ ném KeyError không?
Daniel

1
thất bại cho "Jorge"
Felipe Nardi Batista

5

Yêu cầu Python 2 + , 187 byte

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]

Trả về ID người dùng nếu một người dùng tồn tại, người dùng đầu tiên phù hợp với các yêu cầu nếu tồn tại nhiều hơn và báo cáo lỗi khác.


Bạn có thể xóa /2.2khỏi url-API.
Kevin Cruijssen

@KevinCruijssen Cảm ơn rất nhiều
Ông Xcoder

Gợi ý : Đừng cố chạy nó fəˈnɛtɪk, \u{...}thay vào đó hãy sử dụng , vì Python không dung thứ không phải ASCII
Ông Xcoder

Python 2, dù sao đi nữa.
hoàn toàn là

3
thất bại cho "Jorge"
Felipe Nardi Batista

3

Yêu cầu Python 2 + , 173 byte

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*

Chạy mẫu

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

Thực tế thú vị: kết quả được sắp xếp theo danh tiếng, cao nhất đầu tiên.


Thất bại trong đầu vàoLeaky N
Thất Okx

Thủ thuật hay với %s.
Ông Xcoder

@Okx Không phải cho tôi, nó không. >>> f('Leaky N')\n48934
hoàn toàn phi thường

@totallyhuman Nó sẽ trở lại 0. Leaky Nkhông tồn tại
Okx

@Okx Đã sửa. - -
hoàn toàn là

3

JavaScript, 128 119 byte

-9 byte nhờ Rogem .

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

1
Hãy nghĩ rằng bạn sẽ lưu một số byte với địa chỉ IPv4. (198.252.206.16 thay vì api.stackexchange.com)

-1

JavaScript (ES6) + HTML, 154 152 151 202 179 161 145 byte

Hy sinh một vài byte để xử lý các ký tự đặc biệt.

Cần phải được chạy theo api.stackexchange.com tên miền. Trả về một Promise chứa ID hoặc Ném lỗi trong Promise nếu không thể tìm thấy tên người dùng.

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

Lưu ý: Giải pháp này được phát triển độc lập với ý kiến ​​của Uriel và nhận xét của nó; nếu Uriel quyết định sử dụng findphương pháp này, tôi rất vui khi quay lại phiên bản đệ quy dài hơn của mình.


2
Tôi đã tạo một cuộc thảo luận meta về việc yêu cầu một miền thực thi nhất định, vì điều đó giúp tiết kiệm khá nhiều byte.
Birjolaxew

1
@Downvoter, xin vui lòng để lại bình luận.
Shaggy

@Shaggy Tôi sẽ cho rằng vì lý do tương tự như cuộc thảo luận meta đã được bắt đầu.

Downvoter, nếu bạn không đồng ý với sự đồng thuận đã được thiết lập (như @Rogem gợi ý), vui lòng tải xuống bài đăng meta có liên quan thay vì các giải pháp tuân thủ sự đồng thuận đó.
Xù xì
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.