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>
Antworten:
Bash + W3M + Grep + Cut,
65595854 Bytesquelle
cut -d '"'
zucut -d\"
, um zwei Bytes zu speichern. Wenn Siew3m
stattdessen verwendencurl -s
, können Sie 4 weitere sparen.C (+ Sockets):
433429280276270259 ByteEs stellt sich also heraus, dass C nicht gut darin ist, Ressourcen aus dem Internet herunterzuladen und sie als JSON zu analysieren. Wer wusste?
Dieser Code ist (natürlich) sehr lasch bei der Fehlerprüfung. Wenn medalbot.com also bösartige Daten senden möchte, können sie möglicherweise Pufferüberläufe auslösen. Auch der neueste Code erwartet bestimmte Werte für die Konstanten (z. B.
AF_INET = 2
), die wird wahrscheinlich überall der Fall sein, aber es ist nicht garantiert.Hier ist der Originalcode, der nicht so zerbrechlich ist (aber immer noch nicht sehr robust oder sicher ist):
Nervenzusammenbruch:
Dies ist für den Server nicht sehr hilfreich, da wir nicht
Connection: close\r\n
als Teil der HTTP-Anforderung senden . DerAccept
Header wird ebenfalls weggelassen, da medalbot.com in keinem Fall die Komprimierung zu verwenden scheint und das Leerzeichen danach fehltHost:
(auch hier scheint der Server damit einverstanden zu sein). Es scheint jedoch nicht, dass etwas anderes entfernt werden kann.Sobald die Olympischen Spiele zu Ende sind, versucht dieses Programm am wahrscheinlichsten, den Speicherort 9 auszulesen. In diesem Fall ist es am wahrscheinlichsten, dass ein Byte in der Adresse auf 0 gesetzt wird, es sei denn, ein böser Hacker übernimmt die Domäne info structs, was eigentlich wahrscheinlich nicht allzu gefährlich ist. Aber wer kann es mit diesen bösen Hackern sagen?
quelle
PowerShell v4 +,
88 bis69 ByteVerwendet
iwr
(den Alias fürInvoke-WebRequest
), um die API abzurufen. Wir geben das als Eingabeparameter an dasConvertFrom-Json
integrierte Element weiter, das den JSON-Text in ein benutzerdefiniertes Objektarray zieht. Wir kapseln dieses Objektarray in Parens, nehmen die ersten drei Elemente[0..2]
und nehmen die.country_name
von jedem davon.Benötigt mindestens v4 + für die Eigenschaften mehrerer Objekte, sonst müssten wir
|Select "country_name"
stattdessen so etwas verwenden. Benötigt mindestens v3 + für dasConvertFrom-Json
eingebaute.quelle
http://www.
und PS kümmert sich nicht umhttp://
oder die Website überwww.
. Mein PS (5.1.14393) scheint sich auch nicht einmal um das zu kümmern.content
.ConvertFrom-Json
nicht explizit nur den.content
Teil der Webanfrage benötigte, aber es funktioniert auch bei meinem Setup.R,
98, 112, 108 BytesGolf 4 dank @miff
In der ersten Zeile werden Daten mithilfe einer JSON-Bibliothek importiert. In der zweiten Zeile werden die relevanten Ländernamen angezeigt. Es sortiert die Länder nach Goldmedaillen in aufsteigender Reihenfolge, kehrt die Indizes um und druckt die ersten 3 aus.
quelle
rev(order(a$g))
mitorder(-a$g)
zu speichern 4 BytesJavaScript (ES6), 122 Bytes
Aus Sicherheitsgründen muss dieser Code ausgeführt werden
medalbot.com
. Dies wird jedoch nicht ausgenutzt und kann möglicherweise an anderer Stelle ausgeführt werden. Beachten Sie auch, dass ich das\n
Zeichen eingefügt habe , aber nur als eins zähle, weil ich es durch eins ersetzen könnteNode.js (ES6), 173 Bytes
Dies wäre so viel kürzer gewesen, wenn die API die Daten auf einmal zurückgegeben hätte, aber da sie in zwei Abschnitten zurückgegeben wurden, muss ich die Teile verketten und kombinieren und sie dann analysieren.
Node.js (ES6) + Request, 138 Bytes
Besser, aber immer noch nicht so gut wie die Browserversion. Danke API holen! Request ist eine beliebte HTTP-Clientbibliothek, die zur Vereinfachung von Anforderungen verwendet wird. Dies wird hier angezeigt.
quelle
bash + w3m + jq ,
8359 BytesDanke an Jordan für drei Bytes.
Vielen Dank an SIE für 24 weitere Bytes! Es stellt sich heraus, dass die Daten sortiert sind. Wow. : D
quelle
.|
das Ergebnis vonsort_by
direkt weglassen und indizieren , und Sie können ein weiteres Byte speichern, indem Sie[:3][]
anstelle von verwenden[0,1,2]
. Alle zusammen:sort_by(-.gold_count)[:3][].country_name
.w3m medalbot.com/api/v1/medals|jq -r '.[:3][].country_name'
Java 8,
261258 BytesDies verwendet ein Lambda, um ein paar Bytes zu speichern, und die Netzbibliothek, um die Webseite abzurufen. Davon abgesehen ist es nur Java.
Hier ist mein (alter) POJO zum Testen (und Golfen):
Aktualisieren
java.net
Import entferntquelle
i
aber Java konvertiert keine Booleschen Werte in int oder umgekehrt, wenn Sie das gedacht haben. Auch du hattest mich ziemlich nervös mit dieser letzten Änderung.MATL , 67 Bytes
Dies funktioniert online nicht, da function
Xi
(urlread
) nicht erlaubt ist.Beispiellauf:
Erläuterung
Dies liest den Inhalt als Zeichenfolge und wendet dann den regulären Ausdruck
'(?<="c.+e": ")[^"]+'
an, um die Ländernamen zu extrahieren. Der reguläre Ausdruck verwendet Look-Behind mit,"c.+e"
anstatt"country_name"
die Codelänge zu verringern.quelle
Python 3,
202, 164 Bytes.Python 3 verarbeitet keine kurzen URLs / Json. : /
Wusste nicht, dass die API bereits nach Gold sortiert ist
quelle
Python 2,
120113 BytesVielen Dank an @Nick T und @Value Ink
quelle
from urllib import*
und mit nururlopen
später spart 1 Byte. Außerdem sollten Sie in der Lage sein, die print-Anweisung direkt nach dem Doppelpunkt einzufügen, um den Einzug zu vermeiden.urlopen
Objekt fütternlist()
, ist das das Gleiche wie.readlines()
?JavaScript + jQuery,
114100 BytesAus Gründen von Cross Origin Requests muss dies von der
medalbot.com
Domain aus (mit jQuery) ausgeführt werden.Geschichte
quelle
$.get("www.medalbot.com/api/v1/medals",a=>alert(a[0][c='country_name']+'\n'+a[1][c]+'\n'+a[2][c]))
Ruby,
9779 +-rnet/http
(11) = 90 BytesVerwendet eine Modifikation des Regex-Musters aus Luis Mendos MATL-Antwort , die von @Jordan weiter optimiert wurde, da Ruby keine Quantifizierer in Lookbehinds unterstützt.
-18 Bytes von @Jordan.
quelle
.map(&:last)
für 12 Bytes vollständig, und die führende wegzulassen/
in/api
für eine weitere./"cou.+"(.+)"/
/y_.+"(.+)"/
./
verursacht Fehler in meiner Ruby-Version. Oder könnte es das Netzwerk sein, in dem ich bin? Wie auch immer. Ich ging mit einem etwas anderen Regex als dem, den Sie vorgeschlagen hatten, aber mit der gleichen Länge.PowerShell, 60
Gleiche Grundidee wie TimmyD (habe die Antwort nicht gesehen, bevor ich gepostet habe), aber etwas kürzer :-)
quelle
|% c*
Parsen? Ich meine, ich habe es gerade ausprobiert, aber das ist eine seltsame Syntax (die in meiner ISE sogar als Fehler hervorgehoben wird).ForEach-Object [-MemberName] <String>
. Die-MemberName
Parameterträger Platzhalter, so dass in diesem Fall dehnt sich das einzige Mitglied Anpassung dass Platzhalter:country_name
. Speichert auch einige Charaktere ;-)Mathematica
9666 Bytes@alephalpha hat einen Weg gefunden, direkt aus der Datei heraus zu arbeiten (ohne sie zu speichern), wodurch 30 Bytes gespart werden!
Import
Importiert die Datei als Raw-JSON-Datei.[[;;3,2]]
Nimmt die Zeilen 1-3, zweiter Eintrag (Ländername).quelle
Import["http://www.medalbot.com/api/v1/medals","RawJSON"][[;;3,2]]
PHP,
205 139 124 116 111109 BytesIch wollte den neuen Raumschiff-Operator nur einmal für PHP 7 verwenden ( BEARBEITEN : Es ist überflüssig, da keine Sortierung erforderlich ist):
Wenn wir den unnötigen Sortierschritt weglassen und annehmen, dass die API die bereits sortierten Daten nach gold_count absteigend liefert (wie es scheint), können wir dies weiter verkürzen:
Hinweis: Der Zeilenumbruch in der Zeichenfolge soll ein Byte von \ n speichern
Geschichte
quelle
error_reporting
der Standardeinstellung keine Hinweise angezeigt werden, können Sie die doppelten Anführungszeichen auch weglassen. Und die medalbot API scheint ohne www zu funktionieren. Subdomain auch. Dann brauchst du die Hosenträger nicht herumecho
.for(;$i<3;)echo$d[+$i++][country_name]." "
Reduziert es mit 5 Bytes. Der letzte Raum ist ein Zufluchtsort. Oder einfach als eine Weile Schleifewhile($i<3)
BASH + W3M + Core Utils, 70 Byte
Sieht so aus, als ob die Ausgabe bereits sortiert ist. Ich muss nur den ganzen zusätzlichen Text wegwerfen.
quelle
CJam (57 Bytes)
Online-Demo nicht verfügbar, da Inhalte aus dem Web abgerufen werden. Dies führt dazu, dass JSON nicht analysiert wird, vorausgesetzt, dass sich die Struktur nicht ändert. (Aber dann tun Sie die meisten der vorhandenen Antworten auf unterschiedliche Weise).
quelle
Python 2, 117 Bytes
quelle
import
und*
, und durch das Bewegen ,print
um direkt nach dem Doppelpunkt auf der Linie2
. Wir verwenden in der Regel#
s anstelle von**
before und after für unsere Header.Clojure, 122 Bytes
Keine JSON-Bibliothek verwendet :). Liest die Zeichenfolge von der URL, ersetzt die Doppelpunkte durch eine leere Zeichenfolge und wertet die Zeichenfolge aus, die zur Clojure-Map führt. Nimmt die ersten 3 Elemente und ordnet eifrig eine Funktion zu, die die
country_name
Eigenschaften der einzelnen Elemente druckt .quelle
Java 8
386384459 Bytes2 Bytes von @Easterly Irk gespeichert
Meine erste Code-Golf-Einsendung, also bin ich sicher, dass es eine Möglichkeit gibt, viele Bytes zu sparen, aber na ja :)
Es verwendet Gson zum Lesen des JSON
Benötigt:
Golf Code:
Ungolfed Code:
quelle
import
s zu kompilieren?R
9795 BytesGeringe Verbesserung gegenüber der Antwort von user5957401, keine Sortierung erforderlich und kürzerer Bibliotheksname. Auch mein erster Golfversuch;)
quelle
Kotlin (Skript) ,
125121119 BytesKann mit
kotlinc -script <filename>
oder über IDEA als * .kts-Datei ausgeführt werden.Wenn wir jetzt eine SEHR große Annahme über das Format machen, einschließlich der Anzahl der Zeilen, können wir es so zuschneiden:
oder auch
Vielen Dank an die Leute vom Kotlin Slack Team, die mir geholfen haben, ein paar Dutzend Bytes zu kürzen!
quelle
Javascript 167 Bytes
quelle