var QUESTION_ID=89919,OVERRIDE_USER=30525;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Ответы:
bash + w3m + grep + cut,
65595854 байтаисточник
cut -d '"'
чтобыcut -d\"
сохранить два байта. Если вы используетеw3m
вместоcurl -s
вас, вы можете сохранить еще 4.C (+ розетки),
433429280276270259 байтТаким образом, получается, что C не очень хорош в загрузке ресурсов из Интернета и разборе их как JSON. Кто знал?
Этот код (естественно) очень слабый с проверкой ошибок, поэтому я думаю, что если medalbot.com захочет отправить вредоносные данные, они смогут вызвать переполнение буфера и т. Д. Кроме того, последний код ожидает определенные значения для констант (например
AF_INET = 2
), которые вероятно, будет иметь место везде, но это не гарантировано.Вот оригинальный код, который не настолько хрупок (но все же не очень надежен или безопасен):
Сломать:
Это не очень хорошо для сервера, так как мы не отправляем
Connection: close\r\n
как часть HTTP-запроса. Он также пропускаетAccept
заголовок, так как medalbot.com, похоже, не использует сжатие в любом случае и пропускает пробел послеHost:
(опять же, сервер, кажется, в порядке с этим). Не похоже, что можно удалить что-то еще.Когда олимпийские игры заканчиваются, наиболее вероятным поведением этой программы является попытка segfault при чтении ячейки памяти 9. Если злой хакер не захватит домен, в этом случае наиболее вероятным поведением будет установка для некоторого байта значения 0 в адресе. информационные структуры, которые, вероятно, не слишком опасны на самом деле. Но кто может сказать с этими злыми хакерами?
источник
PowerShell v4 +,
8869 байтИспользует
iwr
(псевдоним дляInvoke-WebRequest
), чтобы получить API. Мы подаем это как входной параметр воConvertFrom-Json
встроенный модуль, который вытягивает текст JSON в массив пользовательских объектов. Мы инкапсулируем этот массив объектов в парены, берем первые три элемента[0..2]
и берем.country_name
каждый из них.Требуется как минимум v4 + для свойств нескольких объектов, иначе нам нужно было бы использовать что-то вроде
|Select "country_name"
этого. Требуется как минимум v3 + дляConvertFrom-Json
встроенного.источник
http://www.
и PS не противhttp://
или сайт оwww.
. Мой PS (5.1.14393) тоже даже не заботится о.content
.ConvertFrom-Json
явно не нужна только.content
часть веб-запроса, но он работает и на моей установке.R,
98, 112, 108 байтовигра в гольф 4 благодаря @miff
Первая строка импортирует данные с использованием библиотеки JSON. Вторая строка захватывает названия соответствующих стран. Он сортирует страны по золотым медалям в порядке возрастания, переворачивает индексы и берет первые три, печатая их.
источник
rev(order(a$g))
на,order(-a$g)
чтобы сохранить 4 байтаJavaScript (ES6), 122 байта
Из-за проблем безопасности браузера этот код должен быть запущен
medalbot.com
. Это, однако, не использует это преимущество и может потенциально использоваться в другом месте. Также обратите внимание, что я вставил\n
символ, но я считаю только один, потому что я мог бы заменить его однимNode.js (ES6), 173 байта
Это было бы намного короче, если бы API возвращал данные все в одном отрезке, но поскольку он возвращается в двух разделах, я должен объединить части и объединить их, а затем проанализировать их.
Node.js (ES6) + запрос, 138 байт
Лучше, но все же не так хорошо, как версия браузера. Спасибо за получение API! Запрос - это популярная клиентская библиотека HTTP, используемая для упрощения запросов, и вы можете увидеть, как это действует здесь.
источник
баш + w3m + JQ ,
8359 байтСпасибо Джордану за три байта.
Спасибо ВАМ за еще 24 байта! Оказывается, данные отсортированы. Вау. : D
источник
.|
и проиндексировать результатsort_by
напрямую, и вы можете сохранить другой байт, используя[:3][]
вместо[0,1,2]
. Все вместеsort_by(-.gold_count)[:3][].country_name
.w3m medalbot.com/api/v1/medals|jq -r '.[:3][].country_name'
Java 8,
261258 байтПри этом используется лямбда для сохранения пары байтов и сетевая библиотека для получения веб-страницы. Кроме этого просто Java.
Вот мой (старый) POJO для тестирования (и игры в гольф):
Обновить
java.net
импортисточник
i
но Java не конвертирует логическое значение в int или наоборот, если вы об этом и думали. Также ты заставил меня нервничать с последним редактированием.MATL , 67 байт
Это не работает онлайн, потому что функция
Xi
(urlread
) запрещена.Пример выполнения:
объяснение
Это читает содержимое в виде строки, а затем применяет регулярное выражение
'(?<="c.+e": ")[^"]+'
для извлечения названий стран. В регулярном выражении"c.+e"
вместо"country_name"
уменьшения длины кода используется просмотр с .источник
Python 3,
202, 164 байта.Python 3 не обрабатывает короткие URL / JSON. : /
Не понял API уже сортирует по количеству золота
источник
Python 2,
120113 байтовСпасибо @Nick T и @Value Ink
источник
from urllib import*
и использование толькоurlopen
позже сохраняет 1 байт. Кроме того, вы должны быть в состоянии взять оператор печати и поместить его сразу после двоеточия, что избавит вас от отступа.urlopen
объектlist()
, это делает то же самое, что и.readlines()
?JavaScript + jQuery,
114100 байтПо причине перекрестных запросов происхождения это должно быть выполнено из
medalbot.com
домена (с jQuery).история
источник
$.get("www.medalbot.com/api/v1/medals",a=>alert(a[0][c='country_name']+'\n'+a[1][c]+'\n'+a[2][c]))
Рубин,
9779+-rnet/http
(11) = 90 байтИспользует модификацию шаблона регулярных выражений из ответа MATL Луиса Мендо , дополнительно оптимизированного @Jordan, поскольку Ruby не поддерживает квантификаторы в видоискателях.
-18 байт от @Jordan.
источник
.map(&:last)
полностью на 12 байт, и опускаете ведущие/
в/api
течение еще одного./"cou.+"(.+)"/
/y_.+"(.+)"/
./
причины ошибок в моей версии Ruby. Или это может быть сеть, в которой я нахожусь? Без разницы. Я использовал немного другое регулярное выражение, чем предложенное вами, но с той же длиной.PowerShell, 60
Та же самая основная идея, что и у TimmyD (я не видел их ответа до того, как я написал), но немного короче :-)
источник
|% c*
разбор работает? Я имею в виду, что да, я только что попробовал, но это какой-то странный синтаксис (он даже выделяется в моем ISE как ошибка).ForEach-Object [-MemberName] <String>
. В-MemberName
параметрах опоры групповых символов, так что в этом случае он расширяет только согласование члена , что шаблон:country_name
. Сохраняет довольно много символов тоже ;-)Mathematica
9666 байт@alephalpha нашел способ работать напрямую с файлом (без его сохранения), сэкономив при этом 30 байтов!
Import
импортирует файл как файл Raw JSON.[[;;3,2]]
занимает строки 1-3, вторая запись (название страны).источник
Import["http://www.medalbot.com/api/v1/medals","RawJSON"][[;;3,2]]
PHP,
205 139 124 116 111109 байтЯ просто хотел один раз использовать новый оператор космического корабля для PHP 7 ( РЕДАКТИРОВАТЬ : это излишне, так как сортировка не требуется):
Если мы пропустим ненужный шаг сортировки и предположим, что API доставляет данные, уже отсортированные по убыванию gold_count (как это может показаться), мы можем сократить это далее:
Примечание: разрыв строки внутри строки является намеренным для сохранения байта из \ n
история
источник
error_reporting
значение по умолчанию не отображает уведомления, вы можете опустить двойные кавычки. И API-интерфейс medalbot работает без www. субдомен тоже. Тогда вам не нужны брекетыecho
.for(;$i<3;)echo$d[+$i++][country_name]." "
уменьшает его на 5 байт. Последний пробел - входящий выход. Или просто как время циклаwhile($i<3)
BASH + w3m + основные утилиты, 70 байт
Похоже, результат уже отсортирован. Просто нужно выкинуть весь лишний текст.
источник
CJam (57 байт)
Онлайн-демонстрация недоступна, так как она загружает контент из Интернета. Это обманывает, фактически не анализируя JSON, но предполагая, что структура не изменится. (Но то же самое делают большинство существующих ответов по-разному).
источник
Python 2, 117 байт
источник
import
и*
, и переместивprint
их сразу после двоеточия в строке2
. Мы обычно используем#
s вместо**
до и после для наших заголовков.Clojure, 122 байта
Библиотека JSON не используется :). Считывает строку из URL, заменяет двоеточие пустой строкой и удаляет строку, которая приводит к карте Clojure. Берет первые 3 элемента и жадно выполняет функцию, которая печатает
country_name
свойство каждого элемента.источник
Java 8
386384459 байт2 байта сохранены из @Easterly Irk
Моя первая подача кода в гольф, так что я уверен, что есть способ сэкономить много байтов, ну да ладно :)
Он использует Gson для чтения JSON
Требуется:
Гольф-код:
Код Ungolfed:
источник
import
s для компиляции?R,
9795 байтНебольшое улучшение по сравнению с ответом пользователя 5957401, сортировка не требуется и более короткое имя библиотеки. Также моя первая попытка игры в гольф;)
источник
Котлин (Script) ,
125121119 байтРаботает с
kotlinc -script <filename>
IDEA или через файл * .kts.Теперь, если мы сделаем ОЧЕНЬ большое предположение о формате, включая количество строк, мы можем урезать его до:
или даже
Спасибо ребятам из команды Kotlin Slack, которые помогли мне обрезать пару десятков байтов!
источник
Javascript 167 байт
источник