StackExchange Mustafa无法忍受被问到相同问题三遍


16

奥斯丁: “谁送给你的?”

穆斯塔法: “你必须杀了我!”

奥斯丁: “谁送给你的?”

穆斯塔法: “亲吻我的屁股,力量!”

奥斯丁: “谁送给你的?”

穆斯塔法: “邪恶博士。”

(...)

穆斯塔法: “我不能忍受三遍被问到同样的问题。这只会激怒我。”

您将本着Austin Powers和Mustafa的精神模拟一场简短的对话。但是整个对话的数据源将是一个StackOverflow问题(作为URL输入提供)。

规则

问题提问者的用户名将代替“奥斯丁”。他们将要问的问题三遍来自问题标题的最后一句(如果还没有,则被强制以问号结尾)。

StackExchange将扮演“ Mustafa”的角色。最终给出的答案来自答案中的第一句话,该句子不以问号结尾,并且将归因于回答用户的姓名。

要使一个问题符合游戏资格,它必须(a)给出答案,并且(b)必须对原始问题进行一系列评论:

  • 来自提问者以外的其他人的评论
  • (任何数量的跳过的评论)
  • 发问者的评论
  • 来自提问者以外的其他人的评论
  • (任意数量的可跳过评论)
  • 发问者的评论

如果在排名靠前的答案的日期之前不满足此顺序,则程序应简单地输出"Oh, behave!"

StackExchange Mustafa的愤怒反驳来自发问者以外的其他人的第一句话,即以问号结尾的并确保其以感叹号结尾。如果注释中没有以问号结尾的句子,则跳过该句子作为反驳的候选对象。评论反驳归因于作者的用户名。

澄清说明

  • 从注释中删除所有开头的“ @XXX”响应数据。

  • 因为如果有很多注释,则StackOverflow会汇总注释,因此您可能必须使用第二个请求来获取完整列表。该请求的形式/programming//posts/NNN/comments?_=MMM为帖子ID在N中,问题ID在M中。例如,请参见:https//stackoverflow.com/posts/11227809/comments? _ = 211160

  • 网址应去除以仅锚文本。

  • 我们将“句子”定义为以句点,问号或感叹号结尾的代码块之外的任何内容。如果一段文本没有这种形式的结尾标点符号,那么文本结尾就是句子的结尾;好像是用句点写的。

  • 如果您正在寻找可能符合条件的有趣测试用例,则可以尝试使用StackExchange Data Explorer,例如带有“最多评论”的帖子

  • ...更多来,我下注...

样品

样品一

输入:

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

输出:

shanee: “在以后的纯文本检索中,如何道德地使用用户密码存储方式?”

stefanw: “我认为他知道这不好!”

shanee: “在以后的纯文本检索中,如何道德地使用用户密码存储方式?”

Rook: “也许您应该问一下如何以安全的方式实现缓冲区溢出漏洞!”

shanee: “在以后的纯文本检索中,如何道德地使用用户密码存储方式?”

迈克尔·伯尔(Michael Burr): “问为什么要求密码必须为纯文本格式:如果是这样,以便用户可以检索密码,那么严格来说,您实际上并不需要检索他们设置的密码(他们不记得密码是什么了)无论如何),您需要向他们提供可以使用的密码。”

样品二

输入:

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

输出:

DVK: “为什么麻瓜出生的巫师不使用麻瓜技术来与食死徒作战?”

DampeS8N: “它再次在边缘跳动!”

DVK: “为什么麻瓜出生的巫师不使用麻瓜技术来与食死徒作战?”

DampeS8N: “对,但是这个站点不是要指出绘图漏洞!”

DVK: “为什么麻瓜出生的巫师不使用麻瓜技术来与食死徒作战?”

杰夫: “我相信,尽管我一直找不到参考,但JK罗琳实际上曾提到这一点。”

样品三

输入:

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

输出:

“哦,守规矩!”

(评分最高的回答时间是Jun 27 '12 at 13:56,而发问者对问题的第二次后续评论是在Jun 27 '12 at 14:52。因此,第二次跟进和回答之间没有因果关系。:-P)

获奖标准

高尔夫代码-最短的代码获胜。


4
刚刚花了最后半个小时阅读了《哈利·波特》的主题。为此+1!
BrunoJ 2014年

一段时间以来,这个问题没有新的答案。也许现在该结束它了,或者至少增加一个截止日期?
拉尔斯·艾伯特

@LarsEbert Done ...(尽管我实际上打算在Rebmu对其进行破解,但按我的时间表,它使它成为ATM的可能性很小。)
HostileFork说不要相信2015年

您将来仍可以添加它。我希望看到一个替代的(可能更短)的解决方案。
Lars Ebert

Answers:


3

PHP,1282个字符

尽管1282对于标准高尔夫挑战赛来说是巨大的,但挑战却相当复杂。(而且我并不擅长打高尔夫球。)

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

非高尔夫版本

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

?>

您可以将所有这些$a=function(1,2,$a)东西链接在一起。
wizzwizz4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.