Быстрый Гольф: Золотой Лидер

18

Вызов

Используя данные API здесь , выведите названия трех стран с наибольшим количеством олимпийских золотых медалей на Олимпийских играх 2016 года в Рио (т.е. первый элемент возвращенного списка).

Например, на момент публикации (18:23 UTC + 1, понедельник, 15 августа) США, Великобритания и Китай имеют наибольшее количество золотых медалей, поэтому результат будет:

United States
Great Britain
China

Названия стран должны быть разделены символами новой строки, и у вас могут быть начальные или конечные символы новой строки.

После окончания Олимпиады программа не должна работать так, как ожидалось.

Сокращения URL-адресов запрещены, но библиотеки синтаксического анализа JSON разрешены.

Это код гольф, поэтому выигрывает самый короткий код в байтах.

Я буду продолжать пытаться получить олимпийский тематический вызов здесь

Leaderboard

Бета распад
источник
6
Вы бы сказали, что это ... мини-гольф ?
Деусови
1
@Deusovi Ба-дум крушение
бета-распад
2
Я действительно хочу, чтобы кто-нибудь опубликовал решение Java, чтобы я мог увидеть, превосходит ли это мое решение C ...
Дейв
3
«Великобритания ... итак, выходной… Великобритания»
trichoplax
1
@Dave NI Спортсмены могут представлять команду Team GB или Team Ireland. Если спортсмены NI должны были присоединиться к команде Великобритании, то это была бы команда Великобритании.
SGR

Ответы:

12

bash + w3m + grep + cut, 65 59 58 54 байта

w3m medalbot.com/api/v1/medals|grep -m3 m|cut -d\" -f4
  • На 6 байтов меньше благодаря предложениям @ Джо.
  • На 1 байт меньше благодаря @YOU.
  • На 4 байта меньше благодаря предложению @manatwork о том, что API-интерфейс medalbot работает без www. субдомен тоже .
Master_ex
источник
2
Изменить, cut -d '"'чтобы cut -d\"сохранить два байта. Если вы используете w3mвместо curl -sвас, вы можете сохранить еще 4.
Джо
Вы можете изменить _n на m
ВЫ
@YOU: Не совсем, потому что таким образом он вернет больше строк, чем ожидалось, то есть "id": "germany", id ":" colombia "и т. Д.
Master_ex
если они не могут быть от 1 до 3, все будет хорошо, у вас есть -m3 охранник.
Вы
1
@YOU: Я думаю, что это верно для текущего счета, и кажется, что это будет хорошо для Олимпийских игр 2016 года (за исключением случаев, когда они изменят Соединенные Штаты на Соединенные Штаты Америки: P). Я изменю это.
Master_ex
13

C (+ розетки), 433 429 280 276 270 259 байт

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

Таким образом, получается, что C не очень хорош в загрузке ресурсов из Интернета и разборе их как JSON. Кто знал?

Этот код (естественно) очень слабый с проверкой ошибок, поэтому я думаю, что если medalbot.com захочет отправить вредоносные данные, они смогут вызвать переполнение буфера и т. Д. Кроме того, последний код ожидает определенные значения для констант (например AF_INET = 2), которые вероятно, будет иметь место везде, но это не гарантировано.

Вот оригинальный код, который не настолько хрупок (но все же не очень надежен или безопасен):

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

Сломать:

                            // 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\nкак часть HTTP-запроса. Он также пропускает Acceptзаголовок, так как medalbot.com, похоже, не использует сжатие в любом случае и пропускает пробел после Host:(опять же, сервер, кажется, в порядке с этим). Не похоже, что можно удалить что-то еще.


Когда олимпийские игры заканчиваются, наиболее вероятным поведением этой программы является попытка segfault при чтении ячейки памяти 9. Если злой хакер не захватит домен, в этом случае наиболее вероятным поведением будет установка для некоторого байта значения 0 в адресе. информационные структуры, которые, вероятно, не слишком опасны на самом деле. Но кто может сказать с этими злыми хакерами?

Дейв
источник
1
Да, это вредитель для тех хакеров. Хорошо, что мы на веб-сайте, на котором вряд ли когда-нибудь появятся хакеры ...
перестал включаться против часовой стрелки
1
Это был настоящий скачок!
Нелинейные
2
@NonlinearFruit: да, просто удивительно, сколько символов можно сохранить, когда вы будете осторожны и будете использовать числа, определенные реализацией, прямо в коде! Это стало упражнением в том, «какой самый сумасшедший, самый опасный, с наибольшей вероятностью сломать - но в настоящее время функциональный - способ загрузки текста в C?»
Дейв
Будем надеяться, что в этом году у маленьких Бобби Столов не будет родственников.
GuitarPicker
Читаемость также является одной из первых жертв трески по гольфу. , ,
Нелинейные
12

PowerShell v4 +, 88 69 байт

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

Использует iwr(псевдоним для Invoke-WebRequest), чтобы получить API. Мы подаем это как входной параметр во ConvertFrom-Jsonвстроенный модуль, который вытягивает текст JSON в массив пользовательских объектов. Мы инкапсулируем этот массив объектов в парены, берем первые три элемента [0..2]и берем .country_nameкаждый из них.

Требуется как минимум v4 + для свойств нескольких объектов, иначе нам нужно было бы использовать что-то вроде |Select "country_name"этого. Требуется как минимум v3 + для ConvertFrom-Jsonвстроенного.

PS C:\Tools\Scripts\golfing> .\olympics-gold-leader.ps1
United States
Great Britain
China
AdmBorkBork
источник
Вы можете оставить, http://www.и PS не против http://или сайт о www.. Мой PS (5.1.14393) тоже даже не заботится о .content.
Ник Т
@NickT Спасибо за игру в гольф. Я не понимал, что ConvertFrom-Jsonявно не нужна только .contentчасть веб-запроса, но он работает и на моей установке.
AdmBorkBork
6

R, 98, 112 , 108 байтов

игра в гольф 4 благодаря @miff

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

Первая строка импортирует данные с использованием библиотеки JSON. Вторая строка захватывает названия соответствующих стран. Он сортирует страны по золотым медалям в порядке возрастания, переворачивает индексы и берет первые три, печатая их.

user5957401
источник
1
Я думаю, что вы можете заменить rev(order(a$g))на, order(-a$g)чтобы сохранить 4 байта
Miff
5

JavaScript (ES6), 122 байта

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

Из-за проблем безопасности браузера этот код должен быть запущен medalbot.com. Это, однако, не использует это преимущество и может потенциально использоваться в другом месте. Также обратите внимание, что я вставил \nсимвол, но я считаю только один, потому что я мог бы заменить его одним

Node.js (ES6), 173 байта

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 возвращал данные все в одном отрезке, но поскольку он возвращается в двух разделах, я должен объединить части и объединить их, а затем проанализировать их.

Node.js (ES6) + запрос, 138 байт

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

Лучше, но все же не так хорошо, как версия браузера. Спасибо за получение API! Запрос - это популярная клиентская библиотека HTTP, используемая для упрощения запросов, и вы можете увидеть, как это действует здесь.

MayorMonty
источник
Что из этого работает в любом браузере? Можете ли вы поставить самый короткий из них в верхней части вашего ответа (для списка лидеров)
Beta Decay
Верхний из них работает в большинстве современных браузеров, а также самый короткий. Два других в Node.js - это способ написания JavaScript на сервере (плюс другие вещи).
MayorMonty
@ βετѧΛєҫαγ Обратите внимание, что он не работает ни в одной версии IE или Safari
MayorMonty
Я вижу, я зациклился на проблеме CORS
бета-распад
4

баш + w3m + JQ ,83 59 байт

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

Спасибо Джордану за три байта.

Спасибо ВАМ за еще 24 байта! Оказывается, данные отсортированы. Вау. : D

Линн
источник
1
Вы можете опустить .|и проиндексировать результат sort_byнапрямую, и вы можете сохранить другой байт, используя [:3][]вместо [0,1,2]. Все вместе sort_by(-.gold_count)[:3][].country_name.
Джордан
w3m medalbot.com/api/v1/medals|jq -r '.[:3][].country_name'
ВЫ
4

Java 8, 261 258 байт

При этом используется лямбда для сохранения пары байтов и сетевая библиотека для получения веб-страницы. Кроме этого просто 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){}}

Вот мой (старый) 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){}}
    );
  }
}

Обновить

  • -3 [16-08-17] Переместить оператор print в цикл for
  • -5 [16-08-16] Улучшена замена регулярных выражений.
  • -9 [16-08-16] Удален java.netимпорт
NonlinearFruit
источник
Eep. Мне нужно сохранить несколько байтов ...
Дейв
Я догоняю! Теперь осталось всего 15 байтов!
Дейв
Ну, я был впереди хотя бы на несколько часов. Это работает против меня, но вы, вероятно, можете сэкономить еще несколько байтов, уменьшив цикл до 3 вместо.
Дейв
@ Дэйв Я пытался использовать условие логического разрыва, iно Java не конвертирует логическое значение в int или наоборот, если вы об этом и думали. Также ты заставил меня нервничать с последним редактированием.
Нелинейный
3

MATL , 67 байт

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

Это не работает онлайн, потому что функция Xi ( urlread) запрещена.

Пример выполнения:

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

объяснение

Это читает содержимое в виде строки, а затем применяет регулярное выражение '(?<="c.+e": ")[^"]+'для извлечения названий стран. В регулярном выражении "c.+e"вместо "country_name"уменьшения длины кода используется просмотр с .

'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 байта.

Python 3 не обрабатывает короткие URL / JSON. : /
Не понял API уже сортирует по количеству золота

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 байтов

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

Спасибо @Nick T и @Value Ink

Джо
источник
1
from urllib import*и использование только urlopenпозже сохраняет 1 байт. Кроме того, вы должны быть в состоянии взять оператор печати и поместить его сразу после двоеточия, что избавит вас от отступа.
Value Ink
1
Если вы кормите urlopenобъект list(), это делает то же самое, что и .readlines()?
Ник Т
3

JavaScript + jQuery, 114 100 байт

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

По причине перекрестных запросов происхождения это должно быть выполнено из medalbot.comдомена (с jQuery).

история

  • -14 байт благодаря @YetiCGN
  • -2 байта благодаря Yay295
NoOneIsHere
источник
Или запустите Chrome без веб-безопасности {chrome.exe --disable-web-security}
2b77bee6-5445-4c77-b1eb-4df3e5
1
сохранить 2 байта$.get("www.medalbot.com/api/v1/medals",a=>alert(a[0][c='country_name']+'\n'+a[1][c]+'\n'+a[2][c]))
Yay295
2

Рубин, 97 79+-rnet/http (11) = 90 байт

Использует модификацию шаблона регулярных выражений из ответа MATL Луиса Мендо , дополнительно оптимизированного @Jordan, поскольку Ruby не поддерживает квантификаторы в видоискателях.

-18 байт от @Jordan.

puts Net::HTTP.get("www.medalbot.com","/api/v1/medals").scan(/"c.+"(.+)"/)[0,3]
Значение чернил
источник
Вы можете опустить .map(&:last)полностью на 12 байт, и опускаете ведущие /в /apiтечение еще одного.
Джордан
Кроме того, более короткое регулярное выражение, которое, кажется, работает нормально:/"cou.+"(.+)"/
Джордан
Или: /y_.+"(.+)"/.
Иордания
@ Джордан, опуская ведущие /причины ошибок в моей версии Ruby. Или это может быть сеть, в которой я нахожусь? Без разницы. Я использовал немного другое регулярное выражение, чем предложенное вами, но с той же длиной.
Value Ink
Интересный. FWIW я использую 2.3.1.
Джордан
2

PowerShell, 60

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

Та же самая основная идея, что и у TimmyD (я не видел их ответа до того, как я написал), но немного короче :-)

детеныш
источник
1
Как, черт возьми, этот |% c*разбор работает? Я имею в виду, что да, я только что попробовал, но это какой-то странный синтаксис (он даже выделяется в моем ISE как ошибка).
AdmBorkBork
1
@TimmyD: ForEach-Object имеет набор параметров , который расширяет одно свойство, или вызывает метод с аргументами: ForEach-Object [-MemberName] <String>. В -MemberNameпараметрах опоры групповых символов, так что в этом случае он расширяет только согласование члена , что шаблон: country_name. Сохраняет довольно много символов тоже ;-)
Joey
2

Mathematica 96 66 байт

@alephalpha нашел способ работать напрямую с файлом (без его сохранения), сэкономив при этом 30 байтов!

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

Importимпортирует файл как файл Raw JSON. [[;;3,2]]занимает строки 1-3, вторая запись (название страны).

DavidC
источник
Import["http://www.medalbot.com/api/v1/medals","RawJSON"][[;;3,2]]
алефальфа
2

PHP, 205 139 124 116 111 109 байт

Я просто хотел один раз использовать новый оператор космического корабля для PHP 7 ( РЕДАКТИРОВАТЬ : это излишне, так как сортировка не требуется):

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

Если мы пропустим ненужный шаг сортировки и предположим, что API доставляет данные, уже отсортированные по убыванию gold_count (как это может показаться), мы можем сократить это далее:

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

Примечание: разрыв строки внутри строки является намеренным для сохранения байта из \ n

история

  • Опущены некоторые кавычки и фигурные скобки, которые будут генерировать уведомления, удалена переменная $ c для индекса country_name. Спасибо @manatwork за эти советы, чтобы сохранить еще больше символов.
  • Спасибо @jeroen за указание на более короткий цикл while, также он переключился на доступ к объектам для перехода со 124 на 116
  • Сохранено еще 5 байтов путем вызова API в цикле. Конечно, это занимает больше времени и поглощает API, но это Code Golf. Требуется PHP 5.5 для работы из-за разыменования массива.
  • Сохранено еще 2 байта, удалив короткий открытый тег согласно мета-ответу
YetiCGN
источник
Благодарность! Я просто видел все остальные записи сортировки и думал, что я что-то пропустил.
YetiCGN
1
Почему вы помещаете "country_name" в переменную? И в любом случае, поскольку error_reportingзначение по умолчанию не отображает уведомления, вы можете опустить двойные кавычки. И API-интерфейс medalbot работает без www. субдомен тоже. Тогда вам не нужны брекеты echo.
manatwork
Огромное спасибо! Ну, было поздно ... Переменная $ c - это пережиток предыдущей оптимизации, которую я выбросил, когда переключился в цикл for. Я думаю, что чистое кодирование (без уведомления) слишком глубоко укоренилось, поэтому я даже не рассматриваю эти оптимизации, на которые вы указали. Итак, еще раз спасибо!
YetiCGN
замена foreach следующим forloop: for(;$i<3;)echo$d[+$i++][country_name]." "уменьшает его на 5 байт. Последний пробел - входящий выход. Или просто как время циклаwhile($i<3)
Jeroen
1

BASH + w3m + основные утилиты, 70 байт

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

Похоже, результат уже отсортирован. Просто нужно выкинуть весь лишний текст.

Джо
источник
1

CJam (57 байт)

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

Онлайн-демонстрация недоступна, так как она загружает контент из Интернета. Это обманывает, фактически не анализируя JSON, но предполагая, что структура не изменится. (Но то же самое делают большинство существующих ответов по-разному).

Питер Тейлор
источник
1

Python 2, 117 байт

from requests import *
for x in get('http://www.medalbot.com/api/v1/medals').json()[:3]:
    print(x['country_name'])
sethascope
источник
Добро пожаловать в PPCG! Вы можете сэкономить несколько байтов, удалив пробел между importи *, и переместив printих сразу после двоеточия в строке 2. Мы обычно используем #s вместо **до и после для наших заголовков.
NoOneIsHere
1
Обычно мы требуем, чтобы отправители включали любые сторонние библиотеки, необходимые в заголовке ответа. Поскольку запросы не являются стандартным модулем библиотеки, язык ответа должен быть «Python 2 + запросы».
Мего
1

Clojure, 122 байта

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

Библиотека JSON не используется :). Считывает строку из URL, заменяет двоеточие пустой строкой и удаляет строку, которая приводит к карте Clojure. Берет первые 3 элемента и жадно выполняет функцию, которая печатает country_nameсвойство каждого элемента.

cliffroot
источник
1

Java 8 386 384 459 байт

2 байта сохранены из @Easterly Irk

Моя первая подача кода в гольф, так что я уверен, что есть способ сэкономить много байтов, ну да ладно :)

Он использует Gson для чтения JSON

Требуется:

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

Гольф-код:

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:

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
источник
Можете ли вы удалить пробел в "g = new Gson ()"?
Rɪᴋᴇʀ
2
Подожди, разве не нужно несколько imports для компиляции?
Дейв
операторы импорта должны быть добавлены к числу байтов?
Ицих
как вы рассчитываете импорт?
Ицих
Не знаю, каковы точные правила для Java, так как я не публиковал здесь раньше, но обычное правило состоит в том, что вы должны посчитать все, что необходимо для того, чтобы сделать код корректным (и от быстрого поиска подсказок Java). На странице я вижу различные предложения о том, как минимизировать код импорта, поэтому я думаю, что он должен быть посчитан). Но опять же, я также пытаюсь получить свой ответ C, чтобы выиграть у Java в этом вопросе, поэтому я довольно предвзят: D
Дейв
1

R, 97 95 байт

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

Небольшое улучшение по сравнению с ответом пользователя 5957401, сортировка не требуется и более короткое имя библиотеки. Также моя первая попытка игры в гольф;)

topol817
источник
Вы можете, как и на любом языке, опустить «www». часть домена и сохраните еще 4 байта, если ваша библиотека следует последующему перенаправлению.
YetiCGN
1

Котлин (Script) , 125 121 119 байт

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

Работает с kotlinc -script <filename>IDEA или через файл * .kts.

Теперь, если мы сделаем ОЧЕНЬ большое предположение о формате, включая количество строк, мы можем урезать его до:

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

или даже

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

Спасибо ребятам из команды Kotlin Slack, которые помогли мне обрезать пару десятков байтов!

CypherAJ
источник
3 символа короче, чем Clojure и JS? Я возьму это.
CypherAJ
0

Javascript 167 байт

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"])
Дилан Миус
источник