Golf Efendisi


9

giriş

JRR Tolkien'in Yüzüklerin Efendisi'nde bu cümle her kitabın kapağında yer almaktadır.

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

Ancak, bu o kadar da ilginç değil. Bu sadece. Bunu şu şekilde değiştirelim:.

Ne yapmak zorundasın

Stack Exchange API'sini (veya codegolf.stackexchange.com/usersStack Stack Data Explorer) kullanın ve en yüksek puanları alan iki kullanıcıyı bulun., en yeni kullanıcı ve yalnızca negatif puan alan en yüksek kullanıcı İleti.

Ardından, bu kullanıcı adlarını aşağıdaki metne eklemeniz gerekir:

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

Bulduğunuz dört kullanıcı adını köşeli parantez içindeki metne eklemeniz gerekir.

Diğer Kurallar

  • Bu böylece en kısa kod kazanır.
  • URL Kısaltıcıları Yok (dahil ppcg.(ga|lol))

1
İstediğiniz musunuz In the Land of Golfdor, where the Golfers lieo kitaplardaki gibi iki kez çıktı?
Riley

Yalnızca negatif puanlı golf kodları içeren en az bir kullanıcı olacağını varsayabilir miyiz?
Martin Ender

1
@Riley Oh, anlıyorum. Düzenleme.
NoOneIsHere

1
Karanlık efendinin kod golfünde 0 puanı olabilir mi, yoksa negatif bir puan mı olmalı?
16:50

1
@MegaTom Olumsuz olmalı.
NoOneIsHere

Yanıtlar:


2

PHP, 577 bayt

test edilmedi; Şu anda kullanılabilir bir sistemim yok allow_url_fopen=On
ve sayfa kaynaklarını kopyalayıp yapıştırmak için zaman ayırmadım.

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

Yıkmak

// 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
));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.