Uwaga: wyzwanie to polega na pobieraniu i przesiewaniu stron internetowych HTML. Jeśli twój język nie radzi sobie z tym, możesz nie chcieć brać udziału w tym wyzwaniu.
Wprowadzenie
W The Nineteenth Byte Chat zawsze dyskutuje się o tym, kto prowadzi prawą burtę. Pomóżmy więc wszystkim i policz całkowitą liczbę gwiazdek na użytkownika na czacie.
Wyzwanie
Biorąc pod uwagę dodatnią liczbę całkowitą, N
która jest większa od zera, oblicz lider (-y) prawej burty ostatnich N
wiadomości oznaczonych gwiazdką na czacie. Te wiadomości można wyświetlić tutaj . Wskazówka: każda strona zawiera 50 wiadomości oznaczonych gwiazdką. Wyjściowa będzie lista 5 najlepszych użytkowników według liczby wiadomości oznaczonych gwiazdką . Bonus w wysokości -15% zniżki na liczbę bajtów zostanie przyznany, jeśli będziesz mógł wyświetlić nazwy tych użytkowników, ale nie zostaniesz ukarany, jeśli tylko wyświetlisz numery identyfikacyjne użytkownika. Pamiętaj, że niektóre wiadomości oznaczone gwiazdką zawierają wulgaryzmy. Jeśli jesteś wrażliwy na ten typ języka, wyświetl stronę z rozwagą.
Przykłady (Zdjęcie jest aktualną prawą burtą w chwili pisania tego wyzwania):
- (RED) Wejście:
5
Wyjście (z premią):[Geobits Sp3000 PhiNotPi Seadrus]
- (NIEBIESKI) Wejście:
10
Wyjście (Bez premii):[51024 17335 24697 116494 129255]
- (ZIELONY) Wejście:
14
Wyjście (bez premii):[51024 116494 141697 17335 24697]
Dodatkowe rzeczy:
Remisy w pierwszej piątce zostaną posortowane według numeru identyfikatora użytkownika od najniższego do najwyższego . Jeśli jest mniej niż pięciu użytkowników, po prostu wypisz tabelę wyników z pustymi miejscami na końcu. Dane wejściowe i wyjściowe mogą być w dowolnym formacie. Dane wyjściowe nie muszą być pisane dużymi literami. Jeśli dane wejściowe są większe niż 50
, nadal musisz policzyć wiadomości na stronie 2, stronie 3 itp. Możesz założyć, że dane wejściowe zawsze będą niższe 2^31
, a także nie będą tak duże, że 1) będą większe niż liczba wiadomości oznaczonych gwiazdką że istnieje i 2) nie spowoduje awarii programu (przez powiększenie tablic, brak pamięci itp.).
To jest code-golf , wygrywa najkrótszy kod w bajtach!
Liderów
Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
## Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
## Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:
## [><>](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>
Odpowiedzi:
BrownRecluse ,
bez premii = 536z premią = 551–15% = 468 bWejście
Wynik
Wejście
Wynik
UWAGI
Ten program (w tym bonus) nie obsługuje znaków Unicode - przepraszam Vɪʜᴀɴ!
Ten program działa w oparciu o standardową funkcję polegającą na tym, że każda strona domyślnie zawiera prawie 50 wiadomości oznaczonych gwiazdką.
Zobacz wyraźnie, że 60 i 90 komunikatów znajduje się na pierwszych dwóch stronach, a wyniki różnią się.
To jest strona pobierania tego języka programowania na wypadek, gdyby nie był on w twoim posiadaniu
W razie potrzeby jest to program bez premii 485 b
Wejście
Wynik
Wejście
Wynik
źródło
alex-a
na wyjściu są dwa ?