태그 보관물: stack-exchange-api

stack-exchange-api

StackExchange Mustafa는 같은 질문을 세 번 할 수 없습니다. 텍스트에이 형식의

오스틴 : “누가 보냈 니?”

무스타파 : “나를 죽여야 해!”

오스틴 : “누가 보냈 니?”

무스타파 : “키스 내 엉덩이, 힘!”

오스틴 : “누가 보냈 니?”

무스타파 : “닥터 이블.”

(…)

무스타파 : “같은 질문을 세 번이나 할 수는 없습니다. 그것은 단지 나를 자극합니다.”

Austin Powers와 Mustafa 의 정신으로 짧은 대화를 시뮬레이션해야합니다 . 그러나 전체 대화의 데이터 소스는 StackOverflow 질문 (URL에서 입력으로 제공됨)이됩니다.

규칙

질문 작성자의 사용자 이름은 “오스틴”대신 사용됩니다. 그들이 세 번 요구할 질문은 질문 제목의 마지막 문장에서 나옵니다 (이것은 아직 물음표로 끝나지 않았다면 강제 종료되었습니다).

StackExchange는 “Mustafa”의 일부를 담당 할 것입니다. 궁극적으로 주어진 답변은 물음표로 끝나지 않는 답변의 첫 번째 문장에서 나 왔으며 응답 한 사용자의 이름에 기인합니다.

질문이 게임 자격을 갖추려면 (a) 답변이 있어야하며 (b) 다음과 같은 원래 질문에 대한 일련의 의견이 있어야합니다.

  • 질문자가 아닌 다른 사람의 의견
  • (생략 된 댓글 수)
  • 질문자의 의견
  • 질문자가 아닌 다른 사람의 의견
  • (건너 뛸 수있는 댓글 수)
  • 질문자의 의견

이 순서가 최상위 응답 날짜 이전에 충족되지 않으면 프로그램은 단순히 출력해야합니다."Oh, behave!"

StackExchange Mustafa의 화난 레토르트는 그렇지 않은 질문자가 아닌 다른 사람의 의견 첫 문장에서 나옵니다. 물음표로 끝나지 하며 느낌표로 끝납니다. 주석으로 끝나지 않는 주석에 문장이 없으면 레토르트 후보로 건너 뜁니다. 주석 레토르트는 작성자의 사용자 이름에 기인합니다.

설명

  • 주석에서 선행 “@XXX”응답 데이터를 제거하십시오.

  • StackOverflow는 주석이 많은 경우 주석을 요약하므로 전체 목록을 얻으려면 두 번째 요청을 사용해야 할 것입니다. 이 요청은 /programming//posts/NNN/comments?_=MMM게시물 ID가 N이고 질문 ID가 M 인 양식 입니다. 예 : /programming//posts/11227809/comments?_=211160

  • 텍스트 만 고정하려면 URL을 제거해야합니다.

  • “문장”은 마침표, 물음표 또는 느낌표로 끝나는 코드 블록 이외의 것으로 정의합니다. 한 줄의 텍스트에이 형식의 끝 문장 부호가 없으면 텍스트의 끝은 문장의 끝입니다. 마치 마침표로 작성된 것처럼.

  • 자격이 될만한 재미있는 테스트 사례를 찾고있는 경우 가장 많은 의견이있는 게시물과 같은 StackExchange Data Explorer를 사용해보십시오 .

  • … 더 올수록, 나는 내기를 …

견본

샘플 하나

입력:

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

산출:

shanee : “나중에 일반 텍스트 검색을 위해 어떻게 사용자 암호 저장소에 윤리적으로 접근해야합니까?”

스테판 : “그는 그것이 좋지 않다는 것을 안다고 생각합니다!”

shanee : “나중에 일반 텍스트 검색을 위해 어떻게 사용자 암호 저장소에 윤리적으로 접근해야합니까?”

Rook : “아마도 버퍼 오버플로 취약점을 안전한 방법으로 구현할 수 있는지 물어봐야합니다.”

shanee : “나중에 일반 텍스트 검색을 위해 어떻게 사용자 암호 저장소에 윤리적으로 접근해야합니까?”

마이클 버 (Michael Burr) : “암호가 일반 텍스트 여야하는 이유를 물으십시오. 사용자가 암호를 검색 할 수 있다면 암호를 정확히 검색 할 필요는 없습니다. 암호는 무엇인지 기억하지 못합니다. 어쨌든) 사용 가능한 비밀번호를 제공 할 수 있어야합니다. “

샘플 2

입력:

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

산출:

DVK : “왜 머글 링 마법사는 Muggle 기술을 사용하여 데스 이터와 싸우지 않습니까?”

DampeS8N : “이것은 다시 가장자리에서 춤을 춘다!”

DVK : “왜 머글 링 마법사는 Muggle 기술을 사용하여 데스 이터와 싸우지 않습니까?”

DampeS8N :그렇습니다. 그러나이 사이트는 줄거리를 지적하는 것이 아닙니다!”

DVK : “왜 머글 링 마법사는 Muggle 기술을 사용하여 데스 이터와 싸우지 않습니까?”

Jeff : “저는 레퍼런스를 찾을 수 없지만 JK Rowling이 실제로 이것을 한 시점에서 언급했다고 생각합니다.”

샘플 3

입력:

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

승리 기준

코드 골프-가장 짧은 코드가 승리합니다.



답변

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

?>


답변