Golf rápido: el líder de oro

18

Desafío

Utilizando los datos de la API aquí , muestre los nombres de los tres países con la mayor cantidad de medallas de oro olímpicas en los Juegos Olímpicos de Río 2016 (es decir, el primer elemento de la lista devuelta).

Por ejemplo, en el momento de la publicación (18:23 UTC + 1, lunes 15 de agosto), EE. UU., El Reino Unido y China tienen la mayor cantidad de medallas de oro, por lo que la producción sería:

United States
Great Britain
China

Los nombres de los países deben estar separados por líneas nuevas y es posible que tenga líneas nuevas o iniciales.

Una vez que los Juegos Olímpicos han terminado, el programa no tiene que funcionar como se esperaba.

Los acortadores de URL no están permitidos, pero las bibliotecas de análisis JSON están permitidas.

Este es el código de golf, por lo que gana el código más corto en bytes.

Voy a seguir tratando de obtener un desafío temático de los Juegos Olímpicos aquí

Tabla de clasificación

Decaimiento Beta
fuente
66
¿Dirías que este es un ... mini-golf ?
Deusovi
1
@Deusovi Ba-dum crash
Beta Decay
2
Realmente quiero que alguien publique una solución Java para que pueda ver si mi solución C supera ...
Dave
3
"El Reino Unido ... así que la producción ... Gran Bretaña"
trichoplax
1
@Dave NI Los atletas pueden elegir representar al Equipo GB o al Equipo Irlanda. Si se requiriera que los atletas de NI se unieran al equipo GB, entonces sería el equipo del Reino Unido.
SGR

Respuestas:

12

bash + w3m + grep + cut, 65 59 58 54 bytes

w3m medalbot.com/api/v1/medals|grep -m3 m|cut -d\" -f4
  • 6 bytes menos gracias a las sugerencias de @ Joe.
  • 1 byte menos gracias a @YOU.
  • 4 bytes menos gracias a @manatwork sugerencia 's que la API medalbot parece funcionar sin www. subdominio también .
Master_ex
fuente
2
Cambie cut -d '"'a cut -d\"para guardar dos bytes. Si usa en w3mlugar de curl -spuede ahorrar 4 más.
Joe
puedes cambiar _n a m
@YOU: En realidad no, porque de esa manera se volverá más líneas de lo esperado, es decir, "id": "Alemania", id ": 'Colombia', etc.
Master_ex
si no pueden ser de 1 a 3, estará bien, tienes -m3 guardia.
USTED
1
@YOU: Supongo que esto es cierto para el puntaje actual y parece que estará bien para los Juegos Olímpicos de 2016 (excepto si cambian de Estados Unidos a Estados Unidos de América: P). Lo cambiaré
Master_ex
13

C (+ sockets), 433 429 280 276 270 259 bytes

#define H"medalbot.com"
char**p,B[999],*b=B;main(f){connect(f=socket(2,1,getaddrinfo("www."H,"80",0,&p)),p[4],16);send(f,"GET http://"H"/api/v1/medals HTTP/1.1\r\nHost:"H"\r\n\r\n",69);read(f,b,998);for(f=3;f--;puts(p))b=strchr(p=strstr(++b,"_n")+9,34),*b=0;}

Entonces 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):

#include<netdb.h>
#define H"medalbot.com"
char*b,*B,d[999];struct addrinfo*p,h;main(f){h.ai_socktype=SOCK_STREAM;getaddrinfo("www."H,"80",&h,&p);f=socket(p->ai_family,p->ai_socktype,p->ai_protocol);connect(f,p->ai_addr,p->ai_addrlen);send(f,"GET http://"H"/api/v1/medals HTTP/1.1\r\nHost: "H":80\r\nConnection: close\r\n\r\n",92,0);recv(f,d,998,0);for(f=0,b=d;f<3;++f)B=strstr(b,"_n")+9,b=strchr(B,'}'),*strchr(B,'"')=0,puts(B);}

Descompostura:

                            // No imports needed whatsoever!
#define H"medalbot.com"     // Re-use the host in multiple places
char**p,                    // This is actually a "struct addrinfo*"
    B[999],                 // The download buffer (global to init with 0)
    *b=B;                   // A mutable pointer to the buffer

main(f){
    // Hope for the best: try the first suggested address with no fallback:
    // (medalbot.com runs on Heroku which has dynamic IPs, so we must look up the
    // IP each time using getaddrinfo)
    f=socket(2,1,getaddrinfo("www."H,"80",0,&p));
                            // 2 = AF_INET
                            // 1 = SOCK_STREAM
                            //     (may not match getaddrinfo, but works anyway)
                            // 0 = IP protocol (getaddrinfo returns 0 on success)
    connect(f,p[4],16);     // struct addrinfo contains a "struct sockaddr" pointer
                            // which is aligned at 32 bytes (4*8)

    // Send the HTTP request (not quite standard, but works. 69 bytes long)
    send(f,"GET http://"H"/api/v1/medals HTTP/1.1\r\nHost:"H"\r\n\r\n",69);
    // (omit flags arg in send and hope 0 will be assumed)

    read(f,b,998);          // Get first 998 bytes of response; same as recv(...,0)

    // Loop through the top 3 & print country names:
    // (p is re-used as a char* now)
    for(f=3;f--;puts(p))        // Loop and print:
        p=strstr(++b,"_n")+9,   //  Find "country_name": "
        b=strchr(p,34),         //  Jump to closing "
        *b=0;                   //  Set the closing " to \0
}

Esto no es muy bueno para el servidor ya que no enviamos Connection: close\r\ncomo parte de la solicitud HTTP. También omite el Acceptencabezado ya que medalbot.com no parece estar usando compresión en ningún caso, y pierde el espacio después Host:(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?

Dave
fuente
1
Sí, es una plaga con esos hackers. Lo bueno es que estamos en un sitio web en el que es poco probable que gire siempre a los piratas informáticos de todo tipo ...
dejó de turno counterclockwis
1
¡Ese fue un gran salto!
NonlinearFruit
2
@NonlinearFruit, sí, es sorprendente cuántos caracteres se pueden guardar cuando se tiene precaución y se usan números definidos por la implementación directamente en el código. Esto se ha convertido en un ejercicio sobre "¿cuál es la forma más loca, más peligrosa, más probable de romper, pero actualmente funcional, para descargar texto en C?"
Dave
Esperemos que la pequeña Bobby Tables no tenga familiares compitiendo este año.
GuitarPicker
La legibilidad es también una de las primeras bajas del bacalao. . .
NonlinearFruit
12

PowerShell v4 +, 88 69 bytes

(ConvertFrom-Json(iwr medalbot.com/api/v1/medals))[0..2].country_name

Utiliza iwr(el alias para Invoke-WebRequest) para obtener la API. Lo alimentamos como parámetro de entrada al ConvertFrom-Jsonincorporado 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_namede 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 el ConvertFrom-Jsonincorporado.

PS C:\Tools\Scripts\golfing> .\olympics-gold-leader.ps1
United States
Great Britain
China
AdmBorkBork
fuente
Puede caer http://www.y PS no le importa http://o el sitio acerca www.. Mi PS (5.1.14393) tampoco parece importarle .content.
Nick T
@NickT Gracias por los campos de golf. No me di cuenta de que ConvertFrom-Jsonno necesitaba explícitamente solo la .contentparte de la solicitud web, pero también funciona en mi configuración.
AdmBorkBork
6

R, 98, 112 , 108 bytes

Golfed 4 gracias a @miff

a=jsonlite::fromJSON(readLines("http://www.medalbot.com/api/v1/medals"))
cat(a$c[order(-a$g)[1:3]],sep="\n")

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.

usuario5957401
fuente
1
Creo que puede reemplazar rev(order(a$g))con order(-a$g)para guardar 4 bytes
Miff
5

JavaScript (ES6), 122 bytes

fetch`http://www.medalbot.com/api/v1/medals`.then(a=>a.json()).then(b=>alert(b.slice(0,3).map(c=>c.country_name).join`\n`))

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 \ncarácter, pero solo cuento como uno, porque podría reemplazarlo por uno

Nodo.js (ES6), 173 bytes

require("http").get("http://www.medalbot.com/api/v1/medals",s=>s.on("data",d=>t+=d,t="").on("end",q=>console.log(JSON.parse(t).slice(0,3).map(a=>a.country_name).join`\n`)))

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

require("request")("http://www.medalbot.com/api/v1/medals",(e,r,b)=>console.log(JSON.parse(b).slice(0,3).map(a=>a.country_name).join`\n`))

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í.

AlcaldeMonty
fuente
¿Cuál de estos funciona en cualquier navegador? ¿Puedes poner el más corto de esos en la parte superior de tu respuesta (para la tabla de clasificación)
Beta Decay
El mejor de estos funciona en la mayoría de los navegadores modernos, y también es el más corto. Los otros dos están en Node.js una forma de escribir JavaScript en el servidor (además de otras cosas).
MayorMonty
@ βετѧΛєҫαγ Tenga en cuenta que no funciona en ninguna versión de IE o Safari
MayorMonty
Ya veo, me estaba obsesionando con el problema CORS
Beta Decay
4

bash + w3m + jq ,83 59 bytes

w3m medalbot.com/api/v1/medals|jq -r '.[:3][].country_name'

Gracias a Jordan por tres bytes.

¡Gracias a USTED por 24 bytes más! Resulta que los datos están ordenados. Guau. :RE

Lynn
fuente
1
Puede omitir .|e indexar el resultado sort_bydirectamente, y puede guardar otro byte utilizando en [:3][]lugar de [0,1,2]. Todos juntos: sort_by(-.gold_count)[:3][].country_name.
Jordania
w3m medalbot.com/api/v1/medals|jq -r '.[:3][].country_name'
USTED
4

Java 8, 261 258 bytes

Esto 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.

()->{try{for(int i=0;i<3;System.out.println(new java.util.Scanner(new java.net.URL("http://www.medalbot.com/api/v1/medals").openConnection().getInputStream()).useDelimiter("\\A").next().split("\n")[i++*9+3].replaceAll(".* \"|\",","")));}catch(Exception e){}}

Aquí está mi (antiguo) POJO para probar (y jugar golf):

class QuickGolf {
  static void f(h x){x.g();}
  static interface h{ void g(); }
  static void main(String[] args){
    f(
      ()->{try{for(int i=0;i<3;i++){System.out.println(new java.util.Scanner(new java.net.URL("http://www.medalbot.com/api/v1/medals").openConnection().getInputStream()).useDelimiter("\\A").next().split("\n")[i*9+3].substring(21).replace("\",",""));}}catch(Exception e){}}
    );
  }
}

Actualizar

  • -3 [16-08-17] Mueve la declaración de impresión al ciclo for
  • -5 [16-08-16] Reemplazo de expresiones regulares mejorado
  • -9 [16-08-16] Se eliminó la java.netimportación
Fruta no lineal
fuente
Eep Necesito guardar algunos bytes ...
Dave
Me estoy poniendo al día! ¡Ahora solo 15 bytes detrás!
Dave
Bueno, estuve adelante por unas horas al menos. Funciona en mi contra, pero es probable que se puede ahorrar un poco de más bytes por tener el recuento de bucle hacia abajo de 3 en lugar de hacia arriba.
Dave
@Dave Intenté que la condición de ruptura booleana simplemente fuera ipero 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.
NonlinearFruit
3

MATL , 67 bytes

'http://www.medalbot.com/api/v1/medals'Xi'(?<="c.+e": ")[^"]+'XX3:)

Esto no funciona en línea porque la función Xi( urlread) no está permitida.

Ejemplo de ejecución:

>> matl
 > 'http://www.medalbot.com/api/v1/medals'Xi'(?<="c.+e": ")[^"]+'XX3:)
 > 
United States
Great Britain
China

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.

'http://www.medalbot.com/api/v1/medals'   % Push string representing the URL
Xi                                        % Read URL contents as a string
'(?<="c.+e": ")[^"]+'                     % String for regex matching
XX                                        % Apply regex
3:)                                       % Get first 3 results
Luis Mendo
fuente
3

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

from urllib.request import*
import json
print('\n'.join(x['country_name']for x in json.loads(urlopen('http://www.medalbot.com/api/v1/medals').read().decode())[:3]))
Morgan Thrapp
fuente
3

Python 2, 120 113 bytes

from urllib import*
for x in list(urlopen("http://www.medalbot.com/api/v1/medals"))[3:26:9]:
    print x[21:-4]

Gracias @Nick T y @Value Ink

Joe
fuente
1
from urllib import*y el uso justo urlopenmá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.
Value Ink el
1
Si alimenta el urlopenobjeto list(), ¿eso hace lo mismo que .readlines()?
Nick T
3

JavaScript + jQuery, 114100 bytes

$.get("www.medalbot.com/api/v1/medals",a=>alert(a[0][c='country_name']+'\n'+a[1][c]+'\n'+a[2][c]))

Por el motivo de las solicitudes de origen cruzado, esto debe ejecutarse desde el medalbot.comdominio (con jQuery).

Historia

  • -14 bytes gracias a @YetiCGN
  • -2 bytes gracias a Yay295
No hay nadie aquí
fuente
O ejecute Chrome sin seguridad web {chrome.exe --disable-web-security}
2b77bee6-5445-4c77-b1eb-4df3e5
1
guardar 2 bytes$.get("www.medalbot.com/api/v1/medals",a=>alert(a[0][c='country_name']+'\n'+a[1][c]+'\n'+a[2][c]))
Yay295
2

Ruby, 97 79 + -rnet/http(11) = 90 bytes

Utiliza 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.

puts Net::HTTP.get("www.medalbot.com","/api/v1/medals").scan(/"c.+"(.+)"/)[0,3]
Tinta de valor
fuente
Se puede omitir .map(&:last)por completo durante 12 bytes, y omita el /en /apipara uno más.
Jordania
Además, una expresión regular más corta que parece funcionar bien:/"cou.+"(.+)"/
Jordan
O: /y_.+"(.+)"/.
Jordania
@Jordan omitir los principales /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.
Value Ink el
Interesante. FWIW Estoy usando 2.3.1.
Jordania
2

PowerShell, 60

(iwr medalbot.com/api/v1/medals|convertfrom-json)[0..2]|% c*

La misma idea básica que TimmyD (no vi su respuesta antes de publicar), pero un poco más corta :-)

Joey
fuente
1
¿Cómo demonios funciona ese |% 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).
AdmBorkBork
1
@TimmyD: ForEach-Object tiene un conjunto de parámetros que se expande una sola propiedad, o llama a un método con argumentos: ForEach-Object [-MemberName] <String>. Los -MemberNamecaracteres 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 ;-)
Joey
2

Mathematica 96 66 bytes

@alephalpha encontró una manera de trabajar directamente desde el archivo (sin guardarlo), ¡ahorrando así 30 bytes!

Import["http://www.medalbot.com/api/v1/medals","RawJSON"][[;;3,2]]

Importimporta el archivo como un archivo JSON sin formato. [[;;3,2]]toma las filas 1-3, segunda entrada (nombre del país).

DavidC
fuente
Import["http://www.medalbot.com/api/v1/medals","RawJSON"][[;;3,2]]
alephalpha
2

PHP, 205 139 124 116 111 109 bytes

Solo quería usar el nuevo operador de nave espacial para PHP 7 una vez ( EDITAR : es superfluo, ya que no es necesario ordenarlo):

<?$d=json_decode(file_get_contents('http://www.medalbot.com/api/v1/medals'),1);usort($d,function($a,$b){$g='gold_count';return$b[$g]<=>$a[$g];});$c='country_name';foreach([0,1,2]as$i){echo$d[$i][$c]."\n";}

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:

while($i<3)echo json_decode(file_get_contents('http://medalbot.com/api/v1/medals'))[+$i++]->country_name."
";

Nota: El salto de línea dentro de la cadena es intencional para guardar un byte de \ n

Historia

  • Se omitieron algunas comillas y llaves que arrojarán avisos, se eliminó la variable $ c para el índice country_name. Gracias a @manatwork por estos consejos para salvar aún más personajes.
  • Gracias a @jeroen por señalar el ciclo while más corto, también se cambió al acceso a objetos para pasar de 124 a 116
  • Ahorró 5 bytes más llamando a la API dentro del bucle. Por supuesto, lleva más tiempo y registra la API, pero es Code Golf. Necesita PHP 5.5 para funcionar debido a la desreferenciación de la matriz.
  • Ahorró 2 bytes más al eliminar la etiqueta abierta corta, según esta meta respuesta
YetiCGN
fuente
¡Gracias! Acabo de ver todas las otras entradas clasificadas y pensé que me había perdido algo.
YetiCGN
1
¿Por qué estás poniendo "country_name" en una variable? Y de todos modos, como error_reportingel 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 llaves echo.
manatwork
¡Gracias un montón! Bueno, era tarde ... La variable $ c es un remanente de una optimización anterior que descarté cuando cambié al ciclo for. Supongo que la codificación limpia (sin aviso) está demasiado arraigada, por lo que ni siquiera considero estas optimizaciones que señaló. Entonces, gracias de nuevo!
YetiCGN
reemplazando el foreach con el siguiente forloop: lo 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)
Jeroen
1

BASH + w3m + utilidades principales, 70 bytes

w3m www.medalbot.com/api/v1/medals|grep -m3 tr|cut -f6- -d\ |tr -d \",

Parece que la salida ya está ordenada. Solo necesito tirar todo el texto extra.

Joe
fuente
1

CJam (57 bytes)

"http://www.medalbot.com/api/v1/medals"gN/3>9%3<{'"/3=N}%

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).

Peter Taylor
fuente
1

Python 2, 117 bytes

from requests import *
for x in get('http://www.medalbot.com/api/v1/medals').json()[:3]:
    print(x['country_name'])
sethascope
fuente
Bienvenido a PPCG! Puede guardar algunos bytes eliminando el espacio entre importy *, y moviendo printa directamente después de los dos puntos en línea 2. Generalmente usamos #s en lugar de **antes y después para nuestros encabezados.
NoOneIsHere
1
Por lo general, exigimos que los remitentes incluyan cualquier biblioteca de terceros requerida en el encabezado de la respuesta. Como las solicitudes no son un módulo de biblioteca estándar, el lenguaje de esta respuesta debería ser "Solicitudes de Python 2 +".
Mego
1

Clojure, 122 bytes

(fn[](mapv #(println(%"country_name"))(take 3(read-string(.replace(slurp"http://www.medalbot.com/api/v1/medals")":""")))))

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_namepropiedad de cada elemento.

acantilado
fuente
1

Java 8 386 384 459 bytes

2 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:

import java.util.*;
import java.io.*;

Código de golf:

void p()throws Exception{List<A> a=new com.google.gson.Gson().fromJson(new InputStreamReader((InputStream)((new java.net.URL("http://www.medalbot.com/api/v1/medals").openConnection())).getContent()),new com.google.gson.reflect.TypeToken<List<A>>(){}.getType());a.sort((b,c)->c.gold_count.compareTo(b.gold_count));for(int i=0;i<3;)System.out.println(a.get(i++).country_name);}class A{String country_name;Integer gold_count;}

Código sin golf:

void p() throws Exception {
    List<A> a = new com.google.gson.Gson().fromJson(new InputStreamReader((InputStream)((new java.net.URL("http://www.medalbot.com/api/v1/medals").openConnection())).getContent()),new com.google.gson.reflect.TypeToken<List<A>>(){}.getType());
    a.sort((b, c) -> c.gold_count.compareTo(b.gold_count));
    for(int i=0; i<3;)
        System.out.println(a.get(i++).country_name);
}

class A {
    String country_name;
    Integer gold_count;
}
yitzih
fuente
¿Se puede eliminar el espacio en "g = new Gson ()"?
Rɪᴋᴇʀ
2
Espera, ¿esto no necesita algunos imports para compilar?
Dave
las declaraciones de importación deben agregarse al recuento de bytes?
yitzih
¿Cómo se calculan las importaciones?
yitzih
No sé cuáles son las reglas exactas para Java, ya que no he publicado ninguna aquí antes, pero la regla habitual es que debe contar todo lo que se necesita para que el código sea válido (y al buscar rápidamente las sugerencias de Java En la página puedo ver varias sugerencias sobre cómo minimizar el código de importación, así que supongo que debe contarse). Pero, de nuevo, también estoy tratando de obtener mi respuesta C para ganar contra Java en esta pregunta, así que soy bastante parcial: D
Dave
1

R, 97 95 bytes

t=rjson::fromJSON(f="http://www.medalbot.com/api/v1/medals")
for(i in 1:3)cat(t[[c(i,2)]],"\n")

Poca 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;)

topol817
fuente
Puede, como en todos los idiomas, omitir el "www". parte del dominio y ahorre 4 bytes más si su biblioteca sigue la redirección posterior.
YetiCGN
1

Kotlin (Script) , 125 121 119 bytes

java.net.URL("http://medalbot.com/api/v1/medals").readText().lines().filter{'m' in it}.take(3).map{println(it.split('"')[3])}

Ejecutable 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:

java.net.URL("http://medalbot.com/api/v1/medals").readText().lines().slice(setOf(3,12,21)).map{println(it.split('"')[3])}

o incluso

java.net.URL("http://medalbot.com/api/v1/medals").readText().lines().slice(3..21 step 9).map{println(it.split('"')[3])}

¡Gracias a la gente de Kotlin slack team por ayudarme a recortar un par de docenas de bytes!

CypherAJ
fuente
¿3 símbolos más cortos que Clojure y JS? Tomaré eso.
CypherAJ
0

Javascript 167 bytes

x=new XMLHttpRequest();x.open("GET","http://www.medalbot.com/api/v1/medals",false);x.send()
i=-3;while(i++)console.log(JSON.parse(x.responseText)[i+2]["country_name"])
Dylan Meeus
fuente