Lord of the Golfs

9

Wprowadzenie

W Władcy Pierścieni JRR Tolkiena to zdanie znajduje się na okładce każdej książki.

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

Nie jest to jednak interesujące. To poprostu. Zmieńmy to na.

Co musisz zrobić

Użyj interfejsu API stosu wymiany (lub codegolf.stackexchange.com/usersEksploratora danych stosu wymiany) i znajdź dwóch użytkowników z najwyższymi wynikami, najnowszy użytkownik i użytkownik o najwyższej reputacji, który uzyskał jedynie negatywną ocenę Poczta.

Następnie musisz wstawić te nazwy użytkownika do następującego tekstu:

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

Musisz wstawić cztery znalezione nazwy użytkownika do tekstu w nawiasach kątowych.

Inne zasady

  • To jest więc wygrywa najkrótszy kod.
  • Brak skracaczy URL (w tym ppcg.(ga|lol))
Nikogo tu nie ma
źródło
1
Czy chcesz In the Land of Golfdor, where the Golfers liew wynikach dwa razy, tak jak w książkach?
Riley
Czy możemy założyć, że co najmniej jeden użytkownik będzie miał tylko negatywnie ocenione kody do golfa?
Martin Ender
1
@ Riley Oh, rozumiem. Redagowanie.
NoOneIsHere
1
Czy mroczny władca może mieć 0 punktów w golfie kodowym, czy może to być wynik ujemny?
MegaTom,
1
@MegaTom Musi być ujemny.
NoOneIsHere

Odpowiedzi:

2

PHP, 577 bajtów

nie testowany; Obecnie nie mam dostępnego systemu allow_url_fopen=On
i nie poświęciłem czasu na skopiowanie i wklejenie źródeł strony.

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

awaria

// 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
));
Tytus
źródło