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>
Jawaban:
bash + w3m + grep + cut,
65595854 bytesumber
cut -d '"'
kecut -d\"
untuk menyimpan dua byte. Jika Anda menggunakanw3m
bukannyacurl -s
Anda dapat menyimpan 4 lebih.C (+ soket),
433429280276270259 byteJadi ternyata C tidak hebat dalam mengunduh sumber daya dari internet dan menguraikannya sebagai JSON. Siapa yang tahu?
Kode ini (tentu saja) super longgar dengan pengecekan kesalahan, jadi saya kira jika medalbot.com ingin mengirim data berbahaya mereka akan dapat memicu buffer overflows, dll. Juga kode terbaru mengharapkan nilai-nilai tertentu untuk konstanta (misalnya
AF_INET = 2
) yang akan mungkin terjadi di mana-mana, tapi itu tidak dijamin.Berikut kode asli yang tidak terlalu rapuh (tapi masih tidak terlalu kuat atau aman):
Kerusakan:
Ini tidak terlalu baik untuk server karena kami tidak mengirim
Connection: close\r\n
sebagai bagian dari permintaan HTTP. Itu juga menghilangkanAccept
header karena medalbot.com tampaknya tidak menggunakan kompresi dalam hal apa pun, dan melewatkan ruang setelahHost:
(sekali lagi, server tampaknya baik-baik saja dengan ini). Sepertinya tidak ada hal lain yang bisa dihapus.Setelah olimpiade berakhir, perilaku yang paling mungkin untuk program ini adalah untuk segfault mencoba membaca lokasi memori. info struct, yang mungkin sebenarnya tidak terlalu berbahaya. Tapi siapa yang bisa tahu dengan peretas jahat ini?
sumber
PowerShell v4 +,
8869 byteMenggunakan
iwr
(alias untukInvoke-WebRequest
) untuk mengambil API. Kami memberi makan itu sebagai parameter input keConvertFrom-Json
built-in yang menarik teks JSON ke dalam array objek kustom. Kami merangkum array objek dalam parens, mengambil tiga elemen pertama[0..2]
, dan mengambil.country_name
masing-masing darinya.Membutuhkan setidaknya v4 + untuk properti multi-objek, kalau tidak kita harus menggunakan sesuatu seperti itu
|Select "country_name"
. Membutuhkan setidaknya v3 + untukConvertFrom-Json
built-in.sumber
http://www.
dan PS tidak peduli tentanghttp://
atau tentang situswww.
. PS saya (5.1.14393) juga tidak peduli.content
.ConvertFrom-Json
tidak secara eksplisit hanya membutuhkan.content
sebagian dari permintaan web, tetapi itu berfungsi pada pengaturan saya juga.R,
98, 112, 108 bytebermain golf 4 berkat @miff
Baris pertama mengimpor data menggunakan pustaka JSON. Baris kedua mengambil nama negara yang relevan. Itu mengurutkan negara-negara dengan medali emas dalam urutan yang meningkat, membalikkan indeks, dan mengambil 3 pertama, mencetaknya.
sumber
rev(order(a$g))
denganorder(-a$g)
untuk menyimpan 4 byteJavaScript (ES6), 122 Bytes
Karena masalah keamanan browser , kode ini harus dijalankan
medalbot.com
. Namun itu tidak mengambil keuntungan dari itu dan berpotensi dijalankan di tempat lain. Perhatikan juga bahwa saya memasukkan\n
karakter, tetapi saya hanya menghitung adalah satu, karena saya bisa menggantinya dengan satuNode.js (ES6), 173 Bytes
Ini akan menjadi jauh lebih singkat jika API mengembalikan semua data dalam satu rentang, tetapi karena kembali dalam dua bagian, saya harus menggabungkan bagian-bagian dan menggabungkannya, dan kemudian menguraikannya.
Node.js (ES6) + Permintaan, 138 Bytes
Lebih baik, tetapi masih tidak sebagus versi browser. Terima kasih, ambil API! Permintaan adalah pustaka klien HTTP populer yang digunakan untuk menyederhanakan permintaan, dan Anda dapat melihat itu berlaku di sini.
sumber
bash + w3m + jq ,
8359 byteTerima kasih kepada Jordan untuk tiga byte.
Terima kasih untuk ANDA selama 24 byte lagi! Ternyata data diurutkan. Wow. : D
sumber
.|
dan mengindeks hasilsort_by
secara langsung, dan Anda dapat menyimpan byte lain dengan menggunakan[:3][]
alih-alih[0,1,2]
. Semua bersama-sama:sort_by(-.gold_count)[:3][].country_name
.w3m medalbot.com/api/v1/medals|jq -r '.[:3][].country_name'
Java 8,
261258 byteIni menggunakan lambda untuk menyimpan beberapa byte dan pustaka internet untuk mendapatkan halaman web. Selain itu hanya Jawa.
Inilah POJO (lama) saya untuk pengujian (dan golf):
Memperbarui
java.net
Impor dihapussumber
i
tetapi Java tidak mengubah boolean menjadi int atau sebaliknya, jika itu yang Anda pikirkan. Anda juga membuat saya sangat gugup dengan suntingan terakhir.MATL , 67 byte
Ini tidak berfungsi online karena berfungsi
Xi
(urlread
) tidak diizinkan.Contoh dijalankan:
Penjelasan
Ini membaca konten sebagai string dan kemudian menerapkan regex
'(?<="c.+e": ")[^"]+'
untuk mengekstrak nama negara. Regex menggunakan tampilan-belakang dengan"c.+e"
bukannya"country_name"
mengurangi panjang kode.sumber
Python 3,
202, 164 byte.Python 3 tidak melakukan penanganan url / json pendek. : /
Tidak menyadari API sudah mengurutkan berdasarkan jumlah emas
sumber
Python 2,
120113 byteTerima kasih @Nick T dan @Value Ink
sumber
from urllib import*
dan menggunakan hanyaurlopen
menghemat 1 byte. Selain itu, Anda harus dapat mengambil pernyataan cetak dan meletakkannya tepat setelah tanda titik dua, menyelamatkan Anda dari lekukan.urlopen
objeklist()
, apakah itu melakukan hal yang sama.readlines()
?JavaScript + jQuery,
114100 byteKarena alasan Cross Origin Requests, ini harus dijalankan dari
medalbot.com
domain (dengan jQuery).Sejarah
sumber
$.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 byteMenggunakan modifikasi pola regex dari jawaban MATL Luis Mendo , yang lebih dioptimalkan oleh @Jordan, karena Ruby tidak mendukung quantifiers di lookbehinds.
-18 byte dari @Jordan.
sumber
.map(&:last)
seluruhnya selama 12 byte, dan menghilangkan yang utama/
di/api
untuk satu lagi./"cou.+"(.+)"/
/y_.+"(.+)"/
./
penyebab kesalahan pada versi Ruby saya. Atau mungkin jaringan saya aktif? Masa bodo. Saya menggunakan regex yang sedikit berbeda dari yang Anda sarankan tetapi panjangnya sama.PowerShell, 60
Ide dasar yang sama seperti TimmyD (tidak melihat jawaban mereka sebelum saya diposting), tetapi sedikit lebih pendek :-)
sumber
|% c*
bekerja parsing? Maksudku, memang, aku baru saja mencobanya, tapi itu beberapa sintaks aneh (bahkan menyoroti ISE saya sebagai kesalahan).ForEach-Object [-MemberName] <String>
. The-MemberName
mendukung parameter wildcard, sehingga dalam hal ini mengembang hanya cocok anggota yang wildcard:country_name
. Menyimpan beberapa karakter juga ;-)Mathematica
9666 byte@alephalpha menemukan cara untuk bekerja langsung dari file (tanpa menyimpannya), sehingga menghemat 30 byte!
Import
mengimpor file sebagai file JSON Mentah.[[;;3,2]]
membutuhkan baris 1-3, entri kedua (nama negara).sumber
Import["http://www.medalbot.com/api/v1/medals","RawJSON"][[;;3,2]]
PHP,
205 139 124 116 111109 byteSaya hanya ingin menggunakan operator pesawat ruang angkasa baru untuk PHP 7 sekali ( EDIT : Ini berlebihan, karena penyortiran tidak diperlukan):
Jika kami menghilangkan langkah penyortiran yang tidak perlu dan menganggap API memberikan data yang sudah diurutkan berdasarkan gold_count turun (seperti yang terlihat), kami dapat mempersingkat ini lebih lanjut:
Catatan: Pemutus baris dalam string sengaja untuk menyimpan byte dari \ n
Sejarah
sumber
error_reporting
nilai default tidak menampilkan pemberitahuan, Anda dapat menghilangkan tanda kutip ganda. Dan API medalbot tampaknya berfungsi tanpa www. subdomain juga. Maka Anda tidak perlu kawat gigi di sekitarecho
.for(;$i<3;)echo$d[+$i++][country_name]." "
menguranginya dengan 5 byte. Ruang terakhir menjadi jalur masuk. Atau hanya sebagai loop sementarawhile($i<3)
BASH + w3m + utils core, 70 byte
Sepertinya output sudah diurutkan. Hanya perlu membuang semua teks tambahan.
sumber
CJam (57 byte)
Demo online tidak tersedia karena mengambil konten dari web. Ini menipu dengan tidak benar-benar mem-parsing JSON, tetapi dengan asumsi bahwa struktur tidak akan berubah. (Tetapi kemudian begitu juga sebagian besar jawaban yang ada, dengan cara yang berbeda).
sumber
Python 2, 117 byte
sumber
import
dan*
, dan dengan memindahkannyaprint
langsung setelah tanda titik dua di baris2
. Kami biasanya menggunakan#
s alih-alih**
sebelum dan sesudah untuk tajuk kami.Clojure, 122 byte
Tidak ada perpustakaan JSON yang digunakan :). Membaca string dari URL, mengganti titik dua dengan string kosong dan mengevaluasi string yang menghasilkan peta Clojure. Mengambil 3 elemen pertama dan fungsi peta bersemangat yang mencetak
country_name
properti masing-masing elemen.sumber
Java 8
386384459 byte2 byte disimpan dari @Easterly Irk
Pengajuan golf kode pertama saya jadi saya yakin ada cara untuk menghemat banyak byte, tapi oh well :)
Ini menggunakan Gson untuk membaca JSON
Membutuhkan:
Kode golf:
Kode Tidak Terkunci:
sumber
import
dikompilasi?R,
9795 byteSedikit perbaikan atas jawaban user5957401, tidak perlu disortir, dan nama perpustakaan lebih pendek. Juga upaya pertama saya bermain golf;)
sumber
Kotlin (Script) ,
125121119 byteDapat dijalankan dengan
kotlinc -script <filename>
atau melalui IDEA sebagai file * .kts.sekarang, jika kita membuat asumsi yang SANGAT besar tentang format, termasuk jumlah baris, kita dapat memotongnya menjadi:
atau bahkan
Terima kasih kepada orang-orang di tim slack Kotlin karena membantu saya memotong beberapa lusin byte!
sumber
Javascript 167 byte
sumber