รหัส PPCG ของฉันคืออะไร


16

ท้าทาย

ระบุชื่อของสมาชิก PPCG ส่งออกหมายเลข PPCG ID หากไม่มีผู้ใช้คุณอาจรายงานข้อผิดพลาดหรือส่งกลับหมายเลขที่ไม่เป็นบวกใด ๆ หากมีสมาชิกหลายคนที่มีชื่อนี้คุณสามารถเลือกที่จะส่งออกเพียง ID เดียวหรือทั้งหมด

กรณีทดสอบ

"musicman523" -> 69054
"Dennis" -> 12012
"xnor" -> 20260
"แม่ชีรั่ว" -> 48934
"fəˈnɛtɪk" -> 64505
"JörgHülsermann" -> 59107
"ชุมชน" -> -1
"ผู้ใช้ใด ๆ ที่ไม่มีอยู่" -> 0
"Alex" -> 69198 (นี่คือผลลัพธ์ที่เป็นไปได้หนึ่งรายการ)
"Leaky N" -> 0
"Jorge" -> 3716

1
กรณีทดสอบที่แนะนำ: "Leaky N" ควรกลับ 0
Okx

5
โปรแกรมของเราสามารถส่งผลให้มีพฤติกรรมที่ไม่ได้กำหนดสำหรับผู้ใช้ที่ไม่ได้ใช้ (ฉันพิมพ์ 48934 ตัวอย่างเช่นสำหรับผู้ใช้ที่ไม่มีอยู่)? ฉันคิดว่าสิ่งนี้ควรได้รับอนุญาตเนื่องจากมีข้อผิดพลาด
Mr. Xcoder

4
@ ตกลงไม่มีฉันทำไม่ได้ ฉันกำลังถาม OP ว่าพฤติกรรมนี้ได้รับอนุญาตหรือไม่ หากไม่ใช่ฉันจะลบหรือแก้ไขคำตอบของฉัน
Mr. Xcoder

3
@OliverNi เป็นพิษหรือไม่? อย่างไร?
Okx

5
@Okx เขากำลังถามคำถามที่ถูกต้องกับ OP และคุณกำลังยิงเขาทันที ให้คำตอบ OP
Oliver Ni

คำตอบ:


30

Stack แลกเปลี่ยน Data Explorer , 56 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 เป็นนินจาของคุณในแชท XD
HyperNeutrino

1
-1 ไบต์โดยการกลับคำสั่งของตัวถูกดำเนินการรอบตัวดำเนินการความเท่าเทียมกัน
HyperNeutrino

10
+1 สำหรับการอ้างอิงถึงโปรแกรมเมอร์ SQL ที่ชอบตะโกน (และเป็นทางเลือกที่ดีของภาษาสำหรับคำตอบของคุณ :)
NH

4
ทำไมคุณถึงติดอันดับ 1 ในแบบสอบถามนี้ OP กล่าวว่า "หากมีสมาชิกหลายคนที่มีชื่อนี้คุณสามารถเลือกที่จะส่งออกเพียง 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
มันรองรับตัวละครพิเศษเหมือนกันJörg Hülsermannไหม?
Arnauld

4
สิ่งนี้ส่งคืน0สำหรับOliver:(
โอลิเวอร์

บันทึก 7 ไบต์โดยการแทนที่ด้วย r=>r.items[0]).then(r การมอบหมายการทำลายล้าง ftw! ({items:[r]})
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 อีก ???? มีเพียงหนึ่งเดียวเท่านั้น
Oliver Ni

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 NและJorgeข้อผิดพลาด

หากมีผู้ใช้หลายคนที่มีชื่อเหมือนกันมันจะพิมพ์ผู้ใช้ทั้งหมดที่ได้รับอนุญาต


มันให้ข้อมูล gzipped กับฉัน ..
โอลิเวอร์ Ni

ล้มเหลวในการป้อนข้อมูลLeaky N
Okx

@Okx คงที่ ---
Oliver Ni

เนื่องจากคุณสามารถ "รายงานข้อผิดพลาดหรือส่งคืน 0" หากผู้ใช้ไม่มีอยู่บรรทัดสุดท้ายไม่สามารถใช้ได้print a['user_id']ซึ่งจะส่ง KeyError หรือไม่
แดเนียล

1
ล้มเหลวสำหรับ "Jorge"
Felipe Nardi Batista

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-url
Kevin Cruijssen

@KevinCruijssen ขอบคุณมาก
Mr. Xcoder

Hint: Do not try to run it with fəˈnɛtɪk, use \u{...} instead, because Python does not tolerate non-ASCII
Mr. Xcoder

Python 2, anyways.
totallyhuman

3
fails for "Jorge"
Felipe Nardi Batista

3

Python 2 + requests, 173 bytes

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*

Sample run

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

Fun fact: the result is sorted by reputation, highest first.


Fails on input Leaky N
Okx

Nice trick with %s.
Mr. Xcoder

@Okx Not for me, it doesn't. >>> f('Leaky N')\n48934
totallyhuman

@totallyhuman It should return 0. Leaky N does not exist
Okx

@Okx Fixed. - -
totallyhuman

3

JavaScript, 128 119 bytes

-9 bytes thanks to Rogem.

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

1
Think you'd save some bytes with the IPv4 address. (198.252.206.16 instead of api.stackexchange.com)

-1

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

Sacrificed a few bytes to handle special characters.

Needs to be run under the api.stackexchange.com domain. Returns a Promise containing the ID or Throws an error in the Promise if the username can't be found.

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

Note: This solution was developed independently of Uriel's and its comments; if Uriel decides to use the find method, I'm happy to roll back to my longer, recursive version.


2
I've created a meta discussion on requiring a certain execution domain, since that does save quite a few bytes.
Birjolaxew

1
@Downvoter, please have the decency to leave a comment.
Shaggy

@Shaggy I would assume for the same reason as that meta discussion was started.

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.