Siapa yang memiliki bintang terbanyak di The Nineteenth Byte?

16

Catatan: tantangan ini melibatkan mengunduh dan memilah-milah halaman web HTML. Jika bahasa Anda tidak bisa menangani ini, Anda mungkin tidak ingin berpartisipasi dalam tantangan ini.

pengantar

Selalu ada diskusi di The Nineteenth Byte Chat tentang siapa yang memimpin kanan. Jadi, mari bantu semua orang keluar dan hitung jumlah total bintang per pengguna dalam obrolan.

Tantangan

Diberi bilangan bulat positif Nyang lebih besar dari nol, hitung pemimpin (s) dari kanan dari Npesan yang terakhir dibintangi dalam obrolan. Pesan-pesan ini dapat dilihat di sini . Petunjuk: setiap halaman memiliki 50 pesan yang berkilau bintangnya. Output akan menjadi daftar 5 pengguna teratas dengan jumlah pesan yang berkilau bintangnya . Bonus dari -15% dari jumlah byte Anda akan diberikan jika Anda dapat menampilkan nama pengguna pengguna tersebut, tetapi tidak ada penalti yang akan diberikan jika Anda hanya menampilkan nomor id pengguna. Harap perhatikan bahwa ada kata-kata kotor dalam beberapa pesan yang berkilau bintangnya. Jika Anda peka terhadap jenis bahasa ini, lihat halaman dengan hati-hati.

Contoh (Gambar adalah kanan saat ini saat menulis tantangan ini):

masukkan deskripsi gambar di sini

  • (RED) Input: 5Output (Dengan bonus):[Geobits Sp3000 PhiNotPi Seadrus]
  • (BIRU) Input: 10Output (Tanpa bonus):[51024 17335 24697 116494 129255]
  • (HIJAU) Input: 14Output (Tanpa bonus):[51024 116494 141697 17335 24697]

Barang ekstra:

Ikatan di 5 teratas akan diurutkan berdasarkan nomor id pengguna terendah hingga tertinggi . Jika ada kurang dari lima pengguna, output saja leaderboard dengan slot kosong di akhir. Input dan output dapat dalam format apa pun. Output tidak perlu dikapitalisasi. Jika input lebih besar dari 50, Anda masih harus menghitung pesan di halaman 2, halaman 3, dll. Anda dapat mengasumsikan bahwa input akan selalu di bawah 2^31, dan juga tidak akan terlalu besar sehingga 1) lebih besar dari jumlah pesan yang berkilau bintangnya bahwa ada dan 2) tidak akan crash program (dengan membuat array ke besar, kehabisan memori, dll.).

Ini adalah , kode terpendek dalam byte yang menang!


Papan peringkat

Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

## Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda bisa menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

## Perl, 43 + 2 (-p flag) = 45 bytes

Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes

var QUESTION_ID=62182,OVERRIDE_USER=36670;function answersUrl(e){return"http://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"http://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>

GamrCorps
sumber
3
Terima kasih. Saya ingin tahu tentang hal ini untuk sementara waktu sekarang, dan tidak ingin repot menulis sesuatu untuk mencari tahu. Sekarang orang lain akan melakukannya untuk saya :)
Geobits
11
Sebelum ada yang bertanya, obrolan tidak memiliki API resmi.
Alex A.
Apakah URL harus dihitung dalam hitungan byte? Hanya memperhatikan bahwa TeaScript / JavaScript akan mengalami masalah dengan berbagi sumber daya Cross-origin
Downgoat
1
@ Vɪʜᴀɴ Akan sulit untuk menilai karakter mana yang akan dihapus yang merupakan bagian dari url, apakah menurut Anda mengizinkan semua orang untuk menghapus 70 karakter (kira-kira panjang url) akan membantu masalah ini?
GamrCorps
1
Saya telah diabadikan di masa lalu: D
Conor O'Brien

Jawaban:

11
  • Saya sangat menyesal karena lambat tetapi membaca pesan yang berkilau bintangnya sementara pengkodean itu sangat lucu dan dilatory, ini bisa menjaga suasana hati saya selama sebulan.

  • Sunting: Ya, saya menemukan itu, masalah ikatan dan duplikat id keduanya diperbaiki secara harmonis. Triknya adalah bahwa kode lama mengurutkan id pengguna dengan menurunkan jumlah bintang, jadi saya memutar beberapa baris program saya dengan cara yang mengurutkan pengguna menurut 99-n ° _bintang; karena 99 jauh lebih besar daripada bintang top-cap (semoga - saya berasumsi), menyortir hasilnya dengan meningkatkan jumlah bintang membunuh kedua burung dengan satu batu, turun bintang dengan id pengguna yang meningkat.

BrownRecluse ,tanpa bonus = 536 dengan bonus = 551-15% = 468 b

U=New(URL);P=New(Parser);L=New(Stack);t=New(Stack);v='http://chat.stackexchange.com/rooms/info/240/the-nineteenth-byte?tab=stars&page=';j=input();a=0;for i=1to j\50+1do begin U.Location=v+i;U.get;P.Parse(U.Data);x=New(RegEx);x.Data=U.Data;x.Mask='users/(\d*)/(\S*)".*?"times">(\d*?)<';while(x.Match)and(a<j)do begin L.Push(Format('%3d%9s%s',[99-x.Value[3],x.Value[1],x.Value[2]]));a=a+1;end;end;L.sort;i=0;for each L as y do if(not y.empty)and(not t.find(y.right(y.Length-12)))and(i<5)then begin y.delete(1,12);i=i+1;t.push(y);end;output(t.join(' '));

Memasukkan

60

Keluaran

mego rainbolt alex-a lembik v

Memasukkan

90

Keluaran

aditsu mego rainbolt alex-a lembik

CATATAN

  • Program ini (termasuk bonus) tidak mendukung karakter unicode - Maaf Vɪʜᴀɴ!

  • Program ini bekerja berdasarkan fitur standar bahwa setiap halaman berisi hampir 50 pesan berbintang secara default.

  • Lihat dengan jelas bahwa 60 dan 90 pesan terkandung dalam dua halaman pertama, sementara outputnya berbeda.

  • Ini adalah halaman pengunduhan dari bahasa pemrograman ini jika itu bukan milik Anda

  • Jika diperlukan, ini adalah program tanpa bonus 485 b

    U=New(URL);P=New(Parser);L=New(Stack);t=New(Stack);v='http://chat.stackexchange.com/rooms/info/240/the-nineteenth-byte?tab=stars&page=';j=input();a=0;for i=1to j\50+1do begin U.Location=v+i;U.get;P.Parse(U.Data);x=New(RegEx);x.Data=U.Data;x.Mask='users/(\d*)/(\S*)".*?"times">(\d*?)<';while(x.Match)and(a<j)do begin L.Push(Format('%3d%9s',[99-x.Value[3],x.Value[1]]));a=a+1;end;end;L.sort;i=0;for each L as y do if(not y.empty)and(not t.find(y.right(y.Length-3)))and(i<5)then begin y.delete(1,3);i=i+1;t.push(y);end;output(t.join(' '));
    

Memasukkan

60

Keluaran

169713    107051    141888     94625    116494

Memasukkan

90

Keluaran

50454    169713    107051    141888     94625

Jika ada perbedaan antara hasil, kode saya tidak bisa disalahkan!

Abr001am
sumber
1
Mengapa ada dua alex-adalam output?
feersum
@feersum diperbaiki.
Abr001am