Chi ha il maggior numero di stelle in The Nineteenth Byte?


16

Nota: questa sfida prevede il download e il setacciamento attraverso pagine Web HTML. Se la tua lingua non è in grado di gestirlo, potresti non voler partecipare a questa sfida.

introduzione

Ci sono sempre discussioni in The Nineteenth Byte Chat su chi guida la dritta. Quindi, aiutiamo tutti e contiamo la quantità totale di stelle per utente nella chat.

Sfida

Dato un numero intero positivo Nmaggiore di zero, calcola il / i leader / i della dritta degli ultimi Nmessaggi speciali nella chat. Questi messaggi possono essere visualizzati qui . Suggerimento: ogni pagina ha 50 messaggi speciali. L'output sarà un elenco dei primi 5 utenti per quantità di messaggi speciali . Un bonus del -15% sul conteggio dei byte verrà concesso se è possibile visualizzare i nomi utente di quegli utenti, ma non verrà applicata alcuna penalità se si visualizzano semplicemente i numeri ID utente. Si prega di notare che c'è parolacce in alcuni dei messaggi speciali. Se sei sensibile a questo tipo di linguaggio, visualizza la pagina con cautela.

Esempi (L'immagine è a dritta attuale al momento di scrivere questa sfida):

inserisci qui la descrizione dell'immagine

  • (ROSSO) Ingresso: 5Uscita (con bonus):[Geobits Sp3000 PhiNotPi Seadrus]
  • (BLU) Ingresso: 10Uscita (senza bonus):[51024 17335 24697 116494 129255]
  • (VERDE) Input: 14Output (Senza bonus):[51024 116494 141697 17335 24697]

Cose extra:

I legami tra i primi 5 verranno ordinati in base al numero ID utente dal più basso al più alto . Se il numero di utenti è inferiore a cinque, devi solo generare la classifica con slot vuoti alla fine. L'input e l'output possono essere in qualsiasi formato. Non è necessario capitalizzare l'output. Se l'input è maggiore di 50, devi comunque contare i messaggi a pagina 2, pagina 3, ecc. Puoi presumere che l'input sarà sempre sotto 2^31e non sarà così grande che 1) sia maggiore della quantità di messaggi speciali che c'è e 2) non si arresta in modo anomalo al programma (rendendo gli array troppo grandi, esaurendo la memoria, ecc.).

Questo è , vince il codice più corto in byte!


Classifiche

Ecco uno snippet di stack per generare sia una classifica regolare che una panoramica dei vincitori per lingua.

Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, usando il seguente modello Markdown:

## Language Name, N bytes

dov'è Nla dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:

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

Se si desidera includere più numeri nell'intestazione (ad es. Perché il punteggio è la somma di due file o si desidera elencare separatamente le penalità del flag dell'interprete), assicurarsi che il punteggio effettivo sia l' ultimo numero nell'intestazione:

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

Puoi anche rendere il nome della lingua un collegamento che verrà quindi visualizzato nello snippet della classifica:

## [><>](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
Grazie. Sono stato pigramente curioso di questo per un po 'di tempo, e non volevo preoccuparmi di scrivere qualcosa da scoprire. Ora altri lo faranno per me :)
Geobits il

11
Prima che qualcuno lo chieda, la chat non ha un'API ufficiale.
Alex A.

L'URL deve contare nel conteggio dei byte? Ho appena notato che TeaScript / JavaScript avrà problemi con la condivisione delle risorse tra le origini
Downgoat,

1
@ Vɪʜᴀɴ Sarebbe difficile giudicare quali caratteri rimuovere che fanno parte dell'URL, pensi che consentire a tutti di rimuovere 70 caratteri (all'incirca la lunghezza dell'url) aiuterebbe questo problema?
GamrCorps,

1
Sono stato immortalato in questo passato: D
Conor O'Brien,

Risposte:


11
  • Sono così dispiaciuto di essere lento ma leggere messaggi speciali mentre scrivere codice è stato così divertente e dilatativo, questo avrebbe potuto mantenere il mio umore per un mese.

  • Modifica: Sì, l'ho trovato, i problemi di collegamento e ID duplicati sono entrambi risolti in modo armonico. Il trucco è che il vecchio codice ordina gli id ​​utente in base al numero decrescente di stelle, quindi ho distorto alcune righe del mio programma in modo tale da ordinare gli utenti secondo 99-n ° _stars; dal momento che 99 è molto più grande del massimo numero di stelle (si spera - ho ipotizzato), ordinando il risultato aumentando il numero di stelle uccide entrambi gli uccelli con una fava, scendendo stelle con id utente ascendente.

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

Ingresso

60

Produzione

mego rainbolt alex-a lembik v

Ingresso

90

Produzione

aditsu mego rainbolt alex-a lembik

APPUNTI

  • Questo programma (incluso il bonus) non supporta i caratteri Unicode - mi dispiace Vɪʜᴀɴ!

  • Questo programma funziona in base alla funzionalità standard che ogni pagina contiene quasi 50 messaggi speciali per impostazione predefinita.

  • Vedi chiaramente che nelle prime due pagine sono contenuti 60 e 90 messaggi, mentre le uscite differiscono.

  • Questa è la pagina di download di questo linguaggio di programmazione nel caso in cui non sia in tuo possesso

  • In caso di necessità, questo è il programma bonusless di 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(' '));
    

Ingresso

60

Produzione

169713    107051    141888     94625    116494

Ingresso

90

Produzione

50454    169713    107051    141888     94625

Se c'è stata incoerenza tra i risultati, il mio codice non si prende la colpa!


1
Perché ci sono due alex-as nell'output?
febbraio

@feersum fixed.
Abr001,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.