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


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.