Seigneur des golfs

9

Intro

Dans le Seigneur des anneaux de JRR Tolkien, cette phrase est sur la couverture de chaque livre.

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

Cependant, ce n'est pas si intéressant. C'est juste . Changeons cela en une .

Ce que tu as à faire

Utilisez l'API Stack Exchange (ou codegolf.stackexchange.com/users, ou l'explorateur de données Stack Exchange) et recherchez les deux utilisateurs avec les scores les plus élevés dans le , le plus récent et le plus réputé utilisateur avec seulement un post de ayant un score négatif .

Ensuite, vous devez insérer ces noms d'utilisateur dans le texte suivant:

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

Vous devez insérer les quatre noms d'utilisateur que vous avez trouvés dans le texte entre les crochets angulaires.

Autres règles

  • C'est le donc le code le plus court l'emporte.
  • Aucun raccourcisseur d'URL (inclus ppcg.(ga|lol))
Il n'y a personne
la source
1
Voulez-vous In the Land of Golfdor, where the Golfers liedeux fois la sortie comme sur les livres?
Riley
Pouvons-nous supposer qu'il y aura au moins un utilisateur avec uniquement des articles de golf à code négatif?
Martin Ender
1
@Riley Oh, je vois. Édition.
NoOneIsHere
1
Le seigneur des ténèbres pourrait-il avoir 0 points en code-golf, ou doit-il s'agir d'un score négatif?
MegaTom
1
@MegaTom Il doit être négatif.
NoOneIsHere

Réponses:

2

PHP, 577 octets

pas testé; Je n'ai actuellement aucun système disponible avec allow_url_fopen=On
et je n'ai pas pris le temps de copier et coller les sources de la page.

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

panne

// 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
));
Titus
la source