Qui a le plus de stars dans The Nineteenth Byte?

16

Remarque: ce défi implique le téléchargement et le filtrage des pages Web HTML. Si votre langue ne peut pas gérer cela, vous pourriez ne pas vouloir participer à ce défi.

introduction

Il y a toujours des discussions dans The Nineteenth Byte Chat pour savoir qui dirige le tribord. Alors, aidons tout le monde et comptons le nombre total d'étoiles par utilisateur dans le chat.

Défi

Étant donné un entier positif Nsupérieur à zéro, calculez le (s) leader (s) du tribord des derniers Nmessages favoris dans le chat. Ces messages peuvent être consultés ici . Astuce: chaque page a 50 messages favoris. La sortie sera une liste des 5 meilleurs utilisateurs par nombre de messages favoris . Un bonus de -15% sur votre nombre d'octets sera accordé si vous pouvez afficher les noms d'utilisateur de ces utilisateurs, mais aucune pénalité ne sera accordée si vous affichez simplement les numéros d'identification de l'utilisateur. Veuillez noter qu'il y a du blasphème dans certains des messages favoris. Si vous êtes sensible à ce type de langue, consultez la page avec prudence.

Exemples (L'image est tribord actuelle au moment de la rédaction de ce défi):

entrez la description de l'image ici

  • (ROUGE) Entrée: 5Sortie (avec bonus):[Geobits Sp3000 PhiNotPi Seadrus]
  • (BLEU) Entrée: 10 Sortie (sans bonus):[51024 17335 24697 116494 129255]
  • (VERT) Entrée: 14Sortie (sans bonus):[51024 116494 141697 17335 24697]

Trucs supplémentaires:

Les liens dans le top 5 seront triés par numéro d' utilisateur le plus bas au plus élevé. S'il y a moins de cinq utilisateurs, sortez simplement le classement avec des emplacements vides à la fin. L'entrée et la sortie peuvent être dans n'importe quel format. La production n'a pas besoin d'être capitalisée. Si la saisie est supérieure à 50, vous devez toujours compter les messages de la page 2, de la page 3, etc. Vous pouvez supposer que la saisie sera toujours inférieure 2^31et ne sera pas aussi importante qu'elle 1) est supérieure à la quantité de messages suivis qu'il y en a et 2) ne plantera pas le programme (en faisant des tableaux trop gros, en manque de mémoire, etc.).

C'est le , le code le plus court en octets gagne!


Classements

Voici un extrait de pile pour générer à la fois un classement régulier et un aperçu des gagnants par langue.

Pour vous assurer que votre réponse apparaît, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:

## Language Name, N bytes

Nest la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les rayant. Par exemple:

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

Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:

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

Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:

## [><>](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
la source
3
Merci. Cela fait un moment que je suis curieusement curieux et je ne voulais pas prendre la peine d'écrire quelque chose pour le découvrir. Maintenant, d'autres le feront pour moi :)
Geobits
11
Avant que quelqu'un ne demande, le chat n'a pas d'API officielle.
Alex A.
L'URL doit-elle compter dans le nombre d'octets? Je viens de remarquer que TeaScript / JavaScript aura des problèmes avec le partage de ressources d'origine
croisée
1
@ Vɪʜᴀɴ Il serait difficile de juger quels caractères à supprimer qui font partie de l'URL, pensez-vous que permettre à tout le monde de supprimer 70 caractères (à peu près la longueur de l'URL) pourrait résoudre ce problème?
GamrCorps
1
J'ai été immortalisé dans le passé: D
Conor O'Brien

Réponses:

11
  • Je suis vraiment désolé d'être lent, mais la lecture des messages favoris pendant que le codage était si hilarant et dilatoire, cela aurait pu garder mon humeur pendant un mois.

  • Edit: Oui, je l'ai trouvé, les problèmes liés aux identifiants et aux doublons sont tous deux corrigés de manière harmonique. L'astuce est que l'ancien code trie les identifiants utilisateur par nombre décroissant d'étoiles, j'ai donc tordu certaines lignes de mon programme de manière à trier les utilisateurs selon 99-n ° _stars; puisque 99 est bien plus grand que le capuchon étoilé (j'espère - je suppose), trier le résultat en augmentant le nombre d'étoiles tue les deux oiseaux avec une pierre, les étoiles descendantes avec des identifiants utilisateur ascendants.

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

Contribution

60

Production

mego rainbolt alex-a lembik v

Contribution

90

Production

aditsu mego rainbolt alex-a lembik

REMARQUES

  • Ce programme (y compris les bonus) ne prend pas en charge les caractères Unicode - je suis désolé Vɪʜᴀɴ!

  • Ce programme fonctionne sur la base de la fonctionnalité standard selon laquelle chaque page contient près de 50 messages favoris par défaut.

  • Voyez clairement que 60 et 90 messages sont contenus dans les deux premières pages, tandis que les sorties diffèrent.

  • Ceci est la page de téléchargement de ce langage de programmation au cas où il ne serait pas en votre possession

  • En cas de besoin, c'est le programme sans bonus de 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(' '));
    

Contribution

60

Production

169713    107051    141888     94625    116494

Contribution

90

Production

50454    169713    107051    141888     94625

S'il y avait une incohérence entre les résultats, mon code n'en est pas responsable!

Abr001am
la source
1
Pourquoi y a-t-il deux alex-as dans la sortie?
feersum
@feersum fixe.
Abr001am