골프의 제왕


9

소개

JRR 톨킨의 반지의 제왕에서이 문구는 각 책의 표지에 있습니다.

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

그러나 이것은 흥미롭지 않습니다. 그냥. 이것을 다음으로 변경하겠습니다.

해야 할 일

Stack Exchange API (또는 codegolf.stackexchange.com/usersStack Exchange Data Explorer)를 사용하여 점수가 가장 높은 두 명의 사용자를 찾습니다.마이너스 점수 만받은 최신 사용자 및 평판이 가장 높은 사용자 게시하다.

그런 다음이 사용자 이름을 다음 텍스트에 삽입해야합니다.

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

찾은 네 개의 사용자 이름을 꺾쇠 괄호 안의 텍스트에 삽입해야합니다.

다른 규칙

  • 이것은 가장 짧은 코드가 승리합니다.
  • URL 단축기 없음 (포함 ppcg.(ga|lol))

1
당신이 원하는 마십시오 In the Land of Golfdor, where the Golfers lie는 책처럼 두 배의 출력에?
라일리

마이너스 점수의 코드 골프 게시물 만 가진 사용자가 한 명 이상 있다고 가정 할 수 있습니까?
Martin Ender

1
@Riley 아, 알겠습니다. 편집.
NoOneIsHere 여기

1
암흑 군주가 코드 골프에서 0 점을 가질 수 있습니까, 아니면 음수 여야합니까?
MegaTom

1
@MegaTom 음수 여야합니다.
NoOneIsHere9

답변:


2

PHP, 577 바이트

검증되지 않은; 현재 사용할 수있는 시스템이 없으며 allow_url_fopen=On
페이지 소스를 복사하여 붙여 넣는 데 시간이 걸리지 않았습니다.

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]));

고장

// 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
));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.