오스틴 : “누가 보냈 니?”
무스타파 : “나를 죽여야 해!”
오스틴 : “누가 보냈 니?”
무스타파 : “키스 내 엉덩이, 힘!”
오스틴 : “누가 보냈 니?”
무스타파 : “닥터 이블.”
(…)
무스타파 : “같은 질문을 세 번이나 할 수는 없습니다. 그것은 단지 나를 자극합니다.”
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";
?>