StackExchange Mustafa non sopporta di dover porre la stessa domanda tre volte


16

Austin: "Chi ti ha mandato?"

Mustafa: "Devi uccidermi!"

Austin: "Chi ti ha mandato?"

Mustafa: "Baciami il culo, Powers!"

Austin: "Chi ti ha mandato?"

Mustafa: "Dr. Evil".

(...)

Mustafa: "Non sopporto di farmi la stessa domanda tre volte. Mi irrita e basta."

Devi simulare un breve dialogo nello spirito di Austin Powers e Mustafa . Ma l'origine dati per l'intera conversazione sarà una domanda StackOverflow (fornita come input da un URL).

Regole

Il nome utente della domanda verrà utilizzato al posto di "Austin". La domanda che faranno tre volte proviene dall'ultima frase nel titolo della domanda (che è stata costretta a finire con un punto di domanda se non lo avesse già fatto).

StackExchange reciterà la parte di "Mustafa". La risposta fornita alla fine proviene dalla prima frase della risposta che non termina in un punto interrogativo e verrà attribuita al nome dell'utente che ha risposto.

Affinché una domanda si qualifichi per il gioco, deve (a) avere una risposta e (b) deve esserci una sequenza di commenti sulla domanda originale che recita:

  • commento di qualcuno diverso dall'interrogante
  • (qualsiasi numero di commenti saltati)
  • commento dell'interrogatore
  • commento di qualcuno diverso dall'interrogante
  • (qualsiasi numero di commenti ignorabili)
  • commento dell'interrogatore

Se questa sequenza non è soddisfatta prima della data della risposta più votata , il programma dovrebbe semplicemente produrre"Oh, behave!"

StackExchange Le repliche rabbiose di Mustafa provengono dalla prima frase dei commenti di qualcuno diverso dall'interrogante che non termina con un punto interrogativo e che assicura che termini con un punto esclamativo. Se nel commento non esiste alcuna frase che non termina in un punto interrogativo, viene saltata come candidato per la storta. Le repliche di commento sono attribuite al nome utente dell'autore.

chiarimenti

  • Rimuovi tutti i principali dati di risposta "@XXX" da un commento.

  • Poiché StackOverflow riassume i commenti se ce ne sono molti, probabilmente dovrai utilizzare una seconda richiesta per ottenere l'elenco completo. Tale richiesta è nel modulo /programming//posts/NNN/comments?_=MMMcon l'ID post in N e l'ID domanda in M. Vedere ad esempio: /programming//posts/11227809/comments?_=211160

  • Gli URL devono essere rimossi per ancorare solo il testo.

  • Definiremo una "frase" come qualsiasi cosa al di fuori di un blocco di codice che termina con un punto, un punto interrogativo o un punto esclamativo. Se una sequenza di testo non ha punteggiatura di fine di questo modulo, la fine del testo è la fine della frase; come se fosse scritto con un punto.

  • Se stai cercando casi di test divertenti che potrebbero essere idonei, potresti provare a utilizzare StackExchange Data Explorer, come Post con il maggior numero di commenti .

  • ... più a venire, scommetto ...

Campioni

Esempio uno

Ingresso:

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

Produzione:

shanee: "Come dovrei affrontare eticamente l'archiviazione delle password degli utenti per il successivo recupero del testo in chiaro?"

stefanw: "Penso che sappia che non va bene!"

shanee: "Come dovrei affrontare eticamente l'archiviazione delle password degli utenti per il successivo recupero del testo in chiaro?"

Rook: "Forse dovresti chiederti come implementare una vulnerabilità di buffer overflow in modo sicuro!"

shanee: "Come dovrei affrontare eticamente l'archiviazione delle password degli utenti per il successivo recupero del testo in chiaro?"

Michael Burr: "Chiedi perché la password deve essere in chiaro: se è così che l'utente può recuperare la password, quindi a rigor di termini non è necessario recuperare la password che hanno impostato (non ricordano di cosa si tratta comunque), devi essere in grado di fornire loro una password che possano usare ".

Campione due

Ingresso:

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

Produzione:

DVK: "Perché i maghi nati Babbani non usano la tecnologia Babbana per combattere i Mangiamorte?"

DampeS8N: "Questo balla di nuovo sul bordo!"

DVK: "Perché i maghi nati Babbani non usano la tecnologia Babbana per combattere i Mangiamorte?"

DampeS8N: "Giusto, ma questo sito non tratta di evidenziare buchi nella trama!"

DVK: "Perché i maghi nati Babbani non usano la tecnologia Babbana per combattere i Mangiamorte?"

Jeff: "Credo, anche se non sono stato in grado di trovare un riferimento, che JK Rowling lo abbia effettivamente menzionato ad un certo punto."

Campione tre

Ingresso:

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

Produzione:

"Oh, comportati bene!"

(Il tempo di risposta più votato è Jun 27 '12 at 13:56, mentre il secondo commento di follow-up sulla domanda dell'interrogante è al momento Jun 27 '12 at 14:52. Quindi, non esiste un nesso causale tra il secondo follow-up e la risposta. :-P)

Criteri vincenti

Code Golf: il codice più corto vince.


4
Ho passato l'ultima mezz'ora a leggere quel thread di Harry Potter. +1 per quello!
BrunoJ,

Non ci sono state nuove risposte a questa domanda da un po '. Forse è ora di terminarlo adesso o almeno aggiungere una scadenza?
Lars Ebert,

@LarsEbert Fatto ... (anche se a Rebmu stavo per fare una brutta pausa, le probabilità che ce lo facessero sul mio programma sono bancomat snelle.)
HostileFork dice che non ti fidi di SE

Puoi ancora aggiungerlo in futuro. Mi piacerebbe vedere una soluzione alternativa (e possibilmente più breve).
Lars Ebert,

Risposte:


3

PHP, 1282 caratteri

Mentre il 1282 è abbastanza grande per una sfida del codice golf, la sfida è piuttosto complessa. (E non sono molto bravo a 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;

Versione Ungolfed

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

?>

Puoi concatenare tutte queste $a=function(1,2,$a)cose insieme.
wizzwizz4,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.