StackExchange Mustafa không thể đứng để được hỏi cùng một câu hỏi ba lần


16

Austin: "Ai đã gửi cho bạn?"

Mustafa: "Bạn phải giết tôi!"

Austin: "Ai đã gửi cho bạn?"

Mustafa: "Hôn mông của tôi, Powers!"

Austin: "Ai đã gửi cho bạn?"

Mustafa: "Tiến sĩ Ác."

(...)

Mustafa: "Tôi không thể chịu được khi được hỏi cùng một câu hỏi ba lần. Nó chỉ khiến tôi bực mình."

Bạn phải mô phỏng một cuộc đối thoại ngắn theo tinh thần của Austin Powers và Mustafa . Nhưng nguồn dữ liệu cho toàn bộ cuộc hội thoại sẽ là một câu hỏi StackOverflow (được cung cấp dưới dạng đầu vào từ một URL).

Quy tắc

Tên người dùng của câu hỏi sẽ được sử dụng thay cho "Austin". Câu hỏi họ sẽ hỏi ba lần xuất phát từ câu cuối cùng trong tiêu đề câu hỏi (đã bị buộc phải kết thúc bằng dấu chấm hỏi nếu chưa có).

StackExchange sẽ chơi một phần của "Mustafa". Câu trả lời cuối cùng được đưa ra xuất phát từ câu đầu tiên trong câu trả lời không kết thúc bằng dấu chấm hỏi và sẽ được gán cho tên của người dùng đã trả lời.

Để một câu hỏi đủ điều kiện cho trò chơi, nó phải (a) có câu trả lời và (b) phải có một chuỗi các nhận xét về câu hỏi ban đầu:

  • nhận xét từ người khác không phải người hỏi
  • (bất kỳ số lượng ý kiến ​​bỏ qua)
  • nhận xét từ người hỏi
  • nhận xét từ người khác không phải người hỏi
  • (bất kỳ số lượng bình luận có thể bỏ qua)
  • nhận xét từ người hỏi

Nếu trình tự này không được thỏa mãn trước ngày trả lời được xếp hạng hàng đầu , chương trình chỉ cần xuất ra"Oh, behave!"

Những câu trả lời tức giận của StackExchange Must bắt nguồn từ câu đầu tiên của những bình luận từ một người nào đó không phải là người hỏi không kết thúc bằng dấu chấm hỏi - và đảm bảo nó kết thúc bằng dấu chấm than. Nếu không có câu nào tồn tại trong bình luận không kết thúc bằng dấu chấm hỏi, thì nó sẽ bị bỏ qua như một ứng cử viên cho câu trả lời. Nhận xét vặn lại được quy cho tên người dùng của tác giả.

Làm rõ

  • Loại bỏ mọi dữ liệu phản hồi "@XXX" hàng đầu khỏi một nhận xét.

  • Vì StackOverflow tóm tắt các nhận xét nếu có nhiều trong số chúng, bạn có thể sẽ phải sử dụng yêu cầu thứ hai để có được danh sách đầy đủ. Yêu cầu đó có dạng /programming//posts/NNN/comments?_=MMMvới ID bài đăng trong N và ID câu hỏi ở M. Xem ví dụ: /programming//posts/11227809/comments?_=211160

  • Các URL nên được loại bỏ để chỉ văn bản neo.

  • Chúng tôi sẽ định nghĩa một "câu" là bất cứ điều gì bên ngoài khối mã kết thúc bằng dấu chấm, dấu chấm hỏi hoặc dấu chấm than. Nếu một đoạn văn bản không có dấu chấm câu của mẫu này, thì phần cuối của văn bản là phần cuối của câu; như thể nó được viết với một khoảng thời gian.

  • Nếu bạn đang tìm kiếm các trường hợp thử nghiệm hài hước có khả năng đủ điều kiện, bạn có thể thử sử dụng StackExchange Data Explorer, chẳng hạn như Bài đăng có nhiều Nhận xét nhất .

  • ... nhiều hơn nữa, tôi sẽ đánh cuộc ...

Mẫu

Mẫu một

Đầu vào:

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

Đầu ra:

shanee: "Làm thế nào tôi nên tiếp cận một cách đạo đức việc lưu trữ mật khẩu người dùng để lấy lại bản rõ sau này?"

stefanw: "Tôi nghĩ rằng anh ấy biết rằng nó không tốt!"

shanee: "Làm thế nào tôi nên tiếp cận một cách đạo đức việc lưu trữ mật khẩu người dùng để lấy lại bản rõ sau này?"

Rook: "Có lẽ bạn nên hỏi làm thế nào bạn có thể thực hiện Lỗ hổng tràn bộ đệm theo cách an toàn!"

shanee: "Làm thế nào tôi nên tiếp cận một cách đạo đức việc lưu trữ mật khẩu người dùng để lấy lại bản rõ sau này?"

Michael Burr: "Hỏi lý do tại sao mật khẩu bắt buộc phải có trong văn bản gốc: nếu đó là để người dùng có thể truy xuất mật khẩu, thì nói đúng ra bạn không thực sự cần lấy lại mật khẩu họ đã đặt (họ không nhớ đó là mật khẩu nào dù sao đi nữa, bạn cần có thể cung cấp cho họ mật khẩu mà họ có thể sử dụng. "

Mẫu hai

Đầu vào:

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

Đầu ra:

DVK: "Tại sao các pháp sư sinh ra ở Muggle không sử dụng công nghệ Muggle để chiến đấu với Tử thần Thực tử?"

DampeS8N: "Điều này lại nhảy vào rìa!"

DVK: "Tại sao các pháp sư sinh ra ở Muggle không sử dụng công nghệ Muggle để chiến đấu với Tử thần Thực tử?"

DampeS8N: "Đúng, nhưng trang web này không phải là về việc chỉ ra các lỗ hổng cốt truyện!"

DVK: "Tại sao các pháp sư sinh ra ở Muggle không sử dụng công nghệ Muggle để chiến đấu với Tử thần Thực tử?"

Jeff: "Tôi tin rằng, mặc dù tôi đã không thể tìm thấy một tài liệu tham khảo, nhưng J.K Rowling thực sự đã đề cập đến vấn đề này tại một thời điểm."

Mẫu ba

Đầu vào:

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

Đầu ra:

"Ồ, cư xử!"

(Thời gian trả lời được xếp hạng cao nhất là Jun 27 '12 at 13:56, trong khi nhận xét tiếp theo thứ hai về câu hỏi của người hỏi là đúng lúc Jun 27 '12 at 14:52. Do đó, không có mối liên hệ nhân quả giữa lần theo dõi thứ hai và câu trả lời. :-P)

Tiêu chí chiến thắng

Code Golf - chiến thắng mã ngắn nhất.


4
Chỉ cần dành nửa giờ để đọc chủ đề Harry Potter. +1 cho điều đó!
BrunoJ

Không có câu trả lời mới cho câu hỏi này trong một thời gian. Có lẽ đã đến lúc kết thúc nó bây giờ, hoặc ít nhất là thêm một thời hạn?
Lars Ebert

@LarsEbert Xong ... (mặc dù tôi thực sự sẽ bẻ khóa nó ở Rebmu, tỷ lệ của nó trong lịch trình của tôi là ATM mỏng.)
Tiến sĩ Rebmu

Bạn vẫn có thể thêm nó trong tương lai. Tôi rất thích xem một giải pháp thay thế (và có thể ngắn hơn).
Lars Ebert

Câu trả lời:


3

PHP, 1282 ký tự

Trong khi 1282 khá lớn cho một thử thách golf mã, thử thách này khá phức tạp. (Và tôi không giỏi chơi gôn lắm.)

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

Phiên bản ung dung

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

?>

Bạn có thể xâu chuỗi tất cả những $a=function(1,2,$a)thứ đó lại với nhau.
wizzwizz4
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.