대답 할 몇 가지 질문을 해주세요!


15

소개

때때로 나는 지루해하고 PPCG에 대한 새로운 질문이 없기 때문에 PPCG의 과거에서 무작위로 질문하는 것을 원합니다.

도전

사용자의 PPCG ID를 입력 (예 : 내 ID는 30525 )으로 지정하면 임의로 선택된 PPCG 질문의 URL을 출력하십시오. 질문이 다음 기준을 충족하지 않으면 기준에 맞을 때까지 다른 질문을 선택해야합니다.

  • 질문자는 ID를 질문에 입력 한 사용자가 아니어야합니다.
  • 질문에 ID가 입력 된 사용자가 질문에 이미 답변하지 않았어야합니다.
  • 질문에 대답하지 않아야합니다. 아마 너무 어려울 것입니다
  • 질문에 10 개가 넘는 답변이 없어야합니다. 아마 너무 쉬울 것입니다
  • 질문은 로 태그되어야합니다

규칙

URL 단축기는 허용되지 않습니다.

Stack Exchange API 및 Stack Exchange Data Explorer를 사용할 수 있습니다.

실제 PPCG 사용자 ID 만 제공됩니다.

적절한 질문이없는 경우에는 아무 것도 출력 할 필요가 없습니다 (정의되지 않은 동작은 좋습니다).

사이드 챌린지

추가 포인트가 주어지지는 않지만 누군가 실행할 때 위의 기준을 따르는 임의의 PPCG 질문에 대한 브라우저 창을 여는 유용한 북마크를 설계 한 경우 감사하겠습니다 . 사용자 ID는 프로그램에 하드 코드되어야합니다 (북마크릿 전용 ).

도전

바이트 단위의 가장 짧은 코드가 이깁니다.

답변:


4

PowerShell, 261 바이트

param($i)$q=irm (($u="api.stackexchange.com/questions/")+($s="?tagged=code-golf&site=codegolf"))
do{$t=$q.items|?{$c=$_|% an*;$_.owner.user_id-ne$i-and$c-gt0-and$c-lt10}|random}while((irm($u+$t.question_id+'/answers'+$s)).items.owner.user_id-contains$i)
$t.link

설명:

param($i)
$q=irm (($u="api.stackexchange.com/questions/")+($s="?tagged=code-golf&site=codegolf")) #run this query
do{ #until we find a valid question, get a random one that fits the basic specs
    $t=$q.items|?{$c=$_|% an*;$_.owner.user_id-ne$i-and$c-gt0-and$c-lt10}|random
}while( #Get all of the answers, and their owners into an array, check it doens't contain the provided id
(irm($u+$t.question_id+'/answers'+$s)).items.owner.user_id-contains$i
)
$t.link #output the question link

웹 브라우저에서 여는 버전에 4 바이트 추가

param($i)$q=irm (($u="api.stackexchange.com/questions/")+($s="?tagged=code-golf&site=codegolf"))
do{$t=$q.items|?{$c=$_|% an*;$_.owner.user_id-ne$i-and$c-gt0-and$c-lt10}|random}while((irm($u+$t.question_id+'/answers'+$s)).items.owner.user_id-contains$i)
saps $t.link

5

자바 스크립트 (ES6), 333 329 327 323 283 바이트

api.stackexchange.com도메인 내에서 실행해야 합니다 ( 관련 메타 ). PromiseURL 이 포함 된 ( 관련 메타 )를 반환합니다 .

f=async i=>await(u="/questions/",s="?tagged=code-golf&site=codegolf",q=await(await(await fetch(u+s)).json()).items.filter(x=>x.owner.user_id!=i&x.answer_count<11).sort(_=>.5-Math.random())[0],await(await fetch(u+q.question_id+s)).json()).items.some(x=>x.owner.user_id==i)?f(i):q.link

시도 해봐

f=async i=>await(u="//api.stackexchange.com/questions/",s="?tagged=code-golf&site=codegolf",q=await(await(await fetch(u+s)).json()).items.filter(x=>x.owner.user_id!=i&x.answer_count<11).sort(_=>.5-Math.random())[0],await(await fetch(u+q.question_id+s)).json()).items.some(x=>x.owner.user_id==i)?f(i):q.link
k.previousSibling.value=58974 // me
k.onclick=_=>f(+k.previousSibling.value).then(p=>k.nextSibling.innerText=p)
<input type=number><button id=k>Fetch</button><pre>


북마크릿

그리고 여기는 사용자 정의 가능한 북마크로, 아직 답변하지 않은 임의의 질문을로드합니다. 사용하려면 브라우저 툴바에 새 북마크를 추가하고 전체 코드를 URL 필드에 놓으십시오.

위의 솔루션과 달리, 이것은 사이트의 모든 질문에 작동하므로 (사이트 및 태그에 따라) 실행 속도가 느릴 수 있으며 API가 할 수있는 것처럼 API에 필요한 쿼리 수가 비쌀 수 있습니다 한 번에 100 개의 질문 만 반환합니다.

사용자 정의하려면 다음 변수를 변경하십시오.

  • k: API 키- 여기에 등록 할 수 있습니다 .
  • s: 질문을하려는 Stack Exchange 사이트.
  • i: 해당 사이트의 사용자 ID
  • t: 필터링하려는 태그입니다. 이 옵션에는 4 가지 옵션이 있습니다.
    1. "": 빈 문자열; 태그별로 필터링하지 않으려면
    2. "code-golf;string": 필터링하려는 세미콜론으로 구분 된 태그 목록,
    3. prompt("Tags:"): 필터링하려는 태그를 입력하라는 메시지가 표시되거나
    4. prompt("Tags:","code-golf;string"): 필터링 할 태그를 입력하라는 메시지가 표시되며 기본 목록이 제공됩니다.
javascript:(f=(

/* See /codegolf//a/122400/58974 for documenation */
k="",
s="codegolf",
i=58974,
t="code-golf",

p=1,q=[],r=1)=>fetch((u="//api.stackexchange.com/questions/")+(d=`?key=${k}&tagged=${t}&site=`+s)+`&page=${p}&pagesize=100`).then(r=>r.json()).then(j=>r&&(q=[...q,...j.items.filter(x=>x.owner.user_id!=i&(a=x.answer_count)&a<11)])^j.has_more?f(i,k,s,t,p+1,q,1):q.sort(_=>.5-Math.random())[0]).then(y=>fetch(u+y.question_id+"/answers"+d).then(r=>r.json()).then(j=>j.items.some(x=>x.owner.user_id==i)?f(i,k,s,t,q,0):window.location=y.link)))()

1
이 Powershell 답변을 기반으로 API의 문자열을 멋지게 재사용합니다.
colsw

어느 시점에서 영구적으로 금지 되나요? ;)
Beta Decay

@BetaDecay, API 도전 과제가 다시 시작되면 곧 알게 될 것입니다! : D
얽히고 설킨 Shaggy

여기에서 api 토큰을 사용할 수 있습니다 : stackapps.com/q/7384/45852 속도 제한을 높일 수 있습니다.
programmer5000

1
@BetaDecay, 사용 가능한 스크립트로 확장하려고했지만 시간이 부족합니다. 나는 내일 다시 돌아 오려고 노력할 것이다.
얽히고 설킨 Shake
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.