Was ist meine PPCG ID?


16

Herausforderung

Geben Sie unter Angabe des Namens eines PPCG-Mitglieds dessen PPCG-ID-Nummer aus. Wenn der Benutzer nicht existiert, können Sie einen Fehler melden oder eine nicht positive Zahl zurückgeben. Wenn es mehrere Mitglieder mit diesem Namen gibt, können Sie nur eine oder alle IDs ausgeben.

Testfälle

"musicman523" -> 69054
"Dennis" -> 12012
"xnor" -> 20260
"Undichte Nonne" -> 48934
"fəˈnəˈtɪk" -> 64505
"Jörg Hülsermann" -> 59107
"Community" -> -1
"Jeder Benutzer, der nicht existiert" -> 0
"Alex" -> 69198 (dies ist ein mögliches Ergebnis)
"Leaky N" -> 0
"Jorge" -> 3716

1
Empfohlener Testfall: "Leaky N". Sollte 0 zurückgeben.
Okx

5
Kann unser Programm undefiniertes Verhalten für nicht existierende Benutzer zur Folge haben (Mine druckt 48934, zum Beispiel für einen nicht existierenden Benutzer)? Ich denke das sollte erlaubt sein, da Fehler sind.
Mr. Xcoder

4
@Okx Nein, ich nicht. Ich frage das OP, ob dieses Verhalten erlaubt ist. Wenn nicht, werde ich meine Antwort löschen oder korrigieren.
Mr. Xcoder

3
@OliverNi Giftig? Wie?
Okx

5
@Okx Er stellt dem OP eine gültige Frage und Sie schießen ihn sofort ab. Lassen Sie das OP antworten.
Oliver Ni

Antworten:


30

Stack Exchange Data Explorer , 56 54 53 51 46 Byte

-1 Byte dank Hyper Neutrino. -5 Bytes dank Giacomo Garabello.

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

Probieren Sie es online!

Ich bin nicht sicher, ob dies vollständig gültig ist, aber ... Die Eingabe muss in einfache Anführungszeichen gesetzt werden '.

Außerdem verstehe ich immer noch nicht, warum SQL-Programmierer gerne schreien, aber es ist anscheinend eine gute Übung, so ... SELECTALLES FROMALLES WHEREALLES LIKEALLES ALLES ALLES!

Erläuterung

LASSEN SIE MICH ERKLÄREN.

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 durch Entfernen der Leerzeichen um das Gleichheitszeichen
HyperNeutrino

1
NINJA'D IHR NINJA IN CHAT XD
HyperNeutrino

1
-1 Byte durch Umkehren der Reihenfolge der Operanden um den Gleichheitsoperator
HyperNeutrino

10
+1 für den Hinweis auf SQL-Programmierer, die gerne schreien (und für eine gute Sprachauswahl für Ihre Antwort :)
NH.

4
Warum haben Sie die Top 1 in dieser Abfrage gesetzt? OP sagte: "Wenn es mehrere Mitglieder mit diesem Namen gibt, können Sie nur eine oder alle IDs ausgeben" ...
Giacomo Garabello

5

JavaScript, 155 149 142 135 Bytes

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
Unterstützt es Sonderzeichen wie in Jörg Hülsermann?
Arnauld

4
Dies kehrte 0für Oliver:(
Oliver

Speicher 7 Bytes durch den Ersatz r=>r.items[0]).then(rmit ({items:[r]}). Zerstörungsauftrag ftw!
Kamoroso94

Sie können Folgendes verwenden: i=>fetch('//api.stackexchange.com/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)Wenn dies fehlschlägt, wird ein Versprechungsfehler zurückgegeben. Sie können auch einfach tun i=>fetch('/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)und sagen, dass es auf der API-Domäne ausgeführt werden muss
Downgoat

2
@ Oliver Was für ein anderer Oliver ???? Es kann nur einen geben
Oliver Ni

5

Python 3 + -Anfragen , 196 Byte

Danke @Wondercricket für -6 Bytes!

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

Verwendet die Stack Exchange API. Der Fehler , der Leaky Nund JorgeFehler.

Wenn es mehrere Benutzer mit demselben Namen gibt, werden alle gedruckt, was zulässig ist.


Es gibt mir gezippte Daten.
Oliver Ni

Eingabe Leaky N
schlägt fehl

@Okx behoben. ---
Oliver Ni

Da Sie "einen Fehler melden oder 0 zurückgeben" können, wenn der Benutzer nicht existiert, kann die letzte Zeile nicht einfach sein print a['user_id'], was einen KeyError auslöst?
Daniel

1
scheitert für "Jorge"
Felipe Nardi Batista

5

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

Gibt die Benutzer-ID zurück, wenn ein einzelner Benutzer vorhanden ist, den ersten Benutzer, der den Anforderungen entspricht, falls weitere vorhanden sind, und meldet andernfalls einen Fehler.


Sie können /2.2aus der API-URL entfernen .
Kevin Cruijssen

@ KevinCruijssen Vielen Dank
Mr. Xcoder

Hinweis : Versuchen Sie nicht, es mit auszuführen fəˈnɛtɪk, \u{...}sondern verwenden Sie es, da Python keine Nicht-ASCII-Zeichen toleriert
Mr. Xcoder,

Python 2 jedenfalls.
Totalhuman

3
scheitert für "Jorge"
Felipe Nardi Batista

3

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

Probelauf

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

Tolle Tatsache: Das Ergebnis wird nach Ruf sortiert, der höchste zuerst.


Eingabe Leaky N
fehlgeschlagen

Netter Trick mit %s.
Mr. Xcoder

@Okx Nicht für mich, das tut es nicht. >>> f('Leaky N')\n48934
Totalhuman

@totallyhuman Es sollte zurückkehren 0. Leaky Nexistiert nicht
Okx

@Okx behoben. - -
totalhuman

3

JavaScript, 128 119 Bytes

-9 Bytes dank Rogem .

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

1
Denken Sie, Sie würden einige Bytes mit der IPv4-Adresse sparen. (198.252.206.16 anstelle von api.stackexchange.com)

-1

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

Einige Bytes für die Behandlung von Sonderzeichen geopfert.

Muss unter der api.stackexchange.comDomain ausgeführt werden. Gibt eine Promise mit der ID zurück oder löst einen Fehler in der Promise aus, wenn der Benutzername nicht gefunden wird.

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

Hinweis: Diese Lösung wurde unabhängig von Uriels und seinen Kommentaren entwickelt. Wenn sich Uriel für die findMethode entscheidet, greife ich gerne auf meine längere, rekursive Version zurück.


2
Ich habe eine Metadiskussion zum Erfordernis einer bestimmten Ausführungsdomäne erstellt, da dies einige Bytes spart.
Birjolaxew

1
@Downvoter, bitte haben Sie den Anstand, einen Kommentar zu hinterlassen.
Shaggy

@ Shaggy würde ich aus dem gleichen Grund annehmen, als diese Metadiskussion gestartet wurde.

Downvoter, wenn Sie mit einem festgelegten Konsens nicht einverstanden sind (wie @Rogem vorschlägt), stimmen Sie den relevanten Meta-Post ab, anstatt Lösungen, die sich an diesen Konsens halten.
Shaggy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.