StackExchange Mustafa kann es nicht ertragen, dreimal dieselbe Frage zu stellen


16

Austin: Wer hat dich geschickt?

Mustafa: "Du musst mich töten!"

Austin: Wer hat dich geschickt?

Mustafa: "Küss meinen Arsch, Powers!"

Austin: Wer hat dich geschickt?

Mustafa: "Dr. Evil."

(...)

Mustafa: "Ich kann es nicht ertragen, dreimal dieselbe Frage zu stellen. Es irritiert mich nur."

Sie sollen einen kurzen Dialog im Geiste von Austin Powers und Mustafa simulieren . Die Datenquelle für die gesamte Konversation ist jedoch eine StackOverflow-Frage (die als Eingabe von einer URL bereitgestellt wird).

Regeln

Der Benutzername des Fragestellers wird anstelle von "Austin" verwendet. Die Frage, die sie dreimal stellen, stammt aus dem letzten Satz des Fragentitels (der, falls noch nicht geschehen, mit einem Fragezeichen enden musste).

StackExchange wird die Rolle von "Mustafa" spielen. Die letztendlich gegebene Antwort stammt aus dem ersten Satz der Antwort, der nicht mit einem Fragezeichen endet, und wird dem Namen des Benutzers zugeordnet, der geantwortet hat.

Damit sich eine Frage für das Spiel qualifizieren kann, muss sie (a) eine Antwort haben und (b) es muss eine Abfolge von Kommentaren zur ursprünglichen Frage geben:

  • Kommentar von jemand anderem als Fragesteller
  • (beliebig viele übersprungene Kommentare)
  • Kommentar des Fragestellers
  • Kommentar von jemand anderem als Fragesteller
  • (beliebig viele überspringbare Kommentare)
  • Kommentar des Fragestellers

Wenn diese Sequenz vor dem Datum der bestplatzierten Antwort nicht erfüllt ist , sollte das Programm einfach ausgeben"Oh, behave!"

StackExchange Mustafas verärgerte Erwiderungen stammen aus dem ersten Satz der Kommentare eines anderen als des Fragestellers, die nicht mit einem Fragezeichen enden - und stellen sicher, dass sie mit einem Ausrufezeichen enden. Wenn der Kommentar keinen Satz enthält, der nicht mit einem Fragezeichen endet, wird er als Kandidat für die Retorte übersprungen. Kommentar-Retorten werden dem Benutzernamen des Autors zugeordnet.

Klarstellungen

  • Entfernen Sie alle führenden "@XXX" -Antwortdaten aus einem Kommentar.

  • Da StackOverflow die Kommentare zusammenfasst, wenn viele vorhanden sind, müssen Sie wahrscheinlich eine zweite Anforderung verwenden, um die vollständige Liste abzurufen. Diese Anfrage hat das Formular /programming//posts/NNN/comments?_=MMMmit der Post-ID in N und der Frage-ID in M. Siehe zum Beispiel: /programming//posts/11227809/comments?_=211160

  • URLs sollten nur zum Verankern von Text entfernt werden.

  • Wir definieren einen "Satz" als etwas außerhalb eines Codeblocks, das mit einem Punkt, einem Fragezeichen oder einem Ausrufezeichen endet. Wenn eine Textfolge keine abschließende Interpunktion dieses Formulars enthält, ist das Ende des Textes das Ende des Satzes. als ob es mit einem Punkt geschrieben wäre.

  • Wenn Sie nach lustigen Testfällen suchen, die sich wahrscheinlich qualifizieren, können Sie StackExchange Data Explorer verwenden, z. B. Posts mit den meisten Kommentaren .

  • ... Mehr zu kommen, ich wette ...

Proben

Probe eins

Eingang:

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

Ausgabe:

shanee: "Wie soll ich mich ethisch an die Speicherung von Benutzerkennwörtern wenden, um später Klartext abzurufen?"

stefanw: "ich glaube er weiß das es nicht gut ist!"

shanee: "Wie soll ich mich ethisch an die Speicherung von Benutzerkennwörtern wenden, um später Klartext abzurufen?"

Rook: "Vielleicht sollten Sie sich fragen, wie Sie eine Pufferüberlauf-Sicherheitsanfälligkeit auf sichere Weise implementieren können!"

shanee: "Wie soll ich mich ethisch an die Speicherung von Benutzerkennwörtern wenden, um später Klartext abzurufen?"

Michael Burr: "Fragen Sie, warum das Passwort im Klartext eingegeben werden muss: Wenn der Benutzer das Passwort abrufen kann, muss er das festgelegte Passwort nicht wirklich abrufen (er kann sich nicht erinnern, was es ist) Sie müssen in der Lage sein, ihnen ein Passwort zu geben, das sie verwenden können. "

Probe Zwei

Eingang:

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

Ausgabe:

DVK: "Warum verwenden Muggel-geborene Zauberer nicht Muggel-Technologie, um Todesser zu bekämpfen?"

DampeS8N: "Das tanzt wieder am Rande!"

DVK: "Warum verwenden Muggel-geborene Zauberer nicht Muggel-Technologie, um Todesser zu bekämpfen?"

DampeS8N: "Richtig, aber auf dieser Seite geht es nicht darum, Handlungslöcher aufzuzeigen !"

DVK: "Warum verwenden Muggel-geborene Zauberer nicht Muggel-Technologie, um Todesser zu bekämpfen?"

Jeff: Ich glaube, obwohl ich keine Referenz gefunden habe, dass JK Rowling dies tatsächlich an einem Punkt erwähnt hat.

Probe Drei

Eingang:

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

Ausgabe:

"Oh, benimm dich!"

(Die bestbewertete Antwortzeit ist Jun 27 '12 at 13:56, während der zweite Jun 27 '12 at 14:52Folgekommentar der Frage durch den Fragesteller zur Zeit ist . Daher besteht kein Kausalzusammenhang zwischen dem zweiten Folgekommentar und der Antwort. :-P)

Gewinnkriterien

Code Golf - der kürzeste Code gewinnt.


4
Ich habe gerade die letzte halbe Stunde damit verbracht, diesen Harry-Potter-Thread zu lesen. +1 dafür!
BrunoJ

Es gab eine Weile keine neuen Antworten auf diese Frage. Vielleicht ist es Zeit, es jetzt zu beenden oder zumindest eine Frist hinzuzufügen?
Lars Ebert

@ LarsEbert Done ... (obwohl ich in Rebmu tatsächlich einen Sprung drauf machen wollte, sind die Chancen, dass es auf meinem Zeitplan landet, schlanke Geldautomaten.)
Dr. Rebmu

Sie können es auch in Zukunft hinzufügen. Ich würde gerne eine alternative (und möglicherweise kürzere) Lösung sehen.
Lars Ebert

Antworten:


3

PHP, 1282 Zeichen

Während 1282 für eine Code-Golf-Herausforderung ziemlich groß ist, ist die Herausforderung ziemlich komplex. (Und ich bin nicht sehr gut im Golf.)

<?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;

Ungolfed-Version

<?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";

?>

Sie können all diese $a=function(1,2,$a)Dinge miteinander verketten.
wizzwizz4
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.