Hızlı Golf: Altın Lider


18

Meydan okuma

Buradaki API verilerini kullanarak , 2016 Rio Olimpiyat Oyunlarında (yani iade edilen listenin ilk unsuru) en fazla Olimpiyat altın madalyası olan üç ülkenin isimlerini çıktılayın.

Örneğin, gönderme sırasında (18:23 UTC + 1, 15 Ağustos Pazartesi), ABD, İngiltere ve Çin en fazla altın madalyaya sahiptir, bu nedenle çıktı:

United States
Great Britain
China

Ülke adları yeni satırlarla ayrılmalıdır ve önde gelen veya sondaki yeni satırlarınız olabilir.

Olimpiyatlar bittikten sonra, programın beklendiği gibi çalışması gerekmez.

URL kısaltıcılarına izin verilmiyor, ancak JSON ayrıştırma kitaplıklarına izin veriliyor.

Bu kod golf, yani bayt içindeki en kısa kod kazanır.

Burada Olimpiyat temalı bir meydan okumaya devam etmeye çalışacağım

Liderler Sıralaması


6
Bunun bir mini golf olduğunu söyleyebilir misiniz ?
Deusovi

1
Deusovi Ba-dum kazası
Beta

2
Gerçekten birisinin bir Java çözümü yayınlamasını istiyorum, böylece C çözümümün bunu
Dave

3
"İngiltere ... çok çıktı ... İngiltere"
trichoplax

1
@Dave NI Sporcular, GB Takımını veya İrlanda İrlanda Takımını temsil etmeyi seçebilir. NI Sporcularının GB Takımı'na katılmaları gerekiyorsa, o zaman İngiltere Takımı olurdu.
SGR

Yanıtlar:


12

bash + w3m + grep + kesim, 65 59 58 54 bayt

w3m medalbot.com/api/v1/medals|grep -m3 m|cut -d\" -f4
  • @ Joe'nun önerileri sayesinde 6 bayt daha az.
  • @YOU sayesinde 1 bayt daha az.
  • @Manatwork'ün , madalbot API'sının www olmadan çalıştığı önerisi sayesinde 4 bayt daha az . alt alan adı da .

2
İki bayt kaydetmek cut -d '"'için cut -d\"olarak değiştirin . w3mBunun yerine kullanırsanız curl -s4 tane daha tasarruf edebilirsiniz.
Joe

_n'yi m olarak değiştirebilirsiniz
YOU

@YOU: Aslında bu şekilde beklenenden daha fazla satır döndüreceği için değil, yani "id": "almanya", id ":" kolombiya "vb.
Master_ex

Eğer 1'den 3'e kadar olamazlarsa iyi olacak, -m3 muhafızlarınız var.
SİZ

1
@YOU: Sanırım bu şu anki puan için geçerli ve 2016 Olimpiyatları için iyi olacak gibi görünüyor (Amerika Birleşik Devletleri'ni Amerika Birleşik Devletleri'ne değiştirmeleri dışında: P). Ben değiştireceğim.
Master_ex

13

C (+ soketler), 433 429 280 276 270 259 bayt

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

Bu yüzden C, internetten kaynak indirmek ve JSON olarak ayrıştırmak için harika değil. Kim biliyordu?

Sanırım bu yüzden medalbot.com tetik tampon taşmaları, vb onlar mümkün olacağını kötü niyetli veri göndermek istiyorsa bu kod Ayrıca son kod bekliyor, hata kontrolü ile (doğal olarak) süper gevşek sabitleri için belirli değerler (örn AF_INET = 2) hangi muhtemelen her yerde böyle olacak , ancak garanti edilmez.

İşte bu kadar kırılgan olmayan (ancak yine de çok sağlam veya güvenli olmayan) orijinal kod:

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

Yıkmak:

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

Connection: close\r\nHTTP isteğinin bir parçası olarak göndermediğimiz için bu sunucu için çok hoş değil . Ayrıca, Acceptüstbilgiyi atlar çünkü medalbot.com her durumda sıkıştırma kullanmıyor gibi görünüyor ve sonraki alanı kaçırıyor Host:(yine sunucu bununla iyi görünüyor). Başka bir şey olsa kaldırılabilir gibi görünmüyor.


Olimpiyatlar sona erdiğinde, bu program için en olası davranış, bellek konumu 9'u okumaya çalışarak segfault etmektir. Kötü bir hacker etki alanını ele geçirmedikçe, bu durumda adreste bir bayt 0 olarak ayarlamak en olası davranıştır. aslında çok da tehlikeli olmayan bilgi yapıları. Peki bu kötü hackerlarla kim söyleyebilir?


1
Evet, bu bilgisayar korsanları için bir haşere. İyi bir şey, herhangi bir hackerın ortaya çıkmasının mümkün olmadığı bir web sitesinde olduğumuz ...
ters saat çevirmeyi bıraktı

1
Bu oldukça büyük bir adımdı!
NonlinearFruit

2
@NonlinearFruit evet rüzgara dikkat ettiğinizde ve doğrudan kodda uygulama tanımlı sayıları kullandığınızda kaç karakter kaydedilebileceği şaşırtıcı! Bu, "C'de metin indirmenin en çılgın, en tehlikeli, kırılma olasılığı en yüksek - ama şu anda işlevsel - yolu nedir?"
Dave

Umarım küçük Bobby Tables'ın bu yıl rekabet eden akrabaları yoktur.
GuitarPicker

Okunabilirlik aynı zamanda morina golfünün ilk kayıplarından biridir. . .
NonlinearFruit

12

PowerShell v4 +, 88 69 bayt

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

API'yı almak iwriçin (takma adı Invoke-WebRequest) kullanır . Bunu, giriş parametresi olarak ConvertFrom-JsonJSON metnini özel bir nesne dizisine çeken yerleşik olarak besleriz. Bu nesne dizisini parens içinde kapsülliyoruz, ilk üç unsuru [0..2]alıyoruz ve .country_nameher birini alıyoruz .

Çoklu nesne özellikleri için en az v4 + gerektirir, aksi takdirde |Select "country_name"bunun yerine bir şey kullanmamız gerekir . Yerleşik için en az v3 + gerekir ConvertFrom-Json.

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

Bırakabilirsiniz http://www.ve PS http://veya site hakkında umursamıyor www.. Benim PS (5.1.14393) de umurumda bile görünmüyor .content.
Nick T

@NickT Golfler için teşekkürler. Bunun web isteğinin ConvertFrom-Jsonsadece bir .contentkısmına ihtiyaç duymadığını fark etmedim , ancak kurulumumda da çalışıyor.
AdmBorkBork

6

R, 98, 112 , 108 bayt

miff sayesinde 4 golf oynadı

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

İlk satır bir JSON kütüphanesi kullanarak veri alır. İkinci satır, ilgili ülke adlarını alır. Ülkeleri artan sırada altın madalyalarla sıralar, endeksleri tersine çevirir ve ilk 3'ü alır ve basar.


1
Ben değiştirmek düşünüyorum rev(order(a$g))ile order(-a$g)kaydet 4 byte
Miff

5

JavaScript (ES6), 122 Bayt

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

Bir tarayıcı güvenliği sorunu nedeniyle , bu kodun çalıştırılması gerekirmedalbot.com . Ancak bundan yararlanmaz ve potansiyel olarak başka bir yerde de çalıştırılabilir. Ayrıca \nkarakteri eklediğime dikkat ettim , ama sadece sayıyorum, çünkü bir tane ile değiştirebilirim

Node.js (ES6), 173 Bayt

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

API tüm verileri tek bir streçte döndürdüyse çok daha kısa olurdu, ancak iki bölümde döndüğü için parçaları birleştirmeli ve birleştirmeli ve sonra ayrıştırmalıyım.

Node.js (ES6) + İstek, 138 Bayt

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

Daha iyi, ama yine de tarayıcı sürümü kadar iyi değil. Teşekkürler API getir! İstek , istekleri basitleştirmek için kullanılan popüler bir HTTP istemci kitaplığıdır ve burada etkili olduğunu görebilirsiniz.


Bunlardan hangisi herhangi bir tarayıcıda çalışır? Bunların en kısa kısmını cevabınızın tepesine koyabilir misiniz (skor tablosu için)
Beta Çürüme

Bunlardan en iyisi çoğu modern tarayıcıda çalışır ve aynı zamanda en kısadır. Diğer ikisi Node.js'de sunucuya JavaScript yazmanın bir yoludur (artı başka şeyler).
MayorMonty

@ βετѧΛєҫαγ IE veya Safari'nin herhangi bir sürümünde çalışmadığını unutmayın
MayorMonty

Görüyorum ki, CORS sorununa asılıyordum
Beta Çürümesi

4

bash + w3m + jq ,83 59 bayt

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

Ürdün'e üç bayt için teşekkürler.

24 bayt daha SİZE teşekkür ederiz! Verilerin sıralandığı ortaya çıkıyor. Vay. : D


1
Doğrudan .|sonucunu atlayabilir ve dizine ekleyebilir ve yerine sort_bykullanarak başka bir bayt kaydedebilirsiniz . Hep birlikte: . [:3][][0,1,2]sort_by(-.gold_count)[:3][].country_name
Ürdün

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

4

Java 8, 261 258 bayt

Bu, birkaç bayt kaydetmek için bir lambda ve web sayfasını almak için net kütüphaneyi kullanır. Bunun dışında sadece 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){}}

İşte benim (eski) test (ve golf) için POJO:

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

Güncelleme

  • -3 [16-08-17] taşı baskı tablosu içine döngüsü
  • -5 [16-08-16] Geliştirilmiş normal ifade değiştirme
  • -9 [16-08-16] java.netİçe aktarma kaldırıldı

Eep. Bazı baytları kurtarmam gerek…
Dave

Ben yetişiyorum! Şimdi sadece 15 bayt kaldı!
Dave

En azından birkaç saat ilerideydim. Benim karşı çalışır, ancak muhtemelen döngü saymak suretiyle biraz daha bayt kaydedebilirsiniz aşağı 3 yerine yukarısı.
Dave

@Dave boolean break koşulu sahip olmak denedim iama Java eğer boolean int ya da vize tersine çevirmiyorum , eğer düşündüğünüz buysa. Ayrıca son düzenlemede beni oldukça gerginleştirdiniz.
NonlinearFruit

3

MATL , 67 bayt

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

Function Xi( urlread) işlevine izin verilmediğinden bu çevrimiçi çalışmaz .

Örnek çalışma:

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

açıklama

This reads the contents as a string and then applies the regex '(?<="c.+e": ")[^"]+' to extract country names. The regex uses look-behind with "c.+e" instead of "country_name" to reduce code length.

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

Python 3 does not do short url/json handling. :/
Didn't realize the API already sorts by gold count

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]

Thanks @Nick T and @Value Ink


1
from urllib import* and using just urlopen later saves 1 byte. Also, you should be able to take the print statement and put it right after the colon, saving you from the indentation.
Value Ink

1
If you feed the urlopen object to list(), does that do the same thing as .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]))

For the reason of Cross Origin Requests, this must be run from the medalbot.com domain (with jQuery).

History

  • -14 bytes thanks to @YetiCGN
  • -2 bytes thanks to Yay295

Or run chrome without web security { chrome.exe --disable-web-security }
2b77bee6-5445-4c77-b1eb-4df3e5

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

Uses a modification of the regex pattern from Luis Mendo's MATL answer, further optimized by @Jordan, since Ruby doesn't support quantifiers in lookbehinds.

-18 bytes from @Jordan.

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

You can omit .map(&:last) entirely for 12 bytes, and omit the leading / in /api for one more.
Jordan

Also, a shorter regex that seems to work fine: /"cou.+"(.+)"/
Jordan

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

@Jordan omitting the leading / causes errors on my Ruby version. Or it might be the network I'm on? Whatever. I went with a slightly different regex than the one you suggested but same length.
Value Ink

Interesting. FWIW I'm using 2.3.1.
Jordan

2

PowerShell, 60

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

Same basic idea as TimmyD (didn't see their answer before I posted), but quite a bit shorter :-)


1
How the devil does that |% c* parsing work? I mean, it does, I just tried it, but that's some weird syntax (it even highlights in my ISE as an error).
AdmBorkBork

1
@TimmyD: ForEach-Object has a parameter set that expands a single property, or calls a method with arguments: ForEach-Object [-MemberName] <String>. The -MemberName parameter supports wildcards, so in this case it expands the only member matching that wildcard: country_name. Saves quite a few characters, too ;-)
Joey

2

Mathematica 96 66 bytes

@alephalpha found a way to work directly from the file (without saving it), thereby saving 30 bytes!

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

Import imports the file as a Raw JSON file. [[;;3,2]]takes rows 1-3, second entry (country name).


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

2

PHP, 205 139 124 116 111 109 bytes

I just wanted to use the new spaceship operator for PHP 7 once (EDIT: It's superfluous, as sorting isn't required):

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

If we omit the unneccesary sorting step and assume the API delivers the data already sorted by gold_count descending (as it would seem), we can shorten this further:

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

Note: The line break within the string is intentional to save a byte from \n

History

  • Ommitted some quotes and braces that will throw notice's, removed the $c variable for country_name index. Thanks to @manatwork for these tipps to save even more characters.
  • Thanks to @jeroen for pointing out the shorter while loop, also switched to object access to go from 124 to 116
  • Saved 5 more bytes by calling the API within the loop. Granted, it takes longer and clobbers the API, but it's Code Golf. Needs PHP 5.5 to work because of array dereferencing.
  • Saved 2 more bytes by removing the short open tag, as per this meta answer

Thanks! I just saw all the other entries sorting and thought I missed something.
YetiCGN

1
Why are you putting "country_name" in a variable? And anyway, as error_reporting's default value not displays notices, you can omit the double quotes. And the medalbot API seems to work without www. subdomain too. Then you not need the braces around echo.
manatwork

Thanks a bunch! Well, it was late ... The $c variable is a leftover from a previous optimization that I threw away when I switched to the for loop. I guess clean coding (notice-free) is too deeply ingrained still so I don't even consider these optimizations you pointed out. So, thanks again!
YetiCGN

replacing the foreach with the following forloop: for(;$i<3;)echo$d[+$i++][country_name]." " reduces it with 5 bytes. Last space being an enter offcourse. Or just as a while loop while($i<3)
Jeroen

1

BASH + w3m + core utils, 70 bytes

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

Looks like the output comes sorted already. Just need to throw out all of the extra text.


1

CJam (57 bytes)

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

Online demo not available because it fetches content from the web. This cheats by not actually parsing JSON, but assuming that the structure won't change. (But then so do most of the existing answers, in different ways).


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

Welcome to PPCG! You can save a few bytes by removing the space between import and *, and by moving the print to directly after the colon on line 2. We generally use #s instead of ** before and after for our headers.
NoOneIsHere

1
We typically require submitters to include any third-party libraries required in the answer header. Since requests isn't a standard library module, this answer's language should be "Python 2 + requests".
Mego

1

Clojure, 122 bytes

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

No JSON library used :). Reads string from the URL, replaces colons with empty string and evals the string which results into Clojure map. Takes first 3 elements and maps eagerly function which prints country_name property of each elements.


1

Java 8 386 384 459 bytes

2 bytes saved from @Easterly Irk

My first code golf submission so I'm sure there's a way to save plenty of bytes, but oh well :)

It uses Gson to read the JSON

Requires:

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

Golfed code:

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

Ungolfed Code:

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

Can you remove the space in "g = new Gson()"?
Rɪᴋᴇʀ

2
Wait, doesn't this need some imports to compile?
Dave

import statements need to be added to byte count?
yitzih

how do you calculate imports?
yitzih

Don't know what the exact rules are for Java, since I haven't posted any here before, but the usual rule is that you have to count everything which is needed to make the code valid (and from quickly looking up the Java hints page I can see various suggestions about how to minimise the import code, so I guess it must be counted). But then again, I'm also trying to get my C answer to win against Java in this question, so I'm pretty biased :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")

Little improvement over user5957401's answer, no sorting required, and shorter library name. Also my first attempt at golfing ;)


You can, as in every language, omit the "www." part of the domain and save 4 more bytes if your library follows the ensuing redirect.
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])}

Runnable with kotlinc -script <filename> or through IDEA as *.kts file.

now, if we make a VERY big assumption about the format, including numbers of lines, we can trim it to:

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

or even

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

Thanks to folks at Kotlin slack team for helping me trim a couple dozens of bytes!


3 symbols shorter than Clojure and JS? I'll take that.
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"])
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.