StackExchange Mustafa nie może znieść tego samego pytania trzy razy

16

Austin: „Kto cię wysłał?”

Mustafa: „Musisz mnie zabić!”

Austin: „Kto cię wysłał?”

Mustafa: „Pocałuj mnie w dupę, moce!”

Austin: „Kto cię wysłał?”

Mustafa: „Dr Evil”.

(...)

Mustafa: „Nie mogę znieść tego samego pytania trzy razy. To mnie po prostu denerwuje”.

Masz symulować krótki dialog w duchu Austin Powers i Mustafa . Ale źródłem danych dla całej rozmowy będzie pytanie StackOverflow (dostarczone jako dane wejściowe z adresu URL).

Zasady

Nazwa użytkownika pytającego zostanie użyta zamiast „Austin”. Pytanie, które zadadzą trzy razy, pochodzi z ostatniego zdania w tytule pytania (które zostało zmuszone do zakończenia znakiem zapytania, jeśli jeszcze tego nie zrobił).

StackExchange zagra rolę „Mustafy”. Ostatecznie udzielona odpowiedź pochodzi z pierwszego zdania odpowiedzi, która nie kończy się znakiem zapytania i zostanie przypisana do nazwiska użytkownika, który odpowiedział.

Aby zakwalifikować się do gry, musi ono (a) uzyskać odpowiedź i (b) musi istnieć ciąg komentarzy na temat pierwotnego pytania:

  • komentarz od kogoś innego niż pytający
  • (dowolna liczba pominiętych komentarzy)
  • komentarz pytającego
  • komentarz od kogoś innego niż pytający
  • (dowolna liczba możliwych do pominięcia komentarzy)
  • komentarz pytającego

Jeśli ta sekwencja nie jest spełniona przed datą najwyższej odpowiedzi , program powinien po prostu wyjść"Oh, behave!"

Wściekłe wypowiedzi Mustafy StackExchange pochodzą z pierwszego zdania komentarzy kogoś innego niż pytający, które nie kończą się znakiem zapytania - i zapewniają, że kończy się wykrzyknikiem. Jeśli w komentarzu nie ma zdania, które nie kończy się znakiem zapytania, jest ono pomijane jako kandydat do retorty. Retorty komentarzy są przypisywane do nazwy użytkownika autora.

Wyjaśnienia

  • Usuń z komentarza wszelkie wiodące dane odpowiedzi „@XXX”.

  • Ponieważ StackOverflow podsumowuje komentarze, jeśli jest ich wiele, prawdopodobnie będziesz musiał użyć drugiego żądania, aby uzyskać pełną listę. To żądanie ma formę /programming//posts/NNN/comments?_=MMMz identyfikatorem postu w N i pytaniem w M. Patrz na przykład: /programming//posts/11227809/comments?_=211160

  • Adresy URL powinny być usuwane tylko w celu zakotwiczenia tekstu.

  • Zdefiniujemy „zdanie” jako cokolwiek poza blokiem kodu, który kończy się kropką, znakiem zapytania lub wykrzyknikiem. Jeśli ciąg tekstu nie ma końcowej interpunkcji tego formularza, wówczas koniec tekstu jest końcem zdania; tak jakby było napisane kropką.

  • Jeśli szukasz zabawnych przypadków testowych, które prawdopodobnie się zakwalifikują, możesz spróbować użyć Eksploratora danych StackExchange, takiego jak posty z największą liczbą komentarzy .

  • ... więcej w przyszłości, postawię ...

Próbki

Próbka pierwsza

Wejście:

/programming/2283937/how-should-i-ethically-approach-user-password-storage-for-later-plaintext-retrie/

Wynik:

shanee: „Jak etycznie podejść do przechowywania hasła użytkownika w celu późniejszego pobrania tekstu jawnego?”

stefanw: „Myślę, że on wie, że to nie jest dobre!”

shanee: „Jak etycznie podejść do przechowywania hasła użytkownika w celu późniejszego pobrania tekstu jawnego?”

Rook: „Być może powinieneś zapytać, w jaki sposób możesz wdrożyć lukę w zabezpieczeniach związaną z przepełnieniem bufora!”

shanee: „Jak etycznie podejść do przechowywania hasła użytkownika w celu późniejszego pobrania tekstu jawnego?”

Michael Burr: „Zapytaj, dlaczego hasło musi być w postaci zwykłego tekstu: jeśli jest to po to, aby użytkownik mógł odzyskać hasło, to mówiąc ściśle, tak naprawdę nie musisz odzyskiwać ustawionego hasła (nie pamiętają, co to jest w każdym razie), musisz dać im hasło, którego będą mogli używać ”.

Próbka druga

Wejście:

http://scifi.stackexchange.com/questions/2611/why-dont-muggle-born-wizards-use-muggle-technology-to-fight-death-eaters

Wynik:

DVK: „Dlaczego mugolscy czarodzieje nie używają mugolskiej technologii do walki ze śmierciożercami?”

DampeS8N: „To znów tańczy na krawędzi!”

DVK: „Dlaczego mugolscy czarodzieje nie używają mugolskiej technologii do walki ze śmierciożercami?”

DampeS8N: „Racja, ale ta strona nie ma na celu wskazywania dziur w fabule!”

DVK: „Dlaczego mugolscy czarodzieje nie używają mugolskiej technologii do walki ze śmierciożercami?”

Jeff: „Wierzę, choć nie udało mi się znaleźć odniesienia, że ​​JK Rowling w pewnym momencie o tym wspomniała.”

Próbka trzecia

Wejście:

/programming/11227809/why-is-processing-a-sorted-array-faster-than-an-unsorted-array

Wynik:

„Och, zachowuj się!”

(Najwyżej oceniany czas odpowiedzi to czas, w którym pojawia Jun 27 '12 at 13:56się drugi komentarz uzupełniający do pytania zadanego przez pytającego Jun 27 '12 at 14:52. W związku z tym nie ma związku przyczynowego między drugim badaniem a odpowiedzią. :-P)

Zwycięskie kryteria

Code Golf - wygrywa najkrótszy kod.

HostileFork mówi: nie ufaj SE
źródło
4
Właśnie spędziłem ostatnie pół godziny czytając ten wątek o Harrym Potterze. +1 za to!
BrunoJ,
Od jakiegoś czasu nie było nowych odpowiedzi na to pytanie. Może już czas to zakończyć, a przynajmniej dodać termin?
Lars Ebert
@LarsEbert Gotowe ... (chociaż miałem zamiar to zrobić w Rebmu, szanse, że uda mi się to zrobić w moim harmonogramie, są wąskie bankomaty.)
HostileFork mówi, że nie ufaj
Nadal możesz go dodać w przyszłości. Chciałbym zobaczyć alternatywne (i być może krótsze) rozwiązanie.
Lars Ebert

Odpowiedzi:

3

PHP, 1282 znaki

Chociaż 1282 dość duże jak na wyzwanie w golfa kodu, wyzwanie jest dość złożone. (I nie jestem zbyt dobry w golfie.)

<?php function a($a,$b='q'){$a=strip_tags(htmlspecialchars_decode($a,ENT_QUOTES));$a=preg_replace('/^@[^ ]+\s+/','',$a);$a=mb_split('(?<=(?:\.|!|\?))\s+',$a);if($b=='q'){return preg_replace('/(?:\.|!|\?)$/','',$a[0]).'?';}else{foreach($a as$s){if(!preg_match('/\?$/',$s)){if($b=='c'){return preg_replace('/(?:\.|!)$/','',$s).'!';}else{return preg_replace('/(?<!(?:\.|!))$/','.',$s);}}}}return 0;}function b($a){return json_decode(gzdecode(file_get_contents('http://api.stackexchange.com/2.2/questions/'.$a)));}function c($a){return $a->owner->display_name;}$n="\n";$x="Oh, behave!\n";$r=parse_url($argv[1]);$b=explode('/',$r['path']);$b=$b[2];$u=b($b.'?site='.$r['host']);$u=$u->items[0];$c=b($b.'/comments?filter=withbody&order=asc&sort=creation&site='.$r['host']);$a=b($b.'/answers?filter=withbody&order=desc&sort=votes&site='.$r['host']);if(!count($a->items)||!count($c->items))die($x);$a=$a->items[0];$s=array();$d=1;foreach($c->items as$e){if($e->creation_date>$a->creation_date)break;if($e->owner->user_id==$u->owner->user_id){$d=1;}elseif($d){$e->body=a($e->body,'c');if($e->body){$s[]=$e;}$d=0;}}if(count($s)<2)die($x);$q=c($u).': "'.a($u->title,'q').'"'.$n;echo$q.c($s[0]).': "'.$s[0]->body.'"'.$n.$q.c($s[1]).': "'.$s[1]->body.'"'.$n.$q.c($a).': "'.a($a->body,'a').'"'.$n;

Wersja bez golfa

<?php

    function firstSentence($string, $type = 'q') {
        $string = strip_tags(htmlspecialchars_decode($string, ENT_QUOTES));
        $string = preg_replace('/^@[^ ]+\s+/', '', $string);
        $string = mb_split('(?<=(?:\.|!|\?))\s+', $string);
        if($type === 'q') {
            return preg_replace('/(?:\.|!|\?)$/', '', $string[0]) . '?';
        } else {
            foreach($string as $s) {
                if(!preg_match('/\?$/', $s)) {
                    if($type === 'c') {
                        return preg_replace('/(?:\.|!)$/', '', $s) . '!';
                    } else {
                        return preg_replace('/(?<!(?:\.|!))$/', '.', $s);
                    }
                }
            }
        }
        return false;
    }

    $x = "Oh, behave!\n";

    $url = parse_url($argv[1]);
    $api = 'http://api.stackexchange.com/2.2/';

    $id = explode('/', $url['path']);
    $id = $id[2];

    $question = json_decode(gzdecode(file_get_contents($api . 'questions/' . $id . '?site=' . $url['host'])));
    $question = $question->items[0];
    $comments = json_decode(gzdecode(file_get_contents($api . 'questions/' . $id . '/comments?filter=withbody&order=asc&sort=creation&site=' . $url['host'])));
    $answer = json_decode(gzdecode(file_get_contents($api . 'questions/' . $id . '/answers?filter=withbody&order=desc&sort=votes&site=' . $url['host'])));
    if(!count($answer->items) || !count($comments->items))
        die($x);

    $answer = $answer->items[0];

    $selected = array();
    $usable = true;
    foreach($comments->items as $comment) {
        if($comment->creation_date > $answer->creation_date)
            break;
        if($comment->owner->user_id === $question->owner->user_id) {
            $usable = true;
        } elseif($usable) {
            $comment->body = firstSentence($comment->body, 'c');
            if($comment->body !== false) {
                $selected[] = $comment;
            }
            $usable = false;
        }
    }

    if(count($selected) < 2)
        die($x);

    $q = $question->owner->display_name . ': "' . firstSentence($question->title, 'q') . '"' . "\n";
    echo $q;
    echo $selected[0]->owner->display_name . ': "' . $selected[0]->body . '"' . "\n";
    echo $q;
    echo $selected[1]->owner->display_name . ': "' . $selected[1]->body . '"' . "\n";
    echo $q;
    echo $answer->owner->display_name . ': "' . firstSentence($answer->body, 'a') . '"' . "\n";

?>
Lars Ebert
źródło
Możesz $a=function(1,2,$a)połączyć wszystkie te rzeczy razem.
wizzwizz4,