PPCG kimliğim nedir?


16

Meydan okuma

Bir PPCG üyesinin adı verildiğinde, PPCG kimlik numaralarını girin. Kullanıcı yoksa, bir hata bildirebilir veya pozitif olmayan bir sayı döndürebilirsiniz. Bu ada sahip birden fazla üye varsa, yalnızca bir kimlik veya hepsinin çıktısını almayı seçebilirsiniz.

Test Durumları

"musicman523" -> 69054
"Dennis" -> 12012
"xnor" -> 20260
"Sızdıran Rahibe" -> 48934
"fəˈnɛtɪk" -> 64505
"Jörg Hülsermann" -> 59107
"Topluluk" -> -1
"Var olmayan herhangi bir kullanıcı" -> 0
"Alex" -> 69198 (bu olası bir sonuçtur)
"Sızdıran N" -> 0
"Jorge" -> 3716

1
Önerilen test durumu: "Sızdıran N". 0 dönmelidir.
Okx

5
Programımız varolmayan kullanıcılar için tanımlanmamış davranışlarla sonuçlanabilir mi (mayın 48934'ü yazdırır, örneğin mevcut olmayan bir kullanıcı için)? Hatalar olduğu için buna izin verilmesi gerektiğini düşünüyorum.
Bay Xcoder

4
@Okx Hayır, bilmiyorum. OP'ye bu davranışa izin verilip verilmediğini soruyorum. Değilse cevabımı siler veya düzeltirim.
Bay Xcoder

3
@OliverNi Zehirli mi? Nasıl?
Okx

5
@Okx OP'ye geçerli bir soru soruyor ve onu hemen vuruyorsun. OP cevap versin.
Oliver Ni

Yanıtlar:


30

Stack Exchange Veri Gezgini , 56 54 53 51 46 bayt

Hyper Neutrino sayesinde -1 bayt. Giacomo Garabello sayesinde -5 bayt.

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

Çevrimiçi deneyin!

Bunun tamamen geçerli olup olmadığından emin değilim ... Girdi tek tırnak içine alınmalıdır '.

Ayrıca, SQL programcılarının neden bağırmaktan hoşlanmadıklarını bilmiyorum ama görünüşe göre iyi bir uygulama ... SELECTHER FROMŞEY WHEREHER LIKEŞEY HER ŞEY HER ŞEY!

açıklama

AÇIKLAMAMA İZİN VER.

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'NIN SİZİN NINJA'NIZ SOHBET XD
HyperNeutrino

1
Eşitlik operatörü çevresindeki işlenenlerin sırasını tersine çevirerek -1 bayt
HyperNeutrino

10
Bağırmak isteyen SQL programcılarına referans için +1 (ve cevabınız için güzel bir dil seçimi için :)
NH.

4
neden bu sorguda ilk 1'i girdiniz? OP, "Bu ada sahip birden fazla üye varsa, yalnızca bir kimlik veya tümünü vermeyi seçebilirsiniz" ...
Giacomo Garabello

5

JavaScript, 155 149 142 135 bayt

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
Gibi özel karakterleri destekliyor mu Jörg Hülsermann?
Arnauld

4
Bu iade 0için Oliver:(
Oliver

Değiştirerek 7 bayt kaydet r=>r.items[0]).then(rile ({items:[r]}). Yıkım ödevi ftw!
kamoroso94

Bunu kullanabilirsiniz: i=>fetch('//api.stackexchange.com/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)başarısız olursa bir söz hatası döndürür. Ayrıca bunu yapabilir i=>fetch('/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)ve bunun api alanında çalıştırılması gerektiğini söyleyebilirsiniz
Downgoat

2
@Oliver NE başka bir oliver ???? SADECE BİR OLABİLİR
Oliver Ni

5

Python 3 + istekleri , 196 bayt

-6 bayt için @Wondercricket teşekkürler!

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'sını kullanır. Leaky NVe Jorgehataları düzeltildi .

Aynı ada sahip birden fazla kullanıcı varsa, bunlara izin verilir, hepsini yazdırır.


Bana gzip veri veriyor ..
Oliver Ni

Giriş başarısızLeaky N
Okx

@Okx Düzeltildi. ---
Oliver Ni

Kullanıcı yoksa " bir hata bildirebilir veya 0 döndürür", son satır sadece olamaz print a['user_id'], bu bir KeyError atar?
Daniel

1
"Jorge" için başarısız
Felipe Nardi Batista

5

Python 2 + istekleri , 187 bayt

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]

Tek bir kullanıcı varsa kullanıcı kimliğini döndürür, daha fazlası varsa gereksinimleri karşılayan ilk kullanıcı olur ve aksi halde hata bildirir.


/2.2API-url'sinden kaldırabilirsiniz .
Kevin Cruijssen

@KevinCruijssen Çok teşekkürler
Bay

İpucu : ile çalıştırmayı deneyin Do fəˈnɛtɪkkullanım, \u{...}Python ASCII olmayan tahammül etmez, çünkü bunun yerine
Sn Xcoder

Her neyse, Python 2.
totallyhuman

3
"Jorge" için başarısız
Felipe Nardi Batista

3

Python 2 + istekleri , 173 bayt

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*

Örnek çalışma

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

Eğlenceli gerçek: sonuç itibarına göre, en yüksek önce sıralanır.


Giriş başarısızLeaky N
Okx

Güzel numara %s.
Bay Xcoder

@Okx Benim için değil, değil. >>> f('Leaky N')\n48934
totallyhuman

@totallyhuman Geri dönmeli 0. Leaky Nmevcut değil
Okx

@Okx Düzeltildi. - -
totallyhuman

3

JavaScript, 128 119 bayt

Rogem sayesinde -9 bayt .

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

1
IPv4 adresiyle bazı bayt tasarruf edeceğinizi düşünün. (Api.stackexchange.com yerine 198.252.206.16)

-1

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

Özel karakterleri işlemek için birkaç bayt kurban etti.

api.stackexchange.comAlan adı altında çalıştırılması gerekiyor . Kimliği içeren bir Promise döndürür veya kullanıcı adı bulunamazsa Promise'ta bir hata atar.

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

Not: Bu çözüm Uriel ve yorumlarından bağımsız olarak geliştirilmiştir; Uriel findyöntemi kullanmaya karar verirse , daha uzun, özyinelemeli sürüme geri döndüğüm için mutluyum.


2
Oluşturduğum bir meta tartışma bu yana, belli bir yürütme alanını gerektiren üzerinde yaptığı epeyce bayt tasarruf.
Birjolaxew

1
@Downvoter, lütfen yorum bırakma nezaketine sahip ol.
Shaggy

@Shaggy, meta tartışmanın başladığıyla aynı nedenden ötürü varsayıyorum.

Downvoter, yerleşik bir konsensüse katılmıyorsanız (@Rogem'in önerdiği gibi), lütfen bu konsensüse uygun çözümler yerine ilgili meta postayı aşağı indirin.
Shaggy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.