Quel est mon identifiant PPCG?

16

Défi

Étant donné le nom d'un membre PPCG, sortez son numéro d'identification PPCG. Si l'utilisateur n'existe pas, vous pouvez signaler une erreur ou renvoyer un nombre non positif. S'il existe plusieurs membres portant ce nom, vous pouvez choisir de ne générer qu'un seul ID ou tous.

Cas de test

"musicman523" -> 69054
"Dennis" -> 12012
"xnor" -> 20260
"Leaky Nun" -> 48934
"fəˈnɛtɪk" -> 64505
"Jörg Hülsermann" -> 59107
"Communauté" -> -1
"Tout utilisateur qui n'existe pas" -> 0
"Alex" -> 69198 (c'est un résultat possible)
"Leaky N" -> 0
"Jorge" -> 3716
musicman523
la source
1
Cas de test recommandé: "Leaky N". Devrait retourner 0.
Okx
5
Notre programme peut-il entraîner un comportement indéfini pour les utilisateurs inexistants (le mien imprime 48934, par exemple pour un utilisateur inexistant)? Je pense que cela devrait être autorisé, car les erreurs le sont.
M. Xcoder
4
@Okx Non, je ne le fais pas. Je demande au PO si ce comportement est autorisé. Si ce n'est pas le cas, je vais supprimer ou corriger ma réponse.
M. Xcoder
3
@OliverNi Toxique? Comment?
Okx
5
@Okx Il pose une question valable au PO et vous l'abattez immédiatement. Laissez l'OP répondre.
Oliver Ni

Réponses:

30

Stack Exchange Data Explorer , 56 54 53 51 46 octets

-1 octet grâce à Hyper Neutrino. -5 octets grâce à Giacomo Garabello.

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

Essayez-le en ligne!

Je ne sais pas si cela est complètement valide mais ... L'entrée doit être entourée de guillemets simples '.

De plus, je ne comprends toujours pas pourquoi les programmeurs SQL aiment crier mais c'est apparemment une bonne pratique alors ... SELECTTOUT FROMTOUT WHERETOUT LIKETOUT!

Explication

LAISSEZ-MOI EXPLIQUER.

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
totalement humain
la source
13
-2 octets en supprimant les espaces autour du signe égal
HyperNeutrino
1
NINJA'D YOUR NINJA IN CHAT XD
HyperNeutrino
1
-1 octet en inversant l'ordre des opérandes autour de l'opérateur d'égalité
HyperNeutrino
10
+1 pour la référence aux programmeurs SQL qui aiment crier (et pour un bon choix de langue pour votre réponse :)
NH.
4
pourquoi avez-vous mis le top 1 dans cette requête? OP a dit "S'il y a plusieurs membres avec ce nom, vous pouvez choisir de ne produire qu'un seul ID ou tous" "
Giacomo Garabello
5

JavaScript, 155 149 142 135 octets

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
la source
1
Prend-il en charge les caractères spéciaux comme dans Jörg Hülsermann?
Arnauld
4
Ceci est revenu 0pour Oliver:(
Oliver
Économisez 7 octets en remplaçant r=>r.items[0]).then(rpar ({items:[r]}). Affectation déstructurer FTW!
kamoroso94
Vous pouvez utiliser: i=>fetch('//api.stackexchange.com/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)car il renverra une erreur de promesse en cas d'échec. Vous pouvez également simplement faire i=>fetch('/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)et dire qu'il doit être exécuté sur le domaine api
Downgoat
2
@Oliver QUEL autre oliver ???? IL NE PEUT ÊTRE QU'UN
Oliver Ni
5

Python 3 + requêtes , 196 octets

Merci @Wondercricket pour -6 octets!

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

Utilise l'API Stack Exchange. Correction des erreurs Leaky Net Jorge.

S'il y a plusieurs utilisateurs avec le même nom, il les imprime tous, ce qui est autorisé.

Oliver Ni
la source
Cela me donne des données compressées ..
Oliver Ni
Leaky N
Échec de l'
@Okx Fixed. ---
Oliver Ni
Puisque vous pouvez "signaler une erreur ou retourner 0" si l'utilisateur n'existe pas, la dernière ligne ne peut-elle pas être juste print a['user_id'], ce qui déclenchera une erreur de clé?
Daniel
1
échoue pour "Jorge"
Felipe Nardi Batista
5

Python 2 + requêtes , 187 octets

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]

Renvoie l'ID utilisateur s'il existe un seul utilisateur, le premier utilisateur qui correspond aux exigences s'il en existe plus et signale une erreur sinon.

M. Xcoder
la source
Vous pouvez supprimer /2.2de l'URL API.
Kevin Cruijssen
@KevinCruijssen Merci beaucoup
M. Xcoder
Astuce : N'essayez pas de l'exécuter avec fəˈnɛtɪk, utilisez à la \u{...}place, car Python ne tolère pas non-ASCII
M. Xcoder
Python 2, de toute façon.
2017 totalement humain
3
échoue pour "Jorge"
Felipe Nardi Batista
3

Python 2 + requêtes , 173 octets

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*

Exemple d'exécution

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

Fait amusant: le résultat est trié par réputation, le plus élevé en premier.

totalement humain
la source
Leaky N
Échec de l'
Belle astuce avec %s.
M. Xcoder
@Okx Pas pour moi, ce n'est pas le cas. >>> f('Leaky N')\n48934
2017 totalement humain
@totallyhuman Il devrait revenir 0. Leaky Nn'existe pas
Okx
@Okx Fixed. - -
totalement humain
3

JavaScript, 128 119 octets

-9 octets grâce à Rogem .

n=>fetch("198.252.206.16/users?site=codegolf&inname="+n).then(r=>r.text()).then(t=>t.match(`\\/([^\\/]*)\\/`+n+`"`)[1])
Oliver
la source
1
Pensez à économiser quelques octets avec l'adresse IPv4. (198.252.206.16 au lieu de api.stackexchange.com)
-1

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

Sacrifié quelques octets pour gérer les caractères spéciaux.

Doit être exécuté sous le api.stackexchange.comdomaine. Renvoie une promesse contenant l'ID ou renvoie une erreur dans la promesse si le nom d'utilisateur est introuvable.

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

Remarque: Cette solution a été développée indépendamment d'Uriel et de ses commentaires; si Uriel décide d'utiliser la findméthode, je suis heureux de revenir à ma version plus longue et récursive.

Hirsute
la source
2
J'ai créé une discussion méta sur nécessitant un certain domaine d'exécution, car cela ne fait économiser un peu d' octets.
Birjolaxew
1
@Downvoter, veuillez avoir la décence de laisser un commentaire.
Shaggy
@Shaggy Je suppose que pour la même raison que cette méta-discussion a été lancée.
Downvoter, si vous n'êtes pas d'accord avec un consensus établi (comme @Rogem le suggère), veuillez downvote le meta post pertinent plutôt que des solutions qui adhèrent à ce consensus.
Shaggy