Wer hat die meisten Sterne im neunzehnten Byte?

16

Hinweis: Diese Herausforderung beinhaltet das Herunterladen und Durchsuchen von HTML-Webseiten. Wenn Ihre Sprache dies nicht kann, möchten Sie möglicherweise nicht an dieser Herausforderung teilnehmen.

Einführung

Im neunzehnten Byte-Chat wird immer wieder darüber diskutiert, wer das Steuerbord führt. Lassen Sie uns also jedem helfen und die Gesamtzahl der Sterne pro Benutzer im Chat zählen.

Herausforderung

NBerechnen Sie bei einer positiven Ganzzahl, die größer als Null ist, den / die Steuerbordleiter (n) der zuletzt Nmarkierten Nachrichten im Chat. Diese Meldungen können hier eingesehen werden . Hinweis: Jede Seite enthält 50 markierte Nachrichten. Es wird eine Liste der Top-5-Benutzer nach Anzahl der markierten Nachrichten ausgegeben . Ein Bonus von -15% auf Ihre Byteanzahl wird gewährt, wenn Sie die Benutzernamen dieser Benutzer anzeigen können, aber es wird keine Strafe gewährt, wenn Sie einfach die Benutzer-ID-Nummern anzeigen. Bitte beachten Sie, dass einige der markierten Nachrichten profan sind. Wenn Sie für diese Art von Sprache sensibel sind, lesen Sie die Seite mit Vorsicht.

Beispiele (Das Bild ist zum Zeitpunkt der Erstellung dieser Challenge an Steuerbord):

Bildbeschreibung hier eingeben

  • (ROT) Input: 5Output (mit Bonus):[Geobits Sp3000 PhiNotPi Seadrus]
  • (BLAU) Input: 10Output (ohne Bonus):[51024 17335 24697 116494 129255]
  • (GRÜN) Input: 14Output (ohne Bonus):[51024 116494 141697 17335 24697]

Zusätzliches Zeug:

Krawatten in den Top 5 werden nach der niedrigsten bis zur höchsten Benutzer-ID- Nummer sortiert . Wenn weniger als fünf Benutzer vorhanden sind, geben Sie die Bestenliste am Ende nur mit leeren Slots aus . Ein- und Ausgabe können in jedem Format erfolgen. Die Produktion muss nicht aktiviert werden. Wenn die Eingabe größer als ist 50, müssen Sie weiterhin die Nachrichten auf Seite 2, Seite 3 usw. zählen. Sie können davon ausgehen, dass die Eingabe immer unter 2^31und nicht so groß ist, dass sie 1) größer ist als die Anzahl der markierten Nachrichten dass es gibt und 2) wird das Programm nicht zum Absturz bringen (indem Arrays zu groß gemacht werden, der Speicher ausgeht, etc.).

Dies ist , der kürzeste Code in Bytes gewinnt!


Bestenlisten

Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.

Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:

## Language Name, N bytes

Wo Nist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:

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

Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:

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

Sie können den Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:

## [><>](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
quelle
3
Vielen Dank. Ich war jetzt schon eine Weile untätig und wollte mir nicht die Mühe machen, etwas zu schreiben, um es herauszufinden. Jetzt werden es andere für mich tun :)
Geobits
11
Bevor jemand fragt, hat der Chat keine offizielle API.
Alex A.
Muss die URL in der Byteanzahl zählen? Ich habe gerade bemerkt, dass TeaScript / JavaScript Probleme mit der gemeinsamen Nutzung
ursprungsübergreifender
1
@ Vɪʜᴀɴ Es ist schwer zu beurteilen, welche Zeichen aus der URL entfernt werden sollen. Glauben Sie, dass das Entfernen von 70 Zeichen (ungefähr die Länge der URL) für alle Benutzer hilfreich ist?
GamrCorps
1
Ich wurde in der Vergangenheit verewigt: D
Conor O'Brien

Antworten:

11
  • Es tut mir so leid, dass ich so langsam bin, aber das Lesen von markierten Nachrichten während des Programmierens war so lustig und fleißig, dass ich vielleicht einen Monat lang in Stimmung war.

  • Bearbeiten: Ja, ich habe es gefunden, die Probleme mit der Krawatte und den doppelten IDs wurden beide harmonisch behoben. Der Trick ist, dass der alte Code die Benutzer-IDs nach absteigender Anzahl von Sternen sortiert, sodass ich einige Zeilen meines Programms so verdreht habe, dass die Benutzer nach 99-n ° _stars sortiert werden. da 99 viel größer ist als das Top-Hit-Sternchen (hoffentlich - wie ich vermutete), tötet das Sortieren des Ergebnisses nach zunehmender Anzahl von Sternen beide Fliegen mit einer Klappe, absteigende Sterne mit aufsteigenden Benutzer-IDs.

BrownRecluse ,ohne Bonus = 536 mit 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(' '));

Eingang

60

Ausgabe

mego rainbolt alex-a lembik v

Eingang

90

Ausgabe

aditsu mego rainbolt alex-a lembik

ANMERKUNGEN

  • Dieses Programm (einschließlich Bonus) unterstützt keine Unicode-Zeichen - es tut mir leid, Vɪʜᴀɴ!

  • Dieses Programm basiert auf der Standardfunktion, dass jede Seite standardmäßig fast 50 markierte Nachrichten enthält.

  • Stellen Sie klar, dass 60 und 90 Nachrichten auf den ersten beiden Seiten enthalten sind, während sich die Ausgaben unterscheiden.

  • Dies ist die Download-Seite dieser Programmiersprache, falls sie nicht in Ihrem Besitz ist

  • Bei Bedarf ist dies das Bonusless-Programm von 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(' '));
    

Eingang

60

Ausgabe

169713    107051    141888     94625    116494

Eingang

90

Ausgabe

50454    169713    107051    141888     94625

Wenn die Ergebnisse inkohärent waren, übernimmt mein Code nicht die Schuld!

Abr001am
quelle
1
Warum gibt es zwei alex-as in der Ausgabe?
Feersum
@feersum behoben.
3.