Chúa tể của những chiếc Golf


9

Giới thiệu

Trong Lord of the Rings của JRR Tolkien, cụm từ này nằm trên trang bìa của mỗi cuốn sách.

Three Rings for the Elven-kings under the sky,
Seven for the Dwarf-lords in their halls of stone, 
Nine for Mortal Men doomed to die,
One for the Dark Lord on his dark throne
In the Land of Mordor where the Shadows lie.
One Ring to rule them all, One Ring to find them,
One Ring to bring them all, and in the darkness bind them,
In the Land of Mordor where the Shadows lie

Tuy nhiên, điều này không thú vị. Nó chỉ . Chúng ta hãy thay đổi điều này thành .

Bạn phải làm gì

Sử dụng API trao đổi ngăn xếp (hoặc codegolf.stackexchange.com/users, hoặc Stack Exchange Data Explorer) và tìm hai người dùng có điểm số cao nhất về , người dùng mới nhất và người dùng có uy tín cao nhất chỉ với bài viết về tiêu cực .

Sau đó, bạn phải chèn những tên người dùng này vào văn bản sau:

Three Golfs for the <highest-scored code-golf user>-king under the sky,
Seven for the <second-highest-scored code-golf user>-lord in their halls of stone,
Nine for the Mortal <newest user> doomed to die,
One for the Dark Lord <highest reuptation user with only negative scored code-golf posts>
In the land of Golfdor, where the Golfers lie
One Golf to rule them all, One Golf to find them,
One Golf to bring them all, and in the darkness bind them,
In the Land of Golfdor, where the Golfers lie

Bạn phải chèn bốn tên người dùng bạn tìm thấy vào văn bản trong ngoặc vuông.

Các quy tắc khác

  • Đây là nên mã ngắn nhất sẽ thắng.
  • Không có công cụ rút ngắn URL (bao gồm ppcg.(ga|lol))

1
Bạn có muốn In the Land of Golfdor, where the Golfers lieở đầu ra hai lần như trên sách không?
Riley

Chúng ta có thể giả định rằng sẽ có ít nhất một người dùng chỉ có các bài viết về mã được đánh giá tiêu cực không?
Martin Ender

1
@Riley ơi, tôi hiểu rồi. Chỉnh sửa.
NoOneIsHãy

1
Chúa tể bóng tối có thể có 0 điểm trong môn đánh gôn hay phải là điểm số âm?
MegaTom

1
@MegaTom Nó phải âm.
NoOneIsHãy

Câu trả lời:


2

PHP, 577 byte

không được kiểm tra; Tôi hiện không có hệ thống nào khả dụng allow_url_fopen=On
và tôi đã không dành thời gian để sao chép và dán các nguồn trang.

function g($s){return join(file("http://codegolf.stackexchange.com/$s"));}$m=preg_match_all;$m("#r-de.+/(\d+)/.+>(.+)<#U",$a=g($u="$u&filter=all"),$b);$h=$b[2];$m("#>(.+)</a.+\s1 i#",g("users?tab=NewUsers&sort=creationdate"),$c);while($a){foreach($b[1]as$i=>$n)if($m("#st \"><strong>(-?)\d+#",$e=g("search?tab=votes&q=user:$n+[code-golf]"),$d)&&$d[1][0])break 2;if($a=strstr($a,"l=\"n"))$m("#r-de.+/(\d+)/.+>(.+)<#U",$a=g("$u&page=".$p+=!$p++),$b);}$m("#<code>(.+)</code>#U",g("q/93545"),$t);echo join([1=>$h[0],3=>$h[1],5=>$c[1][0],7=>$b[2][$i];]+split("#&[lg]t;#",$t[1][2]));

phá vỡ

// function to get page content from ppcg
function g($s){return join(file("http://codegolf.stackexchange.com/$s"));}

$m=preg_match_all;

// A,B: highest scores: find user names
$m("#r-de.+/(\d+)/.+>(.+)<#U",$a=g($u="users?filter=all"),$b);
$h=$b[2];   // remember the names

// C: new users: find username after "1 in one day"
$m("#>(.+)</a.+\s1 i#",g("$u&tab=NewUsers&sort=creationdate"),$c);

// D: loop through users from first query
while($a)
{
    foreach($b[1]as$i=>$n)
        // find "vote-count-post" in code-golf votes for that user
        if($m("#st \"><strong>(-?)\d+#",$e=g("search?tab=votes&q=user:$n+[code-golf]"),$d)
        &&$d[1][0])             // test if highest vote is negative
            break 2;
    // none found yet?
    if($a=strstr($a,"l=\"n"))   // if there is a "next" link, get next page
        $m("#r-de.+/(\d+)/.+>(.+)<#U",$a=g("$u&page=".$p+=!$p++),$b);
}

$m("#<code>(.+)</code>#U",g("q/93545"),$t); // get code blocks from question page

echo join([         // 4. join and print
    1=>$h[0],           // first two results from first preg_match
    3=>$h[1],
    5=>$c[1][0],        // first result from second preg_match
    7=>$b[2][$i];       // $i-th username from (latest) reputation list
]+                  // 3. and replace indexes 1,3,5,7 with above array
split("#&[lg]t;#",  // 2. split by "<" and ">"
    $t[1][2]        // 1. output template is the 3rd code block
));
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.