var QUESTION_ID=89919,OVERRIDE_USER=30525;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Respuestas:
bash + w3m + grep + cut,
65595854 bytesfuente
cut -d '"'
acut -d\"
para guardar dos bytes. Si usa enw3m
lugar decurl -s
puede ahorrar 4 más.C (+ sockets),
433429280276270259 bytesEntonces resulta que C no es bueno para descargar recursos de Internet y analizarlos como JSON. ¿Quien sabe?
Este código es (naturalmente) súper laxo con verificación de errores, por lo que supongo que si medalbot.com quisiera enviar datos maliciosos, podrían desencadenar desbordamientos de búfer, etc. Además, el último código espera ciertos valores para las constantes (por ejemplo
AF_INET = 2
) será probablemente ser el caso en todas partes, pero no está garantizada.Aquí está el código original que no es tan frágil (pero aún así no es muy robusto o seguro):
Descompostura:
Esto no es muy bueno para el servidor ya que no enviamos
Connection: close\r\n
como parte de la solicitud HTTP. También omite elAccept
encabezado ya que medalbot.com no parece estar usando compresión en ningún caso, y pierde el espacio despuésHost:
(nuevamente, el servidor parece estar bien con esto). Sin embargo, no parece que se pueda eliminar nada más.Una vez que finalizan las olimpiadas, el comportamiento más probable para este programa es segfault tratando de leer la ubicación de memoria 9. A menos que un pirata informático malvado se haga cargo del dominio, en cuyo caso el comportamiento más probable es que establezca algún byte a 0 en la dirección estructuras de información, que probablemente no sea demasiado peligroso en realidad. ¿Pero quién puede decir con estos malvados hackers?
fuente
PowerShell v4 +,
8869 bytesUtiliza
iwr
(el alias paraInvoke-WebRequest
) para obtener la API. Lo alimentamos como parámetro de entrada alConvertFrom-Json
incorporado que extrae el texto JSON en una matriz de objetos personalizada. Encapsulamos esa matriz de objetos en parens, tomamos los primeros tres elementos[0..2]
y tomamos el.country_name
de cada uno de ellos.Requiere al menos v4 + para las propiedades de múltiples objetos, de lo contrario necesitaríamos usar algo como en su
|Select "country_name"
lugar. Requiere al menos v3 + para elConvertFrom-Json
incorporado.fuente
http://www.
y PS no le importahttp://
o el sitio acercawww.
. Mi PS (5.1.14393) tampoco parece importarle.content
.ConvertFrom-Json
no necesitaba explícitamente solo la.content
parte de la solicitud web, pero también funciona en mi configuración.R,
98, 112, 108 bytesGolfed 4 gracias a @miff
La primera línea importa datos utilizando una biblioteca JSON. La segunda línea toma los nombres de países relevantes. Ordena los países por medallas de oro en orden creciente, invierte los índices y toma los primeros 3, imprimiéndolos.
fuente
rev(order(a$g))
conorder(-a$g)
para guardar 4 bytesJavaScript (ES6), 122 bytes
Debido a un problema de seguridad del navegador , este código debe ejecutarse
medalbot.com
. Sin embargo, no aprovecha eso y podría ejecutarse en otro lugar. También tenga en cuenta que inserté el\n
carácter, pero solo cuento como uno, porque podría reemplazarlo por unoNodo.js (ES6), 173 bytes
Esto habría sido mucho más corto si la API devolviera los datos en un solo tramo, pero dado que regresa en dos secciones, debo concatenar las partes y combinarlas, y luego analizarlas.
Node.js (ES6) + Solicitud, 138 bytes
Mejor, pero aún no tan bueno como la versión del navegador. Gracias a buscar API! Request es una popular biblioteca de cliente HTTP que se usa para simplificar las solicitudes, y puede ver que surte efecto aquí.
fuente
bash + w3m + jq ,
8359 bytesGracias a Jordan por tres bytes.
¡Gracias a USTED por 24 bytes más! Resulta que los datos están ordenados. Guau. :RE
fuente
.|
e indexar el resultadosort_by
directamente, y puede guardar otro byte utilizando en[:3][]
lugar de[0,1,2]
. Todos juntos:sort_by(-.gold_count)[:3][].country_name
.w3m medalbot.com/api/v1/medals|jq -r '.[:3][].country_name'
Java 8,
261258 bytesEsto utiliza una lambda para guardar un par de bytes y la biblioteca de red para obtener la página web. Aparte de eso es solo Java.
Aquí está mi (antiguo) POJO para probar (y jugar golf):
Actualizar
java.net
importaciónfuente
i
pero Java no convierte booleano a int o viceversa, si eso era lo que estabas pensando. También me pusiste bastante nervioso con esa última edición.MATL , 67 bytes
Esto no funciona en línea porque la función
Xi
(urlread
) no está permitida.Ejemplo de ejecución:
Explicación
Esto lee el contenido como una cadena y luego aplica la expresión regular
'(?<="c.+e": ")[^"]+'
para extraer nombres de países. La expresión regular utiliza mirar hacia atrás con en"c.+e"
lugar de"country_name"
reducir la longitud del código.fuente
Python 3,
202, 164 bytes.Python 3 no hace un manejo corto de url / json. : /
No me di cuenta de que la API ya está ordenada por conteo de oro
fuente
Python 2,
120113 bytesGracias @Nick T y @Value Ink
fuente
from urllib import*
y el uso justourlopen
más tarde guarda 1 byte. Además, debe poder tomar la declaración de impresión y colocarla justo después de los dos puntos, lo que le ahorrará la sangría.urlopen
objetolist()
, ¿eso hace lo mismo que.readlines()
?JavaScript + jQuery,
114100bytesPor el motivo de las solicitudes de origen cruzado, esto debe ejecutarse desde el
medalbot.com
dominio (con jQuery).Historia
fuente
$.get("www.medalbot.com/api/v1/medals",a=>alert(a[0][c='country_name']+'\n'+a[1][c]+'\n'+a[2][c]))
Ruby,
9779 +-rnet/http
(11) = 90 bytesUtiliza una modificación del patrón regex de la respuesta MATL de Luis Mendo , optimizada aún más por @Jordan, ya que Ruby no admite cuantificadores en retrospectivas.
-18 bytes de @Jordan.
fuente
.map(&:last)
por completo durante 12 bytes, y omita el/
en/api
para uno más./"cou.+"(.+)"/
/y_.+"(.+)"/
./
causa errores en mi versión de Ruby. ¿O podría ser la red en la que estoy? Lo que sea. Fui con una expresión regular ligeramente diferente a la que sugeriste pero de la misma longitud.PowerShell, 60
La misma idea básica que TimmyD (no vi su respuesta antes de publicar), pero un poco más corta :-)
fuente
|% c*
análisis? Quiero decir, lo hace, solo lo intenté, pero esa es una sintaxis extraña (incluso se destaca en mi ISE como un error).ForEach-Object [-MemberName] <String>
. Los-MemberName
caracteres comodín soportes de parámetros, por lo que en este caso se expande el único miembro de coincidencia que comodín:country_name
. También guarda bastantes personajes ;-)Mathematica
9666 bytes@alephalpha encontró una manera de trabajar directamente desde el archivo (sin guardarlo), ¡ahorrando así 30 bytes!
Import
importa el archivo como un archivo JSON sin formato.[[;;3,2]]
toma las filas 1-3, segunda entrada (nombre del país).fuente
Import["http://www.medalbot.com/api/v1/medals","RawJSON"][[;;3,2]]
PHP,
205 139 124 116 111109 bytesSolo quería usar el nuevo operador de nave espacial para PHP 7 una vez ( EDITAR : es superfluo, ya que no es necesario ordenarlo):
Si omitimos el paso de clasificación innecesario y asumimos que la API entrega los datos ya ordenados por gold_count descendente (como parece), podemos acortar esto aún más:
Nota: El salto de línea dentro de la cadena es intencional para guardar un byte de \ n
Historia
fuente
error_reporting
el valor predeterminado no muestra avisos, puede omitir las comillas dobles. Y la API de medalbot parece funcionar sin www. subdominio también. Entonces no necesitas las llavesecho
.for(;$i<3;)echo$d[+$i++][country_name]." "
reduce con 5 bytes. El último espacio es una entrada fuera de pista. O solo como un bucle whilewhile($i<3)
BASH + w3m + utilidades principales, 70 bytes
Parece que la salida ya está ordenada. Solo necesito tirar todo el texto extra.
fuente
CJam (57 bytes)
La demostración en línea no está disponible porque recupera contenido de la web. Esto engaña al no analizar JSON en realidad, pero suponiendo que la estructura no cambiará. (Pero también lo hacen la mayoría de las respuestas existentes, de diferentes maneras).
fuente
Python 2, 117 bytes
fuente
import
y*
, y moviendoprint
a directamente después de los dos puntos en línea2
. Generalmente usamos#
s en lugar de**
antes y después para nuestros encabezados.Clojure, 122 bytes
No se utiliza la biblioteca JSON :). Lee la cadena de la URL, reemplaza los dos puntos con una cadena vacía y evalúa la cadena que resulta en el mapa de Clojure. Toma los primeros 3 elementos y los mapas funcionan con entusiasmo que imprime la
country_name
propiedad de cada elemento.fuente
Java 8
386384459 bytes2 bytes guardados de @Easterly Irk
Mi primer envío de código de golf, así que estoy seguro de que hay una manera de ahorrar muchos bytes, pero bueno :)
Utiliza Gson para leer el JSON.
Requiere:
Código de golf:
Código sin golf:
fuente
import
s para compilar?R,
9795 bytesPoca mejora con respecto a la respuesta del usuario5957401, no se requiere clasificación y un nombre de biblioteca más corto. También mi primer intento de jugar al golf;)
fuente
Kotlin (Script) ,
125121119 bytesEjecutable con
kotlinc -script <filename>
oa través de IDEA como archivo * .kts.ahora, si hacemos una suposición MUY grande sobre el formato, incluidos los números de líneas, podemos recortarlo para:
o incluso
¡Gracias a la gente de Kotlin slack team por ayudarme a recortar un par de docenas de bytes!
fuente
Javascript 167 bytes
fuente