Ai có nhiều ngôi sao nhất trong The Nineteenth Byte?


16

Lưu ý: thách thức này liên quan đến việc tải xuống và chọn lọc thông qua các trang web HTML. Nếu ngôn ngữ của bạn không thể xử lý điều này, bạn có thể không muốn tham gia vào thử thách này.

Giới thiệu

Luôn có những cuộc thảo luận trong Trò chuyện Byte thứ mười chín về người dẫn dắt mạn phải. Vì vậy, hãy giúp mọi người ra ngoài và đếm tổng số sao cho mỗi người dùng trong cuộc trò chuyện.

Thử thách

Cho một số nguyên dương Nlớn hơn 0, hãy tính (các) nhà lãnh đạo của bảng Nsao của các tin nhắn được gắn dấu sao cuối cùng trong cuộc trò chuyện. Những tin nhắn có thể được xem ở đây . Gợi ý: mỗi trang có 50 tin nhắn được gắn dấu sao. Đầu ra sẽ là danh sách 5 người dùng hàng đầu theo số lượng tin nhắn được gắn dấu sao . Phần thưởng giảm -15% số byte của bạn sẽ được cấp nếu bạn có thể hiển thị tên người dùng của những người dùng đó, nhưng sẽ không bị phạt nếu bạn chỉ hiển thị số id người dùng. Xin lưu ý rằng có những lời tục tĩu trong một số tin nhắn được gắn dấu sao. Nếu bạn nhạy cảm với loại ngôn ngữ này, hãy cẩn thận xem trang.

Ví dụ (Hình ảnh là mạn phải hiện tại khi viết thử thách này):

nhập mô tả hình ảnh ở đây

  • (ĐỎ) Đầu vào: 5Đầu ra (Có thưởng):[Geobits Sp3000 PhiNotPi Seadrus]
  • (BLUE) Đầu vào: 10Đầu ra (Không có tiền thưởng):[51024 17335 24697 116494 129255]
  • (XANH) Đầu vào: 14Đầu ra (Không có tiền thưởng):[51024 116494 141697 17335 24697]

Thêm thứ:

Các mối quan hệ trong top 5 sẽ được sắp xếp theo số id người dùng thấp nhất đến cao nhất . Nếu có ít hơn năm người dùng, chỉ cần xuất bảng xếp hạng với các vị trí trống ở cuối. Đầu vào và đầu ra có thể ở bất kỳ định dạng nào. Đầu ra không cần phải viết hoa. Nếu đầu vào lớn hơn 50, bạn vẫn phải đếm các tin nhắn ở trang 2, trang 3, v.v. Bạn có thể cho rằng đầu vào sẽ luôn ở dưới 2^31và cũng sẽ không lớn đến mức 1) lớn hơn số lượng tin nhắn được gắn dấu sao rằng có và 2) sẽ không làm sập chương trình (bằng cách tạo các mảng lớn, hết bộ nhớ, v.v.).

Đây là , mã ngắn nhất tính bằng byte thắng!


Bảng xếp hạng

Dưới đây là Stack Snippet để tạo cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

## Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

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

Nếu bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ của thông dịch viên), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

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

Bạn cũng có thể đặt tên ngôn ngữ thành liên kết sau đó sẽ hiển thị trong đoạn trích bảng xếp hạng:

## [><>](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
Cảm ơn. Tôi đã tò mò về điều này trong một thời gian và bây giờ không muốn viết một cái gì đó để tìm hiểu. Bây giờ những người khác sẽ làm điều đó cho tôi :)
Geobits

11
Trước khi có ai hỏi, trò chuyện không có API chính thức.
Alex A.

URL có phải tính trong số byte không? Chỉ cần lưu ý rằng TeaScript / JavaScript sẽ có vấn đề với chia sẻ tài nguyên nguồn gốc
Downgoat

1
@ Vɪʜᴀɴ Thật khó để đánh giá những ký tự nào cần loại bỏ là một phần của url, bạn có nghĩ rằng cho phép mọi người xóa 70 ký tự (gần bằng độ dài của url) sẽ giúp giải quyết vấn đề này không?
GamrCorps

1
Tôi đã được bất tử trong quá khứ này: D
Conor O'Brien

Câu trả lời:


11
  • Tôi rất xin lỗi vì chậm nhưng đọc các tin nhắn được gắn dấu sao trong khi mã hóa rất vui nhộn và giãn nở, điều này có thể khiến tâm trạng của tôi tăng lên trong một tháng.

  • Biên tập: Có, tôi đã tìm thấy nó, các vấn đề liên kết và id trùng lặp đều được khắc phục hài hòa. Thủ thuật là mã cũ sắp xếp các id người dùng theo số sao giảm dần, vì vậy tôi đã xoắn một số dòng chương trình của mình theo cách nó sắp xếp người dùng theo 99-n ° _stars; vì 99 lớn hơn nhiều so với nắp sao hàng đầu (hy vọng - tôi giả sử), sắp xếp kết quả bằng cách tăng số sao giết cả hai con chim bằng một viên đá, giảm dần các ngôi sao có id người dùng tăng dần.

BrownRecluse ,không có tiền thưởng = 536 với tiền thưởng = 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(' '));

Đầu vào

60

Đầu ra

mego rainbolt alex-a lembik v

Đầu vào

90

Đầu ra

aditsu mego rainbolt alex-a lembik

GHI CHÚ

  • Chương trình này (bao gồm tiền thưởng) không hỗ trợ các ký tự unicode - Tôi xin lỗi Vɪʜᴀɴ!

  • Chương trình này hoạt động dựa trên tính năng tiêu chuẩn mà mỗi trang chứa gần 50 tin nhắn được gắn dấu sao theo mặc định.

  • Xem rõ ràng rằng 60 và 90 tin nhắn được chứa trong hai trang đầu tiên, trong khi đầu ra khác nhau.

  • Đây là trang tải xuống của ngôn ngữ lập trình này trong trường hợp nó không thuộc sở hữu của bạn

  • Trong trường hợp cần thiết, đây là chương trình không có tiền thưởng là 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(' '));
    

Đầu vào

60

Đầu ra

169713    107051    141888     94625    116494

Đầu vào

90

Đầu ra

50454    169713    107051    141888     94625

Nếu có sự không thống nhất giữa các kết quả, mã của tôi sẽ không bị đổ lỗi!


1
Tại sao có hai alex-as trong đầu ra?
frageum

@feersum cố định.
Abr001am
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.