私のPPCG IDとは何ですか?


16

チャレンジ

PPCGメンバーの名前を指定して、PPCG ID番号を出力します。ユーザーが存在しない場合は、エラーを報告するか、正でない数を返すことがあります。この名前のメンバーが複数ある場合、1つのIDのみを出力するか、すべてのIDを出力するかを選択できます。

テストケース

"musicman523"-> 69054
「デニス」-> 12012
「xnor」-> 20260
「漏れた修道女」-> 48934
「fəˈnɛtɪk」-> 64505
「ヨルクヒュルサーマン」-> 59107
「コミュニティ」-> -1
「存在しないユーザー」-> 0
「Alex」-> 69198(これは考えられる結果の1つです)
「漏れやすいN」-> 0
「ホルヘ」-> 3716

1
推奨テストケース:「Leaky N」。0を返す必要があります
Okx

5
私たちのプログラムは、存在しないユーザーに対して未定義の動作を引き起こす可能性があります(たとえば、存在しないユーザーの場合、印刷物48934)。エラーがあるので、これは許可されるべきだと思います。
Mr Xcoder

4
@Okxいいえ、私はしません。この動作が許可されているかどうかをOPに尋ねています。そうでない場合は、回答を削除または修正します。
ミスターXcoder

3
@OliverNi毒性?どうやって?
Okx

5
@Okx彼はOPに有効な質問をしているので、すぐに彼を撃downします。OPに答えさせてください。
オリバーNi

回答:


30

Stack Exchange Data Explorer56 54 53 51 46バイト

Hyper Neutrinoのおかげで-1バイト。Giacomo Garabelloのおかげで-5バイト。

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

オンラインでお試しください!

これが完全に有効かどうかはわかりませんが...入力は単一引用符で囲む必要があります'

また、私はまだ叫びたい理由SQLプログラマを得ることはありませんが、それはそう...明らかに良い習慣だSELECTEVERYTHING FROMEVERYTHING WHEREEVERYTHING LIKEEVERYTHING!

説明

説明してください。

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スペースを除去することにより、バイトAROUND等号
HyperNeutrino

1
チャットXDであなたのニンジャを忍者に
HyperNeutrino

1
等価演算子の周囲のオペランドの順序を逆にすることで-1バイト
-HyperNeutrino

10
叫ぶのが好きなSQLプログラマーへの参照(および回答に適した言語の選択:)
NH。

4
なぜこのクエリでトップ1を入れたのですか?OPは...「この名前を持つ複数のメンバーがある場合、あなたは出力にのみ1つのIDまたはそれらのすべてを選んでもよい」と述べた
ジャコモ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ますか?
アーナルド

4
これは、返された0ためOliver:(
オリバー

に置き換えr=>r.items[0]).then(rて7バイト節約します({items:[r]})割り当てを非構造 FTW!
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別のオリバーは何ですか???? 1つだけがあります
オリバーNi

5

Python 3 + リクエスト、196バイト

-6バイトをありがとう@Wondercricket!

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エラーを修正しました。

同じ名前のユーザーが複数いる場合は、すべてのユーザーが出力されますが、これは許可されています。


それは私がデータ.. gzipで圧縮できます
オリバー・ニッケル

入力に失敗するLeaky N
-Okx

@Okx修正。---
オリバーNi

ユーザーが存在しない場合は「エラーを報告する 0を返す」ことができるため、最後の行をjust print a['user_id']にすることはできず、KeyErrorがスローされますか?
ダニエル

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.2API-urlから削除できます。
ケビンCruijssen

@KevinCruijssenどうもありがとう
Mr. Xcoder

ヒント:とそれを実行しようとしないでくださいfəˈnɛtɪk使用、\u{...}Pythonは非ASCIIを容認していないため、代わりに
氏Xcoder

とにかく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

@Okx私にとってはそうではありません。>>> f('Leaky N')\n48934
完全に人間

@totallyhumanを返す必要があり0ます。Leaky N存在しません
-Okx

@Okx修正。- -
totallyhuman

3

JavaScript、128 119バイト

Rogemのおかげで-9バイト。

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

1
IPv4アドレスでいくつかのバイトを保存すると思います。(代わりapi.stackexchange.comの198.252.206.16)

-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
私が作成したメタ議論ことがあるため、特定の実行ドメインを必要とするのを行い、かなりの数のバイトを保存します。
ビルジョラクセ

1
@Downvoter、コメントを残す良識を持ってください。
シャギー

@Shaggyメタディスカッションが開始されたのと同じ理由で推測します。

(@Rogemが示唆しているように)確立されたコンセンサスに同意しない場合は、そのコンセンサスに準拠するソリューションではなく、関連するメタ投稿をダウンボーターしてください。
シャギー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.