লিডারবোর্ড গল্ফ


11

এই প্রশ্নের লিডারবোর্ডটি গল্ফ করুন (আইডি = 111735)। আপনার প্রোগ্রামটির স্ট্যাকএক্সচেঞ্জ এপিআই-তে একটি এইচটিটিপি বা এইচটিটিপিএস অনুরোধ জারি করা উচিত , এটি বিশ্লেষণ করে একটি সাধারণ লিডারবোর্ড স্নিপেটের অনুরূপ আকারে ব্যবহারকারীর কাছে উপস্থাপন করা উচিত

নমুনা আউটপুট (প্রশ্নের পরিবর্তে 47338 প্রশ্নের জন্য ):

Leaderboard
    Author  Language    Size
1.  FryAmTheEggman  Pyth    19
2.  Peter Taylor    CJam    24
3.  Martin Ender    CJam    27
3.  Peter Taylor    GolfScript  27
5.  randomra    J   32
5.  Optimizer   CJam    32
7.  Timtech TI-Basic 83/84  40
8.  mollmerx    k   41
9.  Sp3000  ><> 45
10. Sherlock9   Ruby    47
11. Martin Ender    Mathematica 49
12. Alex A. Julia   57
13. Sp3000  Python 2    58
14. Zgarb   Haskell 68
15. Timtech GML 76
16. Jakube  Python 2    79
16. nimi    Haskell 79
18. coredump    Common Lisp 91
19. Jim Large   Ruby    92
Winners by Language
Language    User    Score
Python 2    Sp3000  58
CJam    Peter Taylor    24
Julia   Alex A. 57
TI-Basic 83/84  Timtech 40
><> Sp3000  45
Haskell Zgarb   68
GolfScript  Peter Taylor    27
Common Lisp coredump    91
Pyth    FryAmTheEggman  19
k   mollmerx    41
J   randomra    32
Ruby    Sherlock9   47
Mathematica Martin Ender    49
GML Timtech 76

3, 5 এবং 16 এর পুনরাবৃত্তি রেখাগুলি নোট করুন Maybe সম্ভবত আমি কেবল স্কোরের সদৃশকে সঠিক, অ-সরলিকৃত হস্তান্তর করার জন্য একটি বিশেষ অ-প্রতিযোগিতামূলক উত্তর যুক্ত করব।

আউটপুটটি সমন্বিত হওয়া উচিত:

  1. "লিডারবোর্ড" লাইন
  2. "\ TAuthor L t ভাষায় \ t সাইজ" লাইন
  3. প্রতিটি উত্তরের জন্য, র‌্যাবের ট্যাব-বিভাজিত রেখা এবং ক ., তারপরে লেখকের নাম, তারপরে ভাষার নাম এবং তারপরে স্কোর করুন; স্কোর জন্য আরোহী ক্রম
  4. "ভাষা দ্বারা বিজয়ী" লাইন
  5. "ভাষা \ tUser \ tScore" লাইন
  6. প্রতিটি ব্যবহৃত ভাষার জন্য, ট্যাব-বিভাজিত ভাষার নাম, নিম্ন স্কোর উত্তর এবং স্কোর লেখক

অন্য কথায়, এমন কিছু যেমন কোনও পাঠ্য ফাইলে ("L tLink" জিনিস ব্যতীত) এই প্রশ্নের লিডারবোর্ড স্নিপেটের ফলাফল অনুলিপি করে আটকানো হয়। পাইথনে রেফারেন্স বাস্তবায়নও দেখুন ।

বিধি

  • একটি এপিআই অনুরোধের বাইরে কোনও নেটওয়ার্ক অ্যাক্সেস নেই api.stackexchange.com
  • এই প্রশ্নটি জমা দেওয়ার পরে উপস্থিত এপিআই বৈশিষ্ট্য বা ভাষার কোনও ব্যবহার নেই।
  • উত্তর পোস্টের প্রথম লাইনটি লিডারবোর্ডের সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত। যদি এটি প্রশ্নের সাথে সংযুক্ত লিডারবোর্ড স্ক্রিপ্টটি ভেঙে দেয় তবে উত্তরটি প্রতিযোগিতামূলক।
  • যদি নতুন যুক্ত হওয়া উত্তরটি কিছু বিদ্যমান উত্তর ভাঙ্গা রেন্ডার করে তবে পুরাতন উত্তরটির লেখককে এটি ঠিক করতে হবে (বা এটি প্রতিযোগিতামূলক হয়ে ওঠে)।
  • ভাষার লিঙ্কগুলি, স্ট্রাইক আউট স্কোর ইত্যাদি পরিচালনা করা উচিত।
  • স্নিপেটের মতো র‌্যাঙ্কগুলি পরিচালনা করা উচিত (যেমন সমান স্কোর => সমান র‌্যাঙ্ক => র‌্যাঙ্কের ফাঁক)।

যথেষ্ট পরিমাণ নিষ্ক্রিয়তার পরে সর্বনিম্ন স্কোর সহ উত্তর স্বীকৃত উত্তর (সর্বনিম্ন 1 মাস)।

ভাল ধারণা

  • প্রশ্ন আইডি 47338 (ডুপ্লিকেট স্কোর হ্যান্ডলিং + স্ট্রাইক আউট স্কোর হ্যান্ডলিং জন্য) এবং 17005 (লিঙ্কগুলি হ্যান্ডলিংয়ের জন্য) দিয়ে পরীক্ষা করার জন্য। এটি উত্তরকে ভাল থেকে উত্তমকে বাধা দেয় এবং পরবর্তী জমা দেওয়ার বিরতি থেকে রক্ষা করে।
  • এর জন্য এবং ওভাররাইড আইডি সংস্করণ উভয়ের জন্য আউটপুট উদাহরণ অন্তর্ভুক্ত করা।

জরুরী না

  • 100 টিরও বেশি উত্তর হ্যান্ডলিং (একক অনুরোধের জন্য API এর সীমা)
  • মন্তব্যে ওভাররাইড পরিচালনা করা
  • "ভাষা দ্বারা বিজয়ীদের" বিভাগ বাছাই করা
  • প্রতিযোগিতা এবং ভাঙ্গা উত্তরের বৈষম্য

লিডারবোর্ড


কিছুটা সম্পর্কিত এবং এটি (তবে তারা খুব আলাদা চ্যালেঞ্জ)।
স্টিভি গ্রিফিন

উত্তর:


2

পার্ল + মোজোলিসিক, 468 456 469 504 বাইট

মোজোলিস লাইব্রেরি ব্যবহার করা ।

use v5.10;use ojo;while(@i=@{(g("http://api.stackexchange.com/2.2/questions/111735/answers?site=codegolf&filter=withbody&page=".++$p)->json//{})->{items}}){push@r,[$_->{owner}{display_name},(($h=x($_->{body})->at("h1,h2")||next)->at("a")||$h)->text=~/\s*([^,]+)\s*/,$h->text=~/(\d+)[^\d]*$/]for@i}$,="   ";say"Leaderboard
",Author,$l=Language,Size;say+(++$i,$s{@$_[2]}//=$i).".",@$_
for@r=sort{@$a[2]-@$b[2]}@r;%h=map{@$_[1],$_}reverse@r;say"Winners by $l
$l",User,Score;say$_,$h{$_}[0],$h{$_}[2]for keys%h

Ungolfed:

use v5.10;
use ojo;

my @r;
while (my @i = @{ (g("http://api.stackexchange.com/2.2/questions/111735/answers?site=codegolf&filter=withbody&page=" . ++$p)->json // {})->{items} }) {
    my $h = x($_->{body})->at("h1,h2") or next;
    push(@r, [$_->{owner}{display_name}, ($h->at("a") || $h)->text =~ /\s*([^,]+)\s*/, $h->text =~ /(\d+)[^\d]*$/]) for @i;
}

$, = "\t";
my %s;
say("Leaderboard\n", "Author", (my $l = "Language"), "Size");
say((++$i, $s{$_->[2]} //= $i) . ".", @$_) for @r = sort { $a->[2] <=> $b->[2] } @r;

my %h = map { $_->[1] => $_ } reverse(@r);
say("Winners by $l\n$l", "User", "Score");
say($_, $h{$_}[0], $h{$_}[2]) for keys(%h);

Can't locate ojo.pm in @INC-> এর অর্থ কি এটি কেবল "পার্ল" নয়, "পার্ল + মোজোলিসিয়াস"? ভাষার সাথে অন্তর্ভুক্ত-অন্তর্ভুক্ত গ্রন্থাগারগুলি কী মানক লুফোল হিসাবে গণনা করে না?
vi।

যদি আমি প্রশ্নটি আইডি 47338 তে প্যাচ করি তবে আমি সম্পর্কের সঠিক পরিচালনা করতে দেখছি না। বুদ্ধিমান র‌্যাঙ্কের পরিবর্তে এন্ট্রি অদৃশ্য হয়ে যায়।
vi।

সংশোধন: একই স্কোর এন্ট্রি বিভিন্ন পদমর্যাদা গ্রহণ করে। যদিও এটি এই উত্তরটিকে অবৈধ (এখনও) সরবরাহ করে না, এটি ভাল নয়।
vi।

@Vi। স্থির সম্পর্ক।
ডেনিস ইবায়েভ

1
কাজ করে। সম্ভবত সবচেয়ে গুরুতর বাকী ইস্যু (এবং ধারণা করা হয় ডাউনভোটের উত্স) জমা দেওয়ার নাম। খাঁটি পার্ল সমাধানের সাথে প্রতিযোগিতা এড়ানোর জন্য এটি "পার্ল + মোজোলিসিস" এ পরিবর্তন করুন? মোজোলিশিস বেশিরভাগ পার্ল মোতায়েনের ক্ষেত্রে অনিলাইনার-ভিত্তিক (তাই গল্ফের জন্য দরকারী) লাইব্রেরি ইনস্টলড না বলে মনে হয়, তাই ভাষার অংশ হিসাবে বিবেচনা করা যায় না।
vi।

6

পাইথন 3, 860 856 বাইট

সামান্য গল্ফযুক্ত, কেবল লিডারবোর্ড বুটস্ট্র্যাপ করতে এবং অন্যান্য গল্ফারদের জন্য কিছু টেম্পলেট সরবরাহ করতে:

import json,re,html as h,requests as r
p=print
u=h.unescape;a=[];n={}
for i in json.loads(r.get("https://api.stackexchange.com/2.2/questions/111735/answers?page=1&pagesize=100&site=codegolf&filter=!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe").text)["items"]:
    m=re.match(r'<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)',i["body"].splitlines()[0]);l=u(m.group(1));t=u(i["owner"]["display_name"]);s=m.group(2);a.append((t,l,s))
    if l not in n: n[l]=[]
    n[l].append((t,s))
p("Leaderboard\n\tAuthor\tLanguage\tSize")
z=0;y=None
for i in enumerate(sorted(a,key=lambda x:x[2])):
    if y==i[1][2]:z+=1
    else:z=0;y=i[1][2]
    p("%d.\t%s\t%s\t%s"%(i[0]+1-z,i[1][0],i[1][1],i[1][2]))
p("Winners by Language\nLanguage\tUser\tScore")
for i in n.keys():
    n[i].sort(key=lambda x:x[1])
    print("%s\t%s\t%s"%(i,n[i][0][0],n[i][0][1]))

ট্যাব সহ সূচিত। ম্যাথমেটিকার উত্তরের সাথে স্কোর টাই তৈরির জন্য শেষটি printইচ্ছাকৃতভাবে প্রতিস্থাপন করা হয়নি ।p

Ungolfed:

import json
import re
import html
import requests
url="https://api.stackexchange.com/2.2/questions/111735/answers?page=1&pagesize=100&site=codegolf&filter=!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"
data=json.loads(requests.get(url).text)
answers=[]
languages={}
for i in data["items"]:
    header=i["body"].splitlines()[0]
    m=re.match(r'<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)', header)
    lang=html.unescape(m.group(1))
    author=html.unescape(i["owner"]["display_name"])
    score=m.group(2)
    answers.append((author, lang, score))
    if lang not in languages: languages[lang]=[]
    languages[lang].append((author, score))
answers.sort(key=lambda x:x[2])
print("Leaderboard")
print("\tAuthor\tLanguage\tSize")
rankadj=0
prevscore=None
for i in enumerate(answers):
    if prevscore == i[1][2]:
        rankadj+=1
    else:
        rankadj=0
        prevscore=i[1][2]
    print("%d.\t%s\t%s\t%s" % (i[0]+1-rankadj, i[1][0], i[1][1], i[1][2]))
print("Winners by Language")
print("Language\tUser\tScore")
for i in languages.keys():
    w=languages[i]
    w.sort(key=lambda x:x[1])
    print("%s\t%s\t%s" % (i, w[0][0], w[0][1]))

দ্রষ্টব্য: এটি এখনও লিঙ্কগুলি সঠিকভাবে পরিচালনা করে না, সুতরাং ব্যর্থ হয়, উদাহরণস্বরূপ, প্রশ্ন 17005


1
এমনকি যদি আপনি এটি নিজের উত্তর, আপনি আছে গলফ করার জন্য একটি উত্তর কোড-গলফ প্রশ্ন।
NoOneIs এখানে

@NoOneIsHere আমি নিশ্চিত আমাদের সম্পর্কে "নই আছে থেকে"। কেবলমাত্র যদি "আপনি যদি কোনও কোড-গল্ফ প্রশ্নের উত্তর দেন এবং জিততে চান তবে "।
vi।

3
@Vi। তারপরে এটিকে একটি রেফারেন্স সমাধান হিসাবে প্রশ্নে অন্তর্ভুক্ত করুন। এটি একটি উত্তর, যা (আপনার নিজের) প্রশ্নের উত্তর দেয় না, যা গল্ফড কোডের জন্য কোড-গল্ফের জন্য জিজ্ঞাসা করে ।
NoOneIs এখানে

1
@Vi। নাঃ। হয় এটি পুরোপুরি গল্ফড বা এটি অনুমোদিত নয়। যদি এটি সহজেই গল্ফ করা যায় তবে এটি কোনও উত্তর নয়। আমি সত্যিই বলতে চাই এটি একটি রেফারেন্স সমাধান হিসাবে প্রশ্নে রাখা।
Rɪᴋᴇʀ

4
@Vi। না, এটি আপনার প্রসারের সেরা দিকে গল্ফ করুন
NoOneIsHere

1

বাশ + জিকিউ, 399 বাইট

দ্রষ্টব্য, এটি প্রায় অবশ্যই গল্ফ করা যেতে পারে, jqএক্সপ্রেশন যুক্তি অনুকূল করে।

Golfed

curl api.stackexchange.com/2.2/questions/111735/answers?site=codegolf\&filter=withbody|zcat|jq -r '[.items[]|{o:.owner.display_name}+(.body|capture("^<h1>(?<l>.*?),.*?(?<b>\\d*)\\D*</h"))]|sort_by(.b|tonumber)|("Leaderboard\n\tAuthor\tLanguage\tSize",(keys[] as $i|.[$i]|"\($i+1).\t"+.o+"\t"+.l+"\t"+.b),"Winners by Language\nLanguage\tUser\tScore",(group_by(.l)|.[]|min_by(.b)|.l+"\t"+.o+"\t"+.b))'

নমুনা আউটপুট

Leaderboard
    Author  Language    Size
1.  zeppelin    Bash + JQ   399
2.  Tom JavaScript ES6  454
3.  Denis Ibaev Perl    456
4.  Vi. Python 3    860
Winners by Language
Language    User    Score
Bash + JQ   zeppelin    399
JavaScript ES6  Tom 454
Perl    Denis Ibaev 456
Python 3    Vi. 860

JQ এর কোন সংস্করণ প্রয়োজন? আমি পাইerror: capture is not defined
vi।

আমি যখন প্রশ্ন আইডিকে 47338 তে প্যাচ করি তখন আমি পুনরাবৃত্তিগুলি দেখতে পাচ্ছি না The
vi।

মার্টিন ইন্ডারের সিজেএএম উত্তরে "সিজেএম, <s> 28 </s> 27 বাইট" রয়েছে। অফিসিয়াল লিডারবোর্ড স্নিপেটের মতো এটির 28, নয় 27 হিসাবে ব্যাখ্যা করা উচিত। বা পাইথের 19 বনাম 22 বাইট।
vi।

পয়েন্টটি নোট করুন "* ভাষাগুলির লিঙ্কগুলি, স্ট্রাইক আউট, ইত্যাদি ইত্যাদি পরিচালনা করা উচিত" " চ্যালেঞ্জ নিয়মে।
vi।

@ ভিআই - এখনই সব সেট করা উচিত ( jqplay.org/s/LuZfAn2Pxr দেখুন )। পাইথ উত্তরটি এখনও 22 বাইট, কারণ এটি কেবল সঠিকভাবে ফর্ম্যাট করা হয়নি (শেষ বাইট গণনাটি প্রথম আসে)।
জেপেলিন

1

গণিত, 852 856 বাইট

অন্তর্নির্মিত JSONToolsপ্যাকেজ ব্যবহার করে । ম্যাথমেটিকাকে বোঝানোর জন্য এটি ব্যবহৃত জিনিস নয় ... তাই আমি এটি ব্যবহার করেছি!

p=Print;S=StringRiffle;L=Length;r=Range;out=Association@JSONTools`FromJSON[Import["http://api.stackexchange.com/2.2/questions/111735/answers?site=codegolf&filter=withbody"]];l={};i=Association/@(out["items"]);
(f=("body"/.i)[[#]];h=StringPosition[f,{"<h1>","</h1>"}];a="display_name"/.("owner"/.i)[[#]];s=StringSplit[StringTake[f,{h[[1]][[2]]+1,h[[2]][[1]]-1}],{",","<a>","</a>",">","<s>","</s>"," bytes","<strike>","</strike>"}];AppendTo[l,{a,s[[1]],ToExpression@s[[-1]]}])&/@r@L["body"/.i];l=SortBy[l,Last];o=r@L@l;If[l[[#]][[3]]==l[[#-1]][[3]],o[[#]]=o[[#-1]]]&/@r[2,L@l];
p@"Leaderboard"
p@"\tAuthor\tLanguage\tSize"
For[i=1,i<=L@l,i++,p[ToString@o[[i]]<>"."<>S[l[[i]][[#]]&/@r@3,"\t"]]]
l=SortBy[l,{#[[2]],#[[3]]}&];l=DeleteDuplicatesBy[l,#[[2]]&];
p@"Winners by Language"
p@"Language\tUser\tScore"
For[i=1,i<=L@l,i++,p[S[l[[i]][[#]]&/@{2,1,3},"\t"]]]

আমি কীভাবে এটি পরীক্ষা করব? আমি পাই ReplaceAll::reps: <content of the downloaded Mathematica answer> is neither a list of replacement rules nor a valid dispatch table, and so cannot be used for replacing., তার পরে প্রিন্টগুলি হয় {$Failed, $Failed, $Failed, $Failed, $Failed, bytes, $Failed, $Failed}}
vi।

সমাধানটি তার নিজস্ব উত্স কোড দ্বারা বিভক্ত হতে পারে (যা স্পষ্টতই রয়েছে <h1>)?
vi।

@Vi। এটা অদ্ভুত, এটা আমার জন্য কাজ করে। আপনি কোন প্রশ্নটি পরীক্ষা করেছেন? আমি মনে করি না এটি উত্স কোডটি ভঙ্গ করে, কারণ স্ট্যাক এক্সচেঞ্জ এপিআইএল <এবং> এর জন্য স্বয়ংক্রিয়ভাবে এইচটিএমএল পলায়ন ব্যবহার করে।
নম্বরমানিয়াক

এটি এক, 111735. তবে আমি /tmp/q.jsonপূর্ব-ডাউনলোড করা JSON জবাব আছে যেখানে URL টি প্রতিস্থাপন করেছি ।
vi।

47338 এর জন্য আউটপুট: পেস্ট.ডিবিয়ান
.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.