Apa ID PPCG saya?

16

Tantangan

Diberi nama anggota PPCG, tampilkan nomor ID PPCG mereka. Jika pengguna tidak ada, Anda dapat melaporkan kesalahan atau mengembalikan nomor non-positif. Jika ada beberapa anggota dengan nama ini, Anda dapat memilih untuk hanya mengeluarkan satu ID atau semuanya.

Uji Kasus

"musicman523" -> 69054
"Dennis" -> 12012
"xnor" -> 20260
"Leaky Nun" -> 48934
"fəˈnɛtɪk" -> 64505
"Jörg Hülsermann" -> 59107
"Komunitas" -> -1
"Setiap pengguna yang tidak ada" -> 0
"Alex" -> 69198 (ini adalah salah satu hasil yang mungkin)
"Leaky N" -> 0
"Jorge" -> 3716
musicman523
sumber
1
Kasing uji yang disarankan: "Leaky N". Harus mengembalikan 0.
Okx
5
Bisakah program kami menghasilkan perilaku yang tidak terdefinisi untuk pengguna yang tidak ada (milik saya mencetak 48934, misalnya untuk pengguna yang tidak ada)? Saya pikir ini harus diizinkan, karena kesalahannya.
Tn. Xcoder
4
@ Ok Tidak, saya tidak. Saya bertanya kepada OP apakah perilaku ini diizinkan. Jika tidak, saya akan menghapus atau memperbaiki jawaban saya.
Tn. Xcoder
3
@OliverNi Beracun? Bagaimana?
Okx
5
@Okx Dia mengajukan pertanyaan yang valid ke OP dan Anda segera menembaknya. Biarkan jawaban OP.
Oliver Ni

Jawaban:

30

Stack Exchange Data Explorer , 56 54 53 51 46 byte

-1 byte terima kasih kepada Hyper Neutrino. -5 byte berkat Giacomo Garabello.

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

Cobalah online!

Tidak yakin apakah ini benar-benar valid tapi ... Input harus dikelilingi dengan tanda kutip tunggal '.

Juga, saya masih tidak mengerti mengapa pemrogram SQL suka berteriak tapi itu praktik yang baik jadi ... SELECTSEMUANYA FROMSEGALA WHERESESUATU LIKESEMUANYA SEMUANYA!

Penjelasan

BIARKAN AKU MENJELASKAN.

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
benar-benar manusiawi
sumber
13
-2 BYTES DENGAN MENGHAPUS RUANG DI SEKITAR TANDA
persamaan
1
NINJA'D NINJA ANDA DI CHAT XD
HyperNeutrino
1
-1 byte dengan membalik urutan operan di sekitar operator kesetaraan
HyperNeutrino
10
+1 untuk referensi programmer SQL yang suka berteriak (dan untuk pilihan bahasa yang bagus untuk jawaban Anda :)
NH.
4
mengapa Anda menempatkan 1 teratas dalam kueri ini? OP mengatakan "Jika ada banyak anggota dengan nama ini, Anda dapat memilih untuk hanya menghasilkan satu ID atau semuanya" ...
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

Uriel
sumber
1
Apakah itu mendukung karakter khusus seperti di Jörg Hülsermann?
Arnauld
4
Ini dikembalikan 0untuk Oliver:(
Oliver
Hemat 7 byte dengan mengganti r=>r.items[0]).then(rdengan ({items:[r]}). Merusak penugasan ftw!
kamoroso94
Anda dapat menggunakan: i=>fetch('//api.stackexchange.com/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)karena akan mengembalikan kesalahan janji jika gagal. Anda juga bisa melakukan i=>fetch('/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)dan mengatakan itu perlu dijalankan pada domain api
Downgoat
2
@Oliver APA oliver lain ???? ADA BISA HANYA SATU
Oliver Ni
5

Python 3 + permintaan , 196 byte

Terima kasih @Wondercricket untuk -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

Menggunakan Stack Exchange API. Memperbaiki Leaky Ndan Jorgekesalahan.

Jika ada beberapa pengguna dengan nama yang sama, itu mencetak semuanya, yang diperbolehkan.

Oliver Ni
sumber
Ini memberi saya data gzip ..
Oliver Ni
Gagal pada inputLeaky N
Okx
@Okx Diperbaiki. ---
Oliver Ni
Karena Anda dapat "melaporkan kesalahan atau mengembalikan 0" jika pengguna tidak ada, bisakah baris terakhir menjadi adil print a['user_id'], yang akan melempar KeyError?
Daniel
1
gagal untuk "Jorge"
Felipe Nardi Batista
5

Python 2 + permintaan , 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]

Mengembalikan ID pengguna jika ada satu pengguna, pengguna pertama yang cocok dengan persyaratan jika ada lebih banyak, dan melaporkan kesalahan sebaliknya.

Tuan Xcoder
sumber
Anda dapat menghapus /2.2dari url API.
Kevin Cruijssen
@KevinCruijssen Terima kasih banyak
Tn. Xcoder
Petunjuk : Jangan coba menjalankannya fəˈnɛtɪk, gunakan \u{...}saja, karena Python tidak mentolerir non-ASCII
Tn. Xcoder
Python 2, lagian.
totallyhuman
3
gagal untuk "Jorge"
Felipe Nardi Batista
3

Python 2 + permintaan , 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*

Contoh dijalankan

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

Fakta menyenangkan: hasilnya disortir berdasarkan reputasi, tertinggi pertama.

benar-benar manusiawi
sumber
Gagal pada inputLeaky N
Okx
Trik yang bagus dengan %s.
Tn. Xcoder
@ OKK Tidak untukku, tidak. >>> f('Leaky N')\n48934
totallyhuman
@ sebenarnya manusia harus kembali 0. Leaky Ntidak ada
Okx
@Okx Diperbaiki. - -
totallyhuman
3

JavaScript, 128 119 byte

-9 byte berkat Rogem .

n=>fetch("198.252.206.16/users?site=codegolf&inname="+n).then(r=>r.text()).then(t=>t.match(`\\/([^\\/]*)\\/`+n+`"`)[1])
Oliver
sumber
1
Berpikir Anda akan menyimpan beberapa byte dengan alamat IPv4. (198.252.206.16 alih-alih api.stackexchange.com)
-1

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

Mengorbankan beberapa byte untuk menangani karakter khusus.

Perlu dijalankan di bawah api.stackexchange.comdomain. Mengembalikan Janji yang berisi ID atau Melempar kesalahan dalam Janji jika nama pengguna tidak dapat ditemukan.

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

Catatan: Solusi ini dikembangkan secara terpisah dari komentar Uriel dan komentarnya; jika Uriel memutuskan untuk menggunakan findmetode ini, saya senang untuk kembali ke versi saya yang lebih panjang dan rekursif.

Shaggy
sumber
2
Saya telah membuat diskusi meta pada yang membutuhkan domain eksekusi tertentu, karena itu tidak menyimpan beberapa byte.
Birjolaxew
1
@Downvoter, mohon kesopanan untuk memberikan komentar.
Shaggy
@ Shaggy Saya akan berasumsi untuk alasan yang sama dengan diskusi meta dimulai.
Downvoter, jika Anda tidak setuju dengan konsensus yang telah ditetapkan (seperti yang disarankan @Rogem), harap turunkan unduhan meta postingan yang relevan daripada solusi yang mematuhi konsensus itu.
Shaggy