Ondokuzuncu Byte'de en çok kim yıldız var?


16

Not: Bu zorluk HTML web sayfalarını indirmeyi ve elemeyi içerir. Diliniz bu sorunu çözemezse, bu zorluğa katılmak istemeyebilirsiniz.

Giriş

Ondokuzuncu Byte Sohbeti'nde sancağa kimin liderlik ettiği hakkında tartışmalar her zaman vardır . Böylece, herkesin sohbet etmesine ve kullanıcı başına toplam yıldız sayısını saymasına yardımcı olalım.

Meydan okuma

NSıfırdan büyük bir pozitif tamsayı verildiğinde N, sohbette son yıldızlı iletilerin sancak liderlerini hesaplayın . Bu mesajlar burada görüntülenebilir . İpucu: her sayfada 50 yıldızlı mesaj bulunur. Çıktı , yıldızlı iletilerin miktarına göre ilk 5 kullanıcının bir listesi olacaktır . Bu kullanıcıların kullanıcı adlarını görüntüleyebiliyorsanız, bayt sayınızda% -15 indirim bonusu verilir, ancak yalnızca kullanıcı kimlik numaralarını görüntülerseniz ceza verilmez. Yıldızlı mesajların bazılarında küfür bulunduğunu lütfen unutmayın. Bu tür bir dile duyarlıysanız, sayfayı dikkatle görüntüleyin.

Örnekler (Görüntü, bu zorluğu yazarken geçerli sancaktır):

resim açıklamasını buraya girin

  • (RED) Giriş: 5Çıkış (Bonus ile):[Geobits Sp3000 PhiNotPi Seadrus]
  • (MAVİ) Giriş: 10Çıkış (Bonussuz):[51024 17335 24697 116494 129255]
  • (YEŞİL) Giriş: 14Çıkış (Bonus olmadan):[51024 116494 141697 17335 24697]

Ekstra şeyler:

İlk 5'teki bağlar en düşük ila en yüksek kullanıcı kimlik numarasına göre sıralanır . Beşten az kullanıcı varsa, skor tablosunu sonunda boş yuvalarla çıkarmanız yeterlidir . Giriş ve çıkış herhangi bir biçimde olabilir. Çıktının büyük harfle yazılmasına gerek yoktur. Giriş daha büyükse 50, yine de sayfa 2, sayfa 3, vb. İçindeki mesajları saymanız gerekir. Girişin her zaman altında 2^31olacağını ve o kadar büyük olmayacağını varsayabilirsiniz. 1) yıldızlı mesajların miktarından daha büyüktür. ve 2) programı çökmeyecek (dizileri büyük yaparak, bellek tükenerek, vb.).

Bu , bayt kazanır en kısa kod kazanır!


Liderler

İşte hem düzenli bir skor tablosu hem de kazananları dile göre gözden geçirmek için bir Yığın Parçacığı.

Yanıtınızın göründüğünden emin olmak için lütfen aşağıdaki Markdown şablonunu kullanarak yanıtınızı bir başlıkla başlatın:

## Language Name, N bytes

Ngönderiminizin büyüklüğü nerede . Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğu veya yorumlayıcı bayrak cezalarını ayrı olarak listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

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

Dil adını, daha sonra skor tablosu snippet'inde görünecek bir bağlantı da yapabilirsiniz:

## [><>](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>


3
Teşekkürler. Bir süredir bunu merakla bekliyordum ve öğrenmek için bir şeyler yazmayı zahmet etmek istemiyordum. Şimdi diğerleri benim için yapacak :)
Geobits

11
Herkes sormadan önce sohbetin resmi bir API'sı yoktur.
Alex

URL'nin bayt sayımında sayılması gerekiyor mu? TeaScript / JavaScript'in Kaynaklar arası kaynak paylaşımı ile ilgili sorunları olacağını fark ettim
Downgoat

1
@ Vɪʜᴀɴ Url'nin bir parçası olan hangi karakterleri kaldıracağına karar vermek zor olurdu, herkesin 70 karakteri (kabaca url'nin uzunluğu) kaldırmasına izin vermek bu soruna yardımcı olur mu?
GamrCorps

1
Bu geçmişte ölümsüzleştirildim: D
Conor O'Brien

Yanıtlar:


11
  • Yavaş olduğum için çok üzgünüm ama kodlama çok komik ve dilatory iken yıldızlı mesajları okumak, bu bir ay boyunca ruh halimi koruyabilirdi.

  • Düzenleme: Evet, buldum, kravat ve yinelenen kimlikleri sorunları hem uyumlu bir şekilde düzeltildi. Hile eski kod yıldız sayısını azalarak kullanıcı kimliklerini sıralar, bu yüzden programımın bazı satırlarını 99-n ° _stars göre kullanıcıları sıralamak şekilde büktüm; 99, en iyi hit yıldız başlığından çok daha büyük olduğundan (umarım - varsaydım), sonucu artan yıldız sayısına göre sıralamak her iki kuşu da bir taşla öldürür, yıldızları yükselen kullanıcı kimlikleriyle iner.

BrownRecluse ,bonus olmadan = 536 bonus ile = 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(' '));

Giriş

60

Çıktı

mego rainbolt alex-a lembik v

Giriş

90

Çıktı

aditsu mego rainbolt alex-a lembik

NOTLAR

  • Bu program (bonus dahil) unicode karakterleri desteklemez - Üzgünüm Vɪʜᴀɴ!

  • Bu program, her sayfanın varsayılan olarak neredeyse 50 yıldızlı mesaj içerdiği standart özelliğe göre çalışır.

  • Çıkışların farklı olmasına rağmen, ilk iki sayfada 60 ve 90 mesaj bulunduğunu açıkça görün.

  • Sahip olduğunuz durumda bu programlama dilinin indirme sayfası

  • Gerekirse, bu 485 b'lik bonussuz bir programdır.

    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(' '));
    

Giriş

60

Çıktı

169713    107051    141888     94625    116494

Giriş

90

Çıktı

50454    169713    107051    141888     94625

Sonuçlar arasında tutarsızlık varsa, kodum suçu kabul etmiyor!


1
alex-aÇıktıda neden iki s var ?
feersum

@feersum düzeltildi.
Abr001am
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.