Quick Golf: O Líder do Ouro


18

Desafio

Usando os dados da API aqui , produza os nomes dos três países com mais medalhas de ouro olímpicas nos Jogos Olímpicos do Rio 2016 (ou seja, o primeiro elemento da lista retornada).

Por exemplo, no momento da postagem (18:23 UTC + 1, segunda-feira, 15 de agosto), os EUA, o Reino Unido e a China têm mais medalhas de ouro; portanto, a saída seria:

United States
Great Britain
China

Os nomes dos países devem ser separados por novas linhas e você pode ter uma nova ou à direita.

Depois que as Olimpíadas terminam, o programa não precisa funcionar como o esperado.

Os encurtadores de URL não são permitidos, mas as bibliotecas de análise JSON são permitidas.

Este é o código golf, portanto o código mais curto em bytes vence.

Vou continuar tentando obter um desafio temático das Olimpíadas aqui

Entre os melhores


6
Você diria que isso é um ... mini-golfe ?
Deusovi 15/08/16

1
@Deusovi Ba-dum crash
Decay Beta

2
Eu realmente quero que alguém postar uma solução Java para que eu possa ver se a minha solução C bate-lo ...
Dave

3
"O Reino Unido ... então
produziu

1
Os atletas da @Dave NI podem optar por representar o Team GB ou o Team Ireland. Se os atletas da NI precisassem se juntar ao Team GB, seria o Team UK.
SGR

Respostas:


12

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

w3m medalbot.com/api/v1/medals|grep -m3 m|cut -d\" -f4
  • 6 bytes a menos, graças às sugestões de @ Joe.
  • 1 byte a menos, graças a @YOU.
  • 4 bytes menos graças a @manatwork sugestão de que a API medalbot parece funcionar sem www. subdomínio também .

2
Mude cut -d '"'para cut -d\"para salvar dois bytes. Se você usar em w3mvez de, curl -spoderá economizar mais 4.
Joe

você pode alterar _n para m
YOU

@YOU: Na verdade não, porque dessa forma ele vai retornar mais linhas do que o esperado, ou seja, "id": "Alemanha", id ": 'colombia' etc.
Master_ex

se não puderem ser de 1 a 3, tudo bem, você tem -m3 de guarda.
VOCÊ

1
@YOU: Eu acho que isso é verdade para a pontuação atual e parece que será bom para as Olimpíadas de 2016 (exceto se elas mudarem dos Estados Unidos para os Estados Unidos da América: P). Eu vou mudar isso.
Master_ex 16/08/19

13

C (+ soquetes), 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;}

Acontece que C não é bom em baixar recursos da Internet e analisá-los como JSON. Quem sabia?

Esse código é (naturalmente) super flexível na verificação de erros, então acho que se o medalbot.com quisesse enviar dados maliciosos, seria capaz de acionar estouros de buffer, etc. Além disso, o código mais recente espera certos valores para as constantes (por exemplo AF_INET = 2) irá provavelmente ser o caso em todos os lugares, mas não é garantido.

Aqui está o código original que não é tão frágil (mas ainda não é muito robusto ou 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);}

Demolir:

                            // 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
}

Isso não é muito agradável para o servidor, pois não enviamos Connection: close\r\ncomo parte da solicitação HTTP. Ele também omite o Acceptcabeçalho, pois o medalbot.com não parece usar compressão em nenhum caso e perde o espaço depois Host:(novamente, o servidor parece estar bem com isso). Parece que nada mais pode ser removido.


Quando os jogos olímpicos terminam, o comportamento mais provável para este programa é segfault ao tentar ler o local da memória 9. A menos que um hacker maligno domine o domínio, nesse caso, o comportamento mais provável é que ele defina algum byte como 0 no endereço estruturas de informação, o que provavelmente não é realmente muito perigoso. Mas quem pode dizer com esses hackers do mal?


1
Sim, é uma praga com esses hackers. Ainda bem que estamos em um site no qual os hackers de qualquer tipo é improvável que alguma vez transformar-se ...
deixou de vez counterclockwis

1
Esse foi o grande salto!
NonlinearFruit

2
@NonlinearFruit sim, é incrível quantos caracteres podem ser salvos quando você joga a precaução ao vento e usa números definidos pela implementação diretamente no código! Isso se tornou um exercício de "qual é a maneira mais louca, perigosa e mais provável de quebrar - mas atualmente funciona - a maneira de baixar texto em C?"
Dave

Vamos apenas torcer para que as pequenas mesas de Bobby não tenham parentes competindo este ano.
GuitarPicker 17/08/16

A legibilidade também é uma das primeiras vítimas do bacalhau. . .
NonlinearFruit

12

PowerShell v4 +, 88 69 bytes

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

Usa iwr(o alias para Invoke-WebRequest) para pegar a API. Nós alimentamos isso como o parâmetro de entrada para o ConvertFrom-Jsoninterno que puxa o texto JSON para uma matriz de objetos personalizados. Encapsulamos essa matriz de objetos em parênteses, pegamos os três primeiros elementos [0..2]e pegamos o .country_namede cada um deles.

Requer pelo menos v4 + para as propriedades de vários objetos; caso contrário, precisaríamos usar algo parecido |Select "country_name". Requer pelo menos v3 + para o ConvertFrom-Jsonbuilt-in.

PS C:\Tools\Scripts\golfing> .\olympics-gold-leader.ps1
United States
Great Britain
China

Você pode soltar http://www.e o PS não se importa com http://o site www.. Meu PS (5.1.14393) também nem parece se importar com o .content.
Nick T

@ NickT Obrigado pelos campos de golfe. Eu não sabia que ConvertFrom-Jsonisso não precisava explicitamente apenas da .contentparte da solicitação da Web, mas também funciona na minha configuração.
AdmBorkBork 16/08

6

R, 98, 112 , 108 bytes

golfed 4 graças a @miff

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

A primeira linha importa dados usando uma biblioteca JSON. A segunda linha pega os nomes de países relevantes. Classifica os países por medalhas de ouro em ordem crescente, reverte os índices e recebe os 3 primeiros, imprimindo-os.


1
Eu acho que você pode substituir rev(order(a$g))com order(-a$g)a salvar 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`))

Devido a um problema de segurança do navegador , esse código deve ser executado medalbot.com. No entanto, ele não tira proveito disso e pode ser executado em outro lugar. Observe também que inseri o \ncaractere, mas estou contando apenas como um, porque eu poderia substituí-lo por um

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

Isso seria muito mais curto se a API retornasse os dados de uma só vez, mas, como retorna em duas seções, devo concatenar as partes e combiná-las, e depois analisá-las.

Node.js (ES6) + solicitação, 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`))

Melhor, mas ainda não tão bom quanto a versão do navegador. Obrigado buscar API! Request é uma biblioteca cliente HTTP popular usada para simplificar solicitações, e você pode ver isso entrar em vigor aqui.


Qual destes funciona em qualquer navegador? Você pode colocar os mais curtos entre os que estão no topo da sua resposta (para a tabela de líderes)
Decay Beta

A primeira delas funciona nos navegadores mais modernos e também é a mais curta. Os outros dois estão no Node.js, uma maneira de escrever JavaScript no servidor (além de outras coisas).
MayorMonty 15/08/19

@ βετѧΛєҫαγ tomar nota de que ele não funciona em qualquer versão do IE ou Safari
MayorMonty

Entendo, eu estava ficando com o problema do CORS desligado
Beta Decay

4

bash + w3m + jq ,83 59 bytes

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

Graças à Jordânia por três bytes.

Obrigado a você por mais 24 bytes! Acontece que os dados estão classificados. Uau. : D


1
Você pode omitir .|e indexar o resultado sort_bydiretamente e salvar outro byte usando em [:3][]vez de [0,1,2]. Todos juntos: sort_by(-.gold_count)[:3][].country_name.
Jordan

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

4

Java 8, 261 258 bytes

Isso usa um lambda para salvar alguns bytes e a biblioteca de rede para obter a página da web. Fora isso, é apenas 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){}}

Aqui está o meu (antigo) POJO para testes (e golfe):

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){}}
    );
  }
}

Atualizar

  • -3 declaração de impressão [16-08-17] Mover em loop
  • -5 [16-08-16] Substituição de regex aprimorada
  • -9 [16-08-16] java.netImportação removida

Eep. Eu preciso para salvar alguns bytes ...
Dave

Estou alcançando! Agora, apenas 15 bytes atrás!
Dave

Bem, fiquei à frente por algumas horas, pelo menos. Funciona contra mim, mas você provavelmente pode economizar mais alguns bytes fazendo a contagem decrescente de loop de 3 em vez de para cima.
Dave

@ Dave Tentei ter a condição de quebra booleana, imas o Java não converte booleano em int ou vice-versa, se era isso que você estava pensando. Você também me deixou muito nervoso com a última edição.
NonlinearFruit

3

MATL , 67 bytes

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

Isso não funciona online porque a função Xi( urlread) não é permitida.

Exemplo de execução:

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

Explicação

Isso lê o conteúdo como uma sequência e aplica a regex '(?<="c.+e": ")[^"]+'para extrair nomes de países. O regex usa look-behind com em "c.+e"vez de "country_name"reduzir o comprimento do 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

3

Python 3, 202 , 164 bytes.

O Python 3 não faz tratamento de URL / json curto. : /
Não percebeu que a API já classifica por contagem de ouro

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

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]

Obrigado @Nick T e @Value Ink


1
from urllib import*e usar apenas urlopenmais tarde economiza 1 byte. Além disso, você deve poder pegar a declaração de impressão e colocá-la logo após os dois pontos, poupando-o do recuo.
Value Ink

1
Se você alimentar o urlopenobjeto list(), isso faz o mesmo que .readlines()?
Nick T

3

JavaScript + jQuery, 114 100 bytes

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

Por motivos de solicitações de origem cruzada, isso deve ser executado no medalbot.comdomínio (com jQuery).

História

  • -14 bytes graças a @YetiCGN
  • -2 bytes graças a Yay295

Ou execute o chrome sem a segurança da web {chrome.exe --disable-web-security}
2b77bee6-5445-4c77-b1eb-4df3e5

1
salvar 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

Usa uma modificação do padrão regex da resposta MATL de Luis Mendo , otimizada ainda mais pelo @Jordan, já que Ruby não suporta quantificadores em lookbehinds.

-18 bytes de @Jordan.

puts Net::HTTP.get("www.medalbot.com","/api/v1/medals").scan(/"c.+"(.+)"/)[0,3]

Você pode omitir .map(&:last)inteiramente para 12 bytes, e omita o /em /apipara mais um.
Jordan

Além disso, um regex mais curto que parece funcionar bem:/"cou.+"(.+)"/
Jordan

Ou: /y_.+"(.+)"/.
Jordan

@ Jordânia omitir os principais /causa erros na minha versão do Ruby. Ou pode ser a rede em que estou? Tanto faz. Fui com um regex ligeiramente diferente do que você sugeriu, mas com o mesmo comprimento.
Valor Ink

Interessante. FWIW eu estou usando 2.3.1.
Jordan

2

PowerShell, 60

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

A mesma ideia básica do TimmyD (não vi a resposta deles antes de eu postar), mas um pouco mais curta :-)


1
Como diabos essa |% c*análise funciona? Quero dizer, tentei, mas essa é uma sintaxe estranha (até destaca no meu ISE como um erro).
AdmBorkBork 16/08

1
@TimmyD: ForEach-Object tem um conjunto de parâmetros que se expande uma única propriedade, ou chama um método com argumentos: ForEach-Object [-MemberName] <String>. Os -MemberNamesuportes de parâmetros wildcards, portanto, neste caso ele se expande o único membro correspondente que curinga: country_name. Salva também alguns personagens ;-) #
Joey

2

Mathematica 96 66 bytes

O @alephalpha encontrou uma maneira de trabalhar diretamente a partir do arquivo (sem salvá-lo), economizando 30 bytes!

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

Importimporta o arquivo como um arquivo JSON bruto. [[;;3,2]]leva as linhas 1-3, segunda entrada (nome do país).


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

2

PHP, 205 139 124 116 111 109 bytes

Eu só queria usar o novo operador de nave espacial para o PHP 7 uma vez ( EDIT : É supérfluo, pois a classificação não é necessária):

<?$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";}

Se omitirmos a etapa de classificação desnecessária e assumirmos que a API fornece os dados já classificados por gold_count descendente (como parece), podemos abreviá-lo ainda mais:

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

Nota: A quebra de linha na string é intencional para salvar um byte de \ n

História

  • Omitiram algumas aspas e chaves que lançariam avisos, removeu a variável $ c para o índice country_name. Obrigado a @manatwork por essas dicas para salvar ainda mais personagens.
  • Obrigado a @jeroen por apontar o loop while mais curto, também mudou para o acesso a objetos para ir de 124 para 116
  • Economizou mais 5 bytes chamando a API dentro do loop. É verdade que leva mais tempo e prejudica a API, mas é o Code Golf. Precisa do PHP 5.5 para funcionar devido à desreferenciação de array.
  • Economizou mais 2 bytes removendo a pequena etiqueta aberta, de acordo com esta meta resposta

Obrigado! Acabei de ver todas as outras entradas classificando e pensei que tinha perdido alguma coisa.
precisa saber é o seguinte

1
Por que você está colocando "country_name" em uma variável? De qualquer forma, como error_reportingo valor padrão do não exibe avisos, você pode omitir as aspas duplas. E a API medalbot parece funcionar sem www. subdomínio também. Então você não precisa dos aparelhos ao redor echo.
manatwork

Muitíssimo obrigado! Bem, já era tarde ... A variável $ c é uma sobra de uma otimização anterior que joguei fora quando mudei para o loop for. Acho que a codificação limpa (sem aviso prévio) ainda está profundamente arraigada, por isso nem considero essas otimizações que você apontou. Então, obrigado novamente!
YetiCGN

substituindo o foreach pelo seguinte forloop: for(;$i<3;)echo$d[+$i++][country_name]." "reduz-o em 5 bytes. O último espaço é um enter offcourse. Ou apenas como um loop whilewhile($i<3)
Jeroen

1

Utilitários BASH + w3m + core, 70 bytes

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

Parece que a saída já está classificada. Só precisa jogar fora todo o texto extra.


1

CJam (57 bytes)

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

A demonstração on-line não está disponível porque busca conteúdo da web. Isso engana não analisando o JSON, mas assumindo que a estrutura não será alterada. (Mas o mesmo acontece com a maioria das respostas existentes, de maneiras diferentes).


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

Bem-vindo ao PPCG! Você pode salvar alguns bytes removendo o espaço entre importe *e movendo o printpara diretamente após os dois pontos na linha 2. Geralmente usamos #s em vez de **antes e depois para nossos cabeçalhos.
NoOneIsHere

1
Normalmente, exigimos que os remetentes incluam bibliotecas de terceiros necessárias no cabeçalho da resposta. Como os pedidos não são um módulo de biblioteca padrão, a linguagem da resposta deve ser "Pedidos do 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")":""")))))

Nenhuma biblioteca JSON usada :). Lê a string do URL, substitui dois pontos por string vazia e avalia a string que resulta no mapa de Clojure. Pega os 3 primeiros elementos e mapeia a função que imprime a country_namepropriedade de cada elemento.


1

Java 8 386 384 459 bytes

2 bytes salvos do @Easterly Irk

Meu primeiro envio de código de golfe, então tenho certeza de que há uma maneira de economizar muitos bytes, mas tudo bem :)

Ele usa o Gson para ler o JSON

Requer:

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

Código de golfe:

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

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;
}

Você pode remover o espaço em "g = new Gson ()"?
Rɪᴋᴇʀ

2
Espere, isso não precisa de alguns imports para compilar?
Dave

As instruções de importação precisam ser adicionadas à contagem de bytes?
yitzih

como você calcula as importações?
yitzih

Não sei quais são as regras exatas para Java, já que eu não publiquei nenhuma aqui antes, mas a regra usual é que você precise contar tudo o que é necessário para tornar o código válido (e procurar rapidamente as dicas sobre Java) Na página, vejo várias sugestões sobre como minimizar o código de importação, então acho que deve ser contado). Mas, novamente, eu também estou tentando obter minha resposta C para vencer o Java nesta questão, por isso sou bastante tendenciosa: D
Dave

1

R, 97 bytes 95

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

Pouco aprimoramento em relação à resposta do usuário5957401, nenhuma classificação necessária e nome mais curto da biblioteca. Também a minha primeira tentativa de golfe;)


Você pode, como em qualquer idioma, omitir o "www". parte do domínio e salve mais 4 bytes se sua biblioteca seguir o redirecionamento resultante.
precisa saber é o seguinte

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

Executável com kotlinc -script <filename>ou através da IDEA como arquivo * .kts.

agora, se fizermos uma suposição MUITO grande sobre o formato, incluindo o número de linhas, podemos apará-lo para:

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

ou mesmo

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

Agradeço ao pessoal da equipe Kotlin slack por me ajudar a cortar algumas dezenas de bytes!


3 símbolos mais curtos que Clojure e JS? Eu atendo.
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"])
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.