StackExchange Мустафа не витримує, щоб йому тричі задавали одне і те ж питання


16

Остін: "Хто тебе послав?"

Мустафа: "Ти повинен мене вбити!"

Остін: "Хто тебе послав?"

Мустафа: "Поцілуй мою дупу, повноваження!"

Остін: "Хто тебе послав?"

Мустафа: "Доктор Зло".

(...)

Мустафа: "Я не можу тричі ставити мені одне і те ж питання тричі. Це мене просто дратує".

Ви повинні імітувати короткий діалог у дусі Остіна Пауерса та Мустафи . Але джерелом даних для всієї розмови буде питання StackOverflow (надається як вхід з URL-адреси).

Правила

Ім'я користувача, що задає запитання, буде використано замість "Остін". Питання, яке вони будуть задавати три рази, походить від останнього речення в заголовку питання (яке змушене було закінчуватися знаком питання, якщо цього ще не було).

StackExchange зіграє роль "Мустафи". Надана відповідь в кінцевому підсумку походить із першого речення у відповіді, яке не закінчується знаком питання, і буде приписане імені користувача, який відповів.

На запитання, яке може претендувати на гру, воно повинно (а) мати відповідь; і (б) повинна бути послідовність коментарів до початкового питання, що стосується:

  • коментар від когось, крім запитувача
  • (будь-яка кількість пропущених коментарів)
  • коментар запитувача
  • коментар від когось, крім запитувача
  • (будь-яка кількість коментарів, які можна пропустити)
  • коментар запитувача

Якщо ця послідовність не задоволена до дати відповіді , що займає перше місце , програма повинна просто вивести"Oh, behave!"

Розлючені репортажі StackExchange Мустафи походять із першого речення коментарів від когось іншого, окрім запитувача, які не закінчуються знаком питання - і забезпечують, щоб це закінчувалося знаком оклику. Якщо в коментарі не існує речення, яке не закінчується знаком питання, воно пропускається як кандидат до реторти. Запитання коментарів присвоюються імені користувача автора.

Роз'яснення

  • Стрийте будь-які провідні дані відповіді "@XXX" з коментаря.

  • Оскільки StackOverflow підсумовує коментарі, якщо їх багато, вам, ймовірно, доведеться скористатися другим запитом, щоб отримати повний список. Цей запит має форму /programming//posts/NNN/comments?_=MMMз ідентифікатором поста в N та ідентифікатором запитання в М. Див., Наприклад: /programming//posts/11227809/comments?_=211160

  • URL-адреси повинні бути позбавлені лише тексту.

  • Ми визначимо "речення" як усе, що знаходиться поза блоком коду, який закінчується періодом, питанням або знаком оклику. Якщо текст тексту не має закінчення пунктуації цієї форми, то кінцем тексту є кінець речення; так, ніби це було написано з періодом.

  • Якщо ви шукаєте смішні тестові випадки, які, ймовірно, можуть бути кваліфікованими, ви можете спробувати скористатися програмою StackExchange Data Explorer, наприклад повідомленнями з найбільш коментарями .

  • ... ще прийде, я ставлю ...

Зразки

Зразок перший

Вхід:

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

Вихід:

shanee: "Як слід етично підходити до зберігання паролів користувача для подальшого пошуку простого тексту?"

stefanw: "Я думаю, він знає, що це не добре!"

shanee: "Як слід етично підходити до зберігання паролів користувача для подальшого пошуку простого тексту?"

Ладья: "Можливо, вам слід запитати, як можна безпечно реалізувати вразливість буфера переповнення!"

shanee: "Як слід етично підходити до зберігання паролів користувача для подальшого пошуку простого тексту?"

Майкл Берр: "Запитайте, чому пароль повинен бути в простому тексті: якщо це так, щоб користувач міг отримати пароль, то строго кажучи, вам не потрібно отримувати встановлений ним пароль (вони не пам'ятають, що це таке у будь-якому випадку), ви повинні мати можливість надати їм пароль, яким вони можуть користуватися. "

Зразок другий

Вхід:

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

Вихід:

DVK: "Чому чарівники з народженими маглами не використовують технологію маглів для боротьби з Пожирачами смерті?"

DampeS8N: "Це знову танцює на краю!"

DVK: "Чому чарівники з народженими маглами не використовують технологію маглів для боротьби з Пожирачами смерті?"

DampeS8N: "Правильно, але цей сайт не стосується вказівки дір!"

DVK: "Чому чарівники з народженими маглами не використовують технологію маглів для боротьби з Пожирачами смерті?"

Джефф: "Я вважаю, хоча мені не вдалося знайти посилання, що Дж. К. Роулінг насправді згадав про це в один момент".

Зразок третій

Вхід:

/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)

Критерії виграшу

Code Golf - найкоротший виграш коду.


4
Щойно провів останні півгодини, читаючи цю нитку Гаррі Поттера. +1 для цього!
BrunoJ

Нових відповідей на це питання вже не було. Можливо, пора це закінчити зараз або хоча б додати термін?
Ларс Еберт

@LarsEbert Готово ... (хоча я насправді збирався зламати це в Ребму, шанси на це внести це в мій графік - тонкий банкомат.)
HostileFork каже, що не довіряйте SE

Ви все ще можете додати її в майбутньому. Я хотів би бачити альтернативне (і, можливо, коротше) рішення.
Ларс Еберт

Відповіді:


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.