StackExchange Mustafa, aynı soruyu üç kez sormak için duramaz


16

Austin: "Seni kim gönderdi?"

Mustafa: "Beni öldürmek zorundasın!"

Austin: "Seni kim gönderdi?"

Mustafa: "Kıçımı öp, Güçler!"

Austin: "Seni kim gönderdi?"

Mustafa: "Dr. Evil."

(...)

Mustafa: "Aynı soruya üç kez sorulmaya dayanamıyorum. Sadece beni rahatsız ediyor."

Austin Powers ve Mustafa'nın ruhuyla kısa bir diyalog kurmalısınız . Ancak, tüm ileti dizisinin veri kaynağı bir StackOverflow sorusu olacaktır (bir URL'den girdi olarak sağlanır).

kurallar

Soru sorucusunun kullanıcı adı "Austin" yerine kullanılacak. Üç kez soracakları soru, soru başlığındaki son cümleden gelir (daha önce soru işaretiyle bitmek zorunda kalmıştır).

StackExchange "Mustafa" nın bir parçası olacak. Sonuçta verilen cevap, cevaptaki soru işaretiyle bitmeyen ilk cümleden gelir ve cevaplayan kullanıcının adına atfedilir.

Bir sorunun oyuna hak kazanabilmesi için, (a) bir cevabı olmalı ve (b) asıl soruya ilişkin bir dizi yorum olmalıdır:

  • sorgulayıcı dışında birinden yorum yapma
  • (herhangi bir sayıda atlanmış yorum)
  • soru sorandan yorum
  • sorgulayıcı dışında birinden yorum yapma
  • (herhangi bir sayıda atlanabilir yorum)
  • soru sorandan yorum

Bu sıralama en üst sıradaki cevabın tarihinden önce karşılanmazsa , programın"Oh, behave!"

Stack Exchange Mustafa'nın öfkeli retorts sorgulayıcı dışındaki birinden yorumların ilk cümlesinde gelen yok bir soru işaretiyle sona - ve onu sağlanması ünlem işareti ile biter. Yorumda soru işaretiyle bitmeyen bir cümle bulunmuyorsa, imbik adayı olarak atlanır. Yorum cevapları yazarın kullanıcı adıyla ilişkilendirilir.

Açıklamalar

  • Yorumdaki tüm önde gelen "@XXX" yanıt verilerini kaldırın.

  • StackOverflow, birçoğu varsa yorumları özetlediğinden, tam listeyi almak için muhtemelen ikinci bir istek kullanmanız gerekecektir. Bu istek, /programming//posts/NNN/comments?_=MMMN'de posta kimliği ve M'de soru kimliği olan formdadır . Örneğin, bkz. Https://stackoverflow.com/posts/11227809/comments?_=211160

  • URL'ler yalnızca bağlantı metnine soyulmalıdır.

  • Bir "cümle" yi bir kod bloğunun dışında, nokta, soru işareti veya ünlem işaretiyle biten herhangi bir şey olarak tanımlayacağız. Bir metin çalışmasının bu formun bitiş noktalaması yoksa, metnin sonu cümlenin sonu olur; sanki bir dönemle yazılmış gibi.

  • Yeterlilik kazanması muhtemel komik test örnekleri arıyorsanız , En Çok Yorumlu Yayınlar gibi StackExchange Veri Gezgini'ni kullanmayı deneyebilirsiniz .

  • ... daha fazlası gelecek, bahse gireceğim ...

Numuneler

Örnek Bir

Giriş:

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

Çıktı:

shanee: "Daha sonra düz metin almak için kullanıcı parola depolamasına etik olarak nasıl yaklaşmalıyım?"

stefanw: "Bence bunun iyi olmadığını biliyor!"

shanee: "Daha sonra düz metin almak için kullanıcı parola depolamasına etik olarak nasıl yaklaşmalıyım?"

Rook: "Belki de Arabellek Taşması Güvenlik Açığı'nı Güvenli bir şekilde nasıl uygulayabileceğinizi sormalısınız!"

shanee: "Daha sonra düz metin almak için kullanıcı parola depolamasına etik olarak nasıl yaklaşmalıyım?"

Michael Burr: "Parolanın neden düz metin olması gerektiğini sorun: eğer kullanıcı parolayı alabilseydi, o zaman kesinlikle konuşursak, belirledikleri parolayı almanız gerekmez (ne olduğunu hatırlamıyorlar) her neyse) onlara kullanabilecekleri bir şifre verebilmeniz gerekir. "

Örnek İki

Giriş:

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

Çıktı:

DVK: "Muggle doğumlu sihirbazlar neden Ölüm Yiyenlerle savaşmak için Muggle teknolojisini kullanmıyor?"

DampeS8N: "Bu yine kenarda dans ediyor!"

DVK: "Muggle doğumlu sihirbazlar neden Ölüm Yiyenlerle savaşmak için Muggle teknolojisini kullanmıyor?"

DampeS8N: "Doğru, ancak bu site arsa deliklerini işaret etmekle ilgili değil!"

DVK: "Muggle doğumlu sihirbazlar neden Ölüm Yiyenlerle savaşmak için Muggle teknolojisini kullanmıyor?"

Jeff: "İnanıyorum ki, bir referans bulamamış olsam da, JK Rowling'in bundan bir noktada bahsettiğini düşünüyorum."

Örnek Üç

Giriş:

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

Çıktı:

"Ah, davran!"

(En yüksek puanlı cevap süresi, Jun 27 '12 at 13:56soru soran tarafından soru üzerine yapılan ikinci takip yorumu zamanındadır Jun 27 '12 at 14:52. Dolayısıyla, ikinci takip ile cevap arasında nedensel bir bağlantı yoktur. :-P)

Kazanma Kriterleri

Kod Golf - en kısa kod kazanır.


4
Harry Potter'ın iş parçacığını okumak için son yarım saati harcadım. Bunun için +1!
BrunoJ

Bir süredir bu soruya yeni bir cevap gelmedi. Belki şimdi sona erdirmenin veya en azından bir son tarih eklemenin zamanı geldi?
Lars Ebert

@LarsEbert Done ... (aslında Rebmu'da bir çatlak çekecek olsam da, programımda bunu yapma ihtimali ince ATM.)
HostileFork SE

İleride yine de ekleyebilirsiniz. Alternatif (ve muhtemelen daha kısa) bir çözüm görmek isterim.
Lars Ebert

Yanıtlar:


3

PHP, 1282 karakter

Bir kod golf meydan okuma için 1282 oldukça büyük olsa da, meydan okuma oldukça karmaşık. (Ve golfte çok iyi değilim.)

<?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 sürümü

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

?>

Tüm $a=function(1,2,$a)bunları birlikte zincirleyebilirsiniz .
wizzwizz4
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.