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>
Réponses:
bash + w3m + grep + cut,
65595854 octetsla source
cut -d '"'
àcut -d\"
pour enregistrer deux octets. Si vous utilisezw3m
au lieu de,curl -s
vous pouvez économiser 4 de plus.C (+ prises),
433429280276270259 octetsIl s'avère donc que C n'est pas génial pour télécharger des ressources à partir d'Internet et les analyser en JSON. Qui savait?
Ce code est (naturellement) super laxiste avec vérification des erreurs, donc je suppose que si medalbot.com voulait envoyer des données malveillantes, il serait capable de déclencher des dépassements de tampon, etc. De plus, le dernier code attend certaines valeurs pour les constantes (par exemple
AF_INET = 2
) qui sera probablement le cas partout, mais ce n'est pas garanti.Voici le code original qui n'est pas si fragile (mais qui n'est toujours pas très robuste ou sûr):
Panne:
Ce n'est pas très agréable pour le serveur car nous n'envoyons pas
Connection: close\r\n
dans le cadre de la requête HTTP. Il omet également l'en-Accept
tête, car medalbot.com ne semble en aucun cas utiliser la compression et manque l'espace aprèsHost:
(encore une fois, le serveur semble être d'accord avec cela). Il ne semble pas que quelque chose d'autre puisse être supprimé.Une fois les Jeux Olympiques terminés, le comportement le plus probable de ce programme consiste à segfault en essayant de lire l'emplacement de la mémoire 9. À moins qu'un pirate malveillant ne prenne le contrôle du domaine, auquel cas le comportement le plus probable consiste à définir un octet à 0 dans l'adresse structs info, ce qui n'est probablement pas trop dangereux en fait. Mais qui peut dire avec ces pirates maléfiques?
la source
PowerShell v4 +,
8869 octetsUtilise
iwr
(l'alias deInvoke-WebRequest
) pour récupérer l'API. Nous alimentons cela en tant que paramètre d'entrée dans la fonctionConvertFrom-Json
intégrée qui extrait le texte JSON dans un tableau d'objets personnalisé. Nous encapsulons ce tableau d'objets en parens, prenons les trois premiers éléments[0..2]
et prenons.country_name
chacun de ceux-ci.Nécessite au moins v4 + pour les propriétés multi-objets, sinon nous aurions besoin d'utiliser quelque chose comme à la
|Select "country_name"
place. Nécessite au moins v3 + pour leConvertFrom-Json
intégré.la source
http://www.
et PS ne s'en soucie pashttp://
ou du sitewww.
. Mon PS (5.1.14393) ne semble même pas se soucier du.content
.ConvertFrom-Json
n'avait explicitement besoin que de la.content
partie de la demande Web, mais cela fonctionne également sur ma configuration.R,
98, 112, 108 octetsgolfé 4 grâce à @miff
La première ligne importe des données à l'aide d'une bibliothèque JSON. La deuxième ligne saisit les noms de pays pertinents. Il trie les pays par médailles d'or dans l'ordre croissant, inverse les indices et prend les 3 premiers, les imprimant.
la source
rev(order(a$g))
avecorder(-a$g)
pour sauver 4 octetsJavaScript (ES6), 122 octets
En raison d'un problème de sécurité du navigateur , ce code doit être exécuté
medalbot.com
. Il n'en tire cependant pas parti et pourrait éventuellement être exploité ailleurs. Notez également que j'ai inséré le\n
caractère, mais je ne compte que comme un, car je pourrais le remplacer par unNode.js (ES6), 173 octets
Cela aurait été beaucoup plus court si l'API renvoyait les données en une seule fois, mais comme elle revient en deux sections, je dois concaténer les parties et les combiner, puis les analyser.
Node.js (ES6) + demande, 138 octets
Mieux, mais toujours pas aussi bon que la version du navigateur. Merci d'aller chercher l'API! Request est une bibliothèque client HTTP populaire utilisée pour simplifier les requêtes, et vous pouvez voir qu'elle prend effet ici.
la source
bash + w3m + jq ,
8359 octetsMerci à Jordan pour trois octets.
Merci à VOUS pour 24 octets de plus! Il s'avère que les données sont triées. Sensationnel. :RÉ
la source
.|
et indexer le résultat desort_by
directement, et vous pouvez enregistrer un autre octet en utilisant à la[:3][]
place de[0,1,2]
. Tous ensemble:sort_by(-.gold_count)[:3][].country_name
.w3m medalbot.com/api/v1/medals|jq -r '.[:3][].country_name'
Java 8,
261258 octetsCela utilise un lambda pour enregistrer quelques octets et la bibliothèque net pour obtenir la page Web. À part ça, c'est juste Java.
Voici mon (ancien) POJO pour les tests (et le golf):
Mise à jour
java.net
Importation suppriméela source
i
mais Java ne convertit pas booléen en int ou vice versa, si c'était ce que vous pensiez. Vous m'aviez aussi assez nerveux avec ce dernier montage.MATL , 67 octets
Cela ne fonctionne pas en ligne car la fonction
Xi
(urlread
) n'est pas autorisée.Exemple d'exécution:
Explication
Cela lit le contenu sous forme de chaîne, puis applique l'expression régulière
'(?<="c.+e": ")[^"]+'
pour extraire les noms de pays. Le regex utilise le look-behind avec"c.+e"
au lieu de"country_name"
pour réduire la longueur du code.la source
Python 3,
202, 164 octets.Python 3 ne fait pas de gestion d'url / json courte. : /
Je ne savais pas que l'API triait déjà par nombre d'or
la source
Python 2,
120113 octetsMerci @Nick T et @Value Ink
la source
from urllib import*
et l'utilisation justeurlopen
plus tard permet d'économiser 1 octet. En outre, vous devriez être en mesure de prendre l'instruction print et de la placer juste après les deux points, ce qui vous évite le retrait.urlopen
objetlist()
, cela fait-il la même chose que.readlines()
?JavaScript + jQuery,
114100octetsPour les demandes d'origine croisée, celle-ci doit être exécutée à partir du
medalbot.com
domaine (avec jQuery).Histoire
la source
$.get("www.medalbot.com/api/v1/medals",a=>alert(a[0][c='country_name']+'\n'+a[1][c]+'\n'+a[2][c]))
Rubis,
9779 +-rnet/http
(11) = 90 octetsUtilise une modification du modèle d'expression régulière de la réponse MATL de Luis Mendo expression régulière de la , optimisée par @Jordan, car Ruby ne prend pas en charge les quantificateurs dans les lookbehinds.
-18 octets de @Jordan.
la source
.map(&:last)
entièrement pour 12 octets, et en supprimant le/
dans/api
pour un plus./"cou.+"(.+)"/
/y_.+"(.+)"/
./
entraîne des erreurs sur ma version Ruby. Ou c'est peut-être le réseau sur lequel je suis? Peu importe. Je suis allé avec une regex légèrement différente de celle que vous avez suggérée mais de même longueur.PowerShell, 60
Même idée de base que TimmyD (je n'ai pas vu leur réponse avant de poster), mais un peu plus courte :-)
la source
|% c*
analyse? Je veux dire, il le fait, je viens de l'essayer, mais c'est une syntaxe étrange (elle apparaît même dans mon ISE comme une erreur).ForEach-Object [-MemberName] <String>
. Le-MemberName
paramètre prend en charge des caractères génériques, de sorte que dans ce cas , il se développe la seule adaptation d'élément générique que:country_name
. Enregistre pas mal de caractères aussi ;-)Mathematica
9666 octets@alephalpha a trouvé un moyen de travailler directement à partir du fichier (sans l'enregistrer), économisant ainsi 30 octets!
Import
importe le fichier en tant que fichier JSON brut.[[;;3,2]]
prend les lignes 1 à 3, deuxième entrée (nom du pays).la source
Import["http://www.medalbot.com/api/v1/medals","RawJSON"][[;;3,2]]
PHP,
205 139 124 124 116 111109 octetsJe voulais juste utiliser le nouvel opérateur de vaisseau spatial pour PHP 7 une fois ( EDIT : c'est superflu, car le tri n'est pas nécessaire):
Si nous omettons l'étape de tri inutile et supposons que l'API fournit les données déjà triées par gold_count décroissant (comme il semble), nous pouvons raccourcir encore plus:
Remarque: Le saut de ligne dans la chaîne est intentionnel pour enregistrer un octet de \ n
Histoire
la source
error_reporting
la valeur par défaut n'affiche pas d'avis, vous pouvez omettre les guillemets doubles. Et l'API medalbot semble fonctionner sans www. sous-domaine aussi. Ensuite, vous n'avez pas besoin des accolades autourecho
.for(;$i<3;)echo$d[+$i++][country_name]." "
reduces it with 5 bytes. Last space being an enter offcourse. Or just as a while loopwhile($i<3)
BASH + w3m + core utils, 70 bytes
Looks like the output comes sorted already. Just need to throw out all of the extra text.
la source
CJam (57 bytes)
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).
la source
Python 2, 117 bytes
la source
import
and*
, and by moving theprint
to directly after the colon on line2
. We generally use#
s instead of**
before and after for our headers.Clojure, 122 bytes
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.la source
Java 8
386384459 bytes2 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:
Golfed code:
Ungolfed Code:
la source
import
s to compile?R,
9795 bytesLittle improvement over user5957401's answer, no sorting required, and shorter library name. Also my first attempt at golfing ;)
la source
Kotlin (Script),
125121119 bytesRunnable 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:
or even
Thanks to folks at Kotlin slack team for helping me trim a couple dozens of bytes!
la source
Javascript 167 bytes
la source