¿Cuál es mi identificación PPCG?

16

Desafío

Dado el nombre de un miembro PPCG, envíe su número de identificación PPCG. Si el usuario no existe, puede informar un error o devolver cualquier número no positivo. Si hay varios miembros con este nombre, puede optar por generar solo un ID o todos ellos.

Casos de prueba

"musicman523" -> 69054
"Dennis" -> 12012
"xnor" -> 20260
"Monja con fugas" -> 48934
"fəˈnɛtɪk" -> 64505
"Jörg Hülsermann" -> 59107
"Comunidad" -> -1
"Cualquier usuario que no existe" -> 0
"Alex" -> 69198 (este es un resultado posible)
"N permeable" -> 0
"Jorge" -> 3716
musicman523
fuente
1
Caso de prueba recomendado: "Leaky N". Debería devolver 0.
Okx
55
¿Puede nuestro programa dar como resultado un comportamiento indefinido para usuarios inexistentes (las minas imprimen 48934, por ejemplo, para un usuario no existente)? Creo que esto debería permitirse, ya que los errores son.
Sr. Xcoder
44
@ Ok No, no lo hago. Le pregunto al OP si este comportamiento está permitido. Si no es así, eliminaré o corregiré mi respuesta.
Sr. Xcoder
3
@OliverNi Tóxico? ¿Cómo?
Okx
55
@Okx Él está haciendo una pregunta válida al OP y usted lo está derribando de inmediato. Deje que el OP responda.
Oliver Ni

Respuestas:

30

Explorador de datos de Exchange de pila , 56 54 53 51 46 bytes

-1 byte gracias a Hyper Neutrino. -5 bytes gracias a Giacomo Garabello.

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

Pruébalo en línea!

No estoy seguro si esto es completamente válido pero ... La entrada debe estar entre comillas simples '.

Además, todavía no entiendo por qué a los programadores de SQL les gusta gritar, pero aparentemente es una buena práctica, así que ... ¡ SELECTTODO FROMTODO WHERETODO LIKETODO!

Explicación

DEJAME EXPLICAR.

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
totalmente humano
fuente
13
-2 BYTES AL QUITAR LOS ESPACIOS ALREDEDOR DEL SIGNO IGUAL
HyperNeutrino
1
NINJA'D YOUR NINJA IN CHAT XD
HyperNeutrino
1
-1 byte invirtiendo el orden de los operandos alrededor del operador de igualdad
HyperNeutrino
10
+1 para la referencia a los programadores de SQL que quieren gritar (y para una buena elección de lenguaje para su respuesta :)
NH.
44
¿Por qué has puesto el top 1 en esta consulta? OP dijo "Si hay varios miembros con este nombre, puede optar por generar solo una ID o todos ellos" ...
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

Uriel
fuente
1
¿Admite caracteres especiales como en Jörg Hülsermann?
Arnauld
44
Esto regresó 0para Oliver:(
Oliver
Ahorre 7 bytes reemplazando r=>r.items[0]).then(rcon ({items:[r]}). Asignación de desestructuración ftw!
kamoroso94
Puede usar: i=>fetch('//api.stackexchange.com/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)ya que devolverá un error de promesa si falla. También puede hacer i=>fetch('/users?site=codegolf&inname='+i).then(r=>r.json()).then(r=>r.items[0].user_id)y decir que debe ejecutarse en el dominio de la API
Downgoat
2
@Oliver ¿QUÉ otro oliver ???? PUEDE HABER SOLO UNO
Oliver Ni
5

Python 3 + solicitudes , 196 bytes

¡Gracias @Wondercricket por -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

Utiliza Stack Exchange API. Se corrigieron los errores Leaky Ny Jorge.

Si hay varios usuarios con el mismo nombre, los imprime a todos, lo cual está permitido.

Oliver Ni
fuente
Me da datos comprimidos ...
Oliver Ni
Falla en la entradaLeaky N
Okx
@Okx fijo. ---
Oliver Ni
Dado que puede "informar un error o devolver 0" si el usuario no existe, ¿no puede ser la última línea justa print a['user_id'], lo que arrojará un KeyError?
Daniel
1
falla para "Jorge"
Felipe Nardi Batista
5

Python 2 + solicitudes , 187 bytes

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]

Devuelve la ID de usuario si existe un solo usuario, el primer usuario que coincide con los requisitos si existen más, e informa un error de lo contrario.

Sr. Xcoder
fuente
Puede eliminar /2.2de la API-url.
Kevin Cruijssen
@KevinCruijssen Muchas gracias
Sr. Xcoder
Sugerencia : no intente ejecutarlo fəˈnɛtɪk, use \u{...}en su lugar, porque Python no tolera no ASCII
Sr. Xcoder
Python 2, de todos modos.
totalmente humano
3
falla para "Jorge"
Felipe Nardi Batista
3

Python 2 + solicitudes , 173 bytes

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*

Ejecución de la muestra

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

Dato curioso: el resultado se ordena por reputación, el más alto primero.

totalmente humano
fuente
Falla en la entradaLeaky N
Okx
Buen truco con %s.
Sr. Xcoder
@Okx No es para mí, no lo hace. >>> f('Leaky N')\n48934
Totalmente humano el
@totallyhuman Debería volver 0. Leaky Nno existe
Okx
@Okx fijo. - -
totalmente humano
3

JavaScript, 128 119 bytes

-9 bytes gracias a Rogem .

n=>fetch("198.252.206.16/users?site=codegolf&inname="+n).then(r=>r.text()).then(t=>t.match(`\\/([^\\/]*)\\/`+n+`"`)[1])
Oliver
fuente
1
Piensa que guardarías algunos bytes con la dirección IPv4. (198.252.206.16 en lugar de api.stackexchange.com)
-1

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

Sacrificó algunos bytes para manejar caracteres especiales.

Necesita ejecutarse bajo el api.stackexchange.comdominio. Devuelve una Promesa que contiene la ID o Lanza un error en la Promesa si no se puede encontrar el nombre de usuario.

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

Nota: Esta solución fue desarrollada independientemente de Uriel y sus comentarios; Si Uriel decide usar el findmétodo, me alegra volver a mi versión recursiva más larga.

Lanudo
fuente
2
He creado una discusión meta en requerir un cierto dominio de ejecución, ya que hace guardar un buen número de bytes.
Birjolaxew
1
@Downvoter, ten la decencia de dejar un comentario.
Shaggy
@Shaggy Supongo por la misma razón que se inició esa meta discusión.
Votante negativo, si no está de acuerdo con un consenso establecido (como sugiere @Rogem), reduzca la meta publicación relevante en lugar de las soluciones que se adhieren a ese consenso.
Shaggy