Sé que ha habido muchos desafíos sobre "los dos mejores golfistas de código del mundo", pero este es un poco más único, ya que es la Ronda 1 en una serie de desafíos (futuros) que involucran a los dos.
Su tarea es escribir un programa o función que devuelva dos cadenas ASCII distintas de espacios en blanco, correspondientes a la que tiene más reputación en el momento en que se ejecuta el programa, entre Dennis ♦ y Martin Ender ♦ . La parte difícil es que debe generar el "lazo" de cadena exacto en caso de que la reputación sea idéntica (no probable), y las dos cadenas ASCII distintas de espacios en blanco mencionadas anteriormente deberían ser diferentes a "lazo" * .
No se pueden realizar entradas, como nombres de usuario o ID de usuario. Como de costumbre, los acortadores de URL están prohibidos, al igual que las lagunas comunes.
Ejemplos:
Let the chosen string for Dennis be "D" and the chosen one for Martin Ender be "M" (should be specified)
If Dennis' rep > Martin Ender's rep => D
If it's the other way around => M
If it's a tie => tie
¡IMPORTANTE! Votar en publicaciones de Dennis & Martin con el único propósito de afectar un empate para probar las soluciones a continuación constituye una votación dirigida que está prohibida en toda la red de Stack Exchange. Si desea probar que una solución se genera correctamente
tie
, cambie las ID en ella a las de 2 usuarios que sabe que están vinculados. Vea esta publicación de Meta para más detalles.
* Creo que nadie hubiera usado eso, de todos modos
fuente
Respuestas:
05AB1E ,
6564 bytesCódigo:
Utiliza la codificación 05AB1E .
Explicación:
•в=6{•
convierte el númeroв=6{
de la base 255 a la base 10, lo que resulta en 1201208478 . La primera mitad es la identificación de Dennis (12012) y la segunda mitad es la identificación de Martin (8478). Dividir en piezas de 5 usando5ô
para obtener la siguiente matriz:Afortunadamente, podemos dejar el cero inicial de la ID de Martin, ya que esto seguirá funcionando (verifique el enlace antes de hacer clic para ver el cero inicial).
Ahora
vy
recorremos esta matriz usando y construimos la siguiente cadena a partir de este código 05AB1E:Mientras que
ÿ
es el elemento actual del iterador (usando interpolación de cadenas) ¡ Pruébelo en línea!Después de construir el enlace,
.w
lee todos los datos del enlace, lo que resulta en una gran cantidad de texto. Para raspar la reputación de esto, necesitamos dividirnos en la cadenatitle="reputation"
. O en una versión más comprimido:’„Ö="ˆ"’
. Dividir en este trozo de cuerda (con¡
) y obtener el segundo elemento (con1è
) y mantener los primeros 100 caracteres (conт£
).Ahora, nuestro texto raspado se parece un poco a esto:
Esta parte es fácil, simplemente eliminamos cualquier cosa menos dígitos para seguir siendo el número de reputación, para lo cual tenemos un builtin (
þ
). Terminamos el ciclo y envolvemos todo en una matriz}})
.Finalmente, podemos pasar a procesar los números de reputación:
Lo que da como resultado
D
,M
otie
.fuente
1è) and keep the first **100 characters** (with т£
. " Supone que es completamente de código de bloques, o debe ser " segundo elemento (con1è
) y dejar los primeros 100 caracteres (conт£
). " En lugar? Supongo un error tipográfico, pero si se supone que es así, estoy confundido ..Dennis: 140,033
;Martin: 140,003
, pero probé su código aquí tio.run/nexus/05ab1e#@/… , producetie
. ¿No debería salir en suD
lugar?.w
requiere acceso web, que está restringido en TIO (ejecuta 05AB1E en modo seguro). En el intérprete sin conexión, debería funcionar.PowerShell v3 +,
14712311910310196 BytesSe guardaron 24 bytes usando la salida verdadero / falso en lugar de los nombres.
Salvó otros 4 reestructurando los controles finales.
ahorró 16 al obtener solo la reputación de los dos usuarios de la solicitud, ahorra tener que usar
|% r*n
más de una vez, también significa que podemos deshacernos de un millón de corchetes y dos variables inútiles.-2 gracias a TessellatingHeckler : al usar un carácter de escape en lugar de dos comillas dobles para la url, también se eliminó
@
de la matriz que no era necesaria (oopsie)usé un
.ToString
truco extraño que nunca supe que existía hasta ahora recomendado por TessellatingHeckler -5, y finalmente por debajo de 100.Versión que devuelve nombres:
Esto se ve bastante desordenado debido al acortamiento de los nombres de los parámetros.
en cualquier lugar
|% r*n
parece que estamos obteniendo elReputatioN
, y|% d*
es elDisplay_name
usa
Invoke-RestMethod
(aliasirm
) para consultar la API, almacena el resultado llamadoItems
(conseguido|% I*
), en las dos variables$a
&$b
, una para cada jugador profesional, el trucoToString
(|% T*g
) da como resultado uno de los valoresD
,M
oTie
si el número es impar / par / cero.fuente
103! = 9.902900716486180407546715254581773349090165822114492483005280554699... × 10^163
longitud de bytes? : PToString
funcionó así con números +/-, lo recordaré para el futuro.Python 2 , 160 bytes
No es la respuesta más corta de Python, sino la más corta hasta ahora que no hace ninguna suposición.
Imprime
1
si Martin tiene más representante,-1
si yo tengo.fuente
JavaScript (ES6),
167156146144141132103 bytes¡Estúpido
fetch
y suPromise
encadenamiento estúpido y costoso !Asume, según lo permitido actualmente, que Dennis & Martin siempre serán los 2 usuarios mejor clasificados. Debe ejecutarse desde el nivel raíz de
api.stackexchange.com
. Devuelve unPromise
objeto (como ahora lo permite el consenso ) que contienetie
o el objeto JSON para quien tenga más representantes en ese momento. Si el objeto JSON no se considera salida válida, agregue 5 bytes para.link
.link
lugar de la primera letra deldisplay_name
, lo que también proporciona una mejor protección contra el futuro en contra de que cambien sus nombres de usuario para comenzar con la misma letra!Intentalo
Alternativa
Si llega un momento en que Dennis y Martin no están en la cima y aún queremos saber quién tiene la mayor cantidad de representantes entre ellos, necesitaríamos lo siguiente, a un costo de 10 bytes adicionales.
fuente
.display_name[0]
a.display_name
, o una alternativa aún más corto que todavía es único para los dos:.link
. ;) O solo el JSON completo, pero no estoy seguro de si cabe en la ventana emergente de alerta.link
embargo, bueno, estaba usando una consulta API filtrada para devolver solo la información que necesitaba.alert
aunque se mostrará un objeto JSON[object Object]
.Python 3,
160157151 bytes-3 bytes gracias a @KevinCruijssen
Imprime un enlace al usuario que tiene más reputación
Asume que están en el # 1 y # 2
Sin hacer ninguna suposición, Python 2, 157 bytes :
fuente
Python,
226225221 bytesSiento que esto es demasiado largo.
Imprime
"True"
si Martin tiene más representante que Dennis,"False"
si Dennis tiene más representante que Martin y"tie"
si tienen el mismo (en teoría. No puedo probar esto: P).https
->http
por 1 byte gracias a @KevinCruijssen!re as r, r.sub
->re, re.sub
por 4 bytes gracias a @ovs!fuente
https
ahttp
? Sé que PPCG es completamente https ahora, pero ¿tal vez se dirige automáticamente a HTTPS cuando navegas a HTTP en Python, tal como lo hace en un navegador?re as R
. Solo useimport requests as r,re
yre.sub
cmp
función para guardar algunos bytes reemplazando las últimas tres líneas con algo comoprint['tie',0,1][cmp(f('8478'),f('12012'))]
PHP, 167 bytes
imprime -1 para Dennis, 1 para Martin Ender. empate en caso de empate
fuente
Python 2 ,
228223204199 bytesHice esto en un punto de acceso móvil, así que ... no es genial ...
Asume que ambos siempre estarán en los mismos cien mil.No asume nada ahora. :REImprime
True
si Dennis tiene más reputación que Martin, de loFalse
contrario yTie
si están ... atados.fuente
Bash + jq ,
140133 bytesFormateado y explicado
Primero,
enrollamosw3m la API(y usamos:--compressed
, o abreviamos--com
para descomprimir)Eso es algo de JSON. Observe que el pedido no es estable, no se basa en la reputación. JQ luego procesa el JSON, que es para lo que está hecho.
Usamos lo
1/x
anterior para generar un error de división por cero cuando min == max, por lo que en una situación de empate. El||echo tie
en bash atrapa eso.Tenga en cuenta que JQ imprime una advertencia en stderr en ese caso, pero consideramos solo stdout el resultado real del programa;)
fuente
w3m
lugar decurl --com
guardar algunos bytes. Además, creo que vale la pena mencionar que esto requiere jq 1.5, ya que jq 1.4 no generó un error de división por cero.Stackexchange API Data Explorer ,
184180 bytesGracias a @Kevin Cruijssen por -4 bytes
Imprime 1 para Dennis y 2 para Martin
Ya que ayer aprendí sobre SEADE, esto debería ser muy fácil de superar.
Pruébalo aquí
fuente
'D'
y'M'
a0
y1
.