Bana cevaplamam için bazı sorular ver!


15

Giriş

Bazen sıkılıyorum ve PPCG hakkında yeni soru yok, bu yüzden PPCG'nin geçmişinden rastgele bir soru kazmanızı istiyorum.

Meydan okuma

(Örneğin benim kimliğidir girdi olarak bir kullanıcının PPCG kimliğini Verilen 30525 ), çıktı rastgele seçilen PPCG soruya URL'si. Soru aşağıdaki ölçütleri karşılamıyorsa, ölçütleri karşılayana kadar başka bir soru seçmelisiniz:

  • Soru asker, kimliği soruya girilen kullanıcı olmamalıdır
  • Soru, kimliği soruya girilen kullanıcı tarafından daha önce cevaplanmamış olmalıdır
  • Soru cevaplandırılmamalıdır: muhtemelen çok zor
  • Soru 10'dan fazla cevap içermemelidir: muhtemelen çok kolay
  • Soru olarak etiketlenmelidir

kurallar

URL kısaltıcılarına izin verilmiyor.

Stack Exchange API ve Stack Exchange Veri Gezgini'ni kullanabilirsiniz.

Size yalnızca gerçek bir PPCG kullanıcı kimliği verilecektir.

Olası bir durumda, uygun bir soru olmaması durumunda, hiçbir şey çıkarmanız gerekmez (tanımlanmamış davranış iyidir).

Yan Görev

Fazladan puan kazanmayacak olsanız da, birisi çalıştırıldığında tarayıcı penceresini yukarıdaki kriterleri takip eden rastgele bir PPCG sorusuna açan kullanılabilir bir yer imi tasarlamışsa takdir edilecektir . Kullanıcı kimliği programa sabit olarak kodlanmalıdır ( yalnızca yer işareti için ).

Meydan okuma

Bayt cinsinden en kısa kod kazanır.

Yanıtlar:


4

PowerShell, 261 Bayt

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

Açıklama:

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

webbrowser'da açan bir sürüm için 4 bayt ekleyin

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

JavaScript (ES6), 333 329 327 323 283 bayt

Alan adından çalıştırılması gerekiyor api.stackexchange.com( alakalı meta ). PromiseURL içeren bir içerik döndürür ( alakalı meta ).

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

Dene

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>


Bookmarklet

Ve burada, henüz cevaplamadığınız rastgele bir soru yükleyecek özelleştirilebilir bir yer işareti olarak. Kullanmak için, tarayıcınızın araç çubuğuna yeni bir yer işareti eklemeniz ve kodun tamamını URL alanına bırakmanız yeterlidir.

Yukarıdaki çözümden farklı olarak, bu bir sitedeki tüm sorularla çalışır, bu nedenle (siteye ve etiketlere bağlı olarak) çalıştırmak yavaş olabilir ve API için yapması gereken sorgu sayısında da pahalı olabilir. bir seferde sadece 100 soru döndürün.

Özelleştirmek için aşağıdaki değişkenleri değiştirin

  • k: API anahtarınız - burada bir tane için kaydolabilirsiniz .
  • s: Soru sormak istediğiniz Stack Exchange sitesi.
  • i: Bu sitedeki kullanıcı kimliğiniz.
  • t: Filtrelemek istediğiniz etiketler. Bunun için 4 seçenek var:
    1. "": Boş bir dize; herhangi bir etikete göre filtrelemek istemiyorsanız,
    2. "code-golf;string": Filtrelemek istediğiniz etiketlerin noktalı virgülle ayrılmış bir listesi,
    3. prompt("Tags:"): Filtrelemek istediğiniz etiketleri girmeniz istenir veya,
    4. prompt("Tags:","code-golf;string"): Filtre uygulamak istediğiniz etiketleri varsayılan bir liste sağlayarak girmeniz istenir.
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
Bu benim powershell cevabım, API için dizelerin güzel yeniden kullanılması dayanıyordu.
colsw

Hangi noktada kalıcı olarak yasaklanıyorsunuz? ;)
Beta Çürümesi

@BetaDecay, API zorlukları tekrar hızlanırsa, yakında öğrenebilirim! : D
Shaggy

Api belirteçlerini buradan kullanabilirsiniz: ücret sınırınızı artırmak için stackapps.com/q/7384/45852 .
programcı5000

1
@BetaDecay, kullanılabilir bir komut dosyasına genişletmek niyetindeydim ama zamanım bitti; Yarın tekrar gelmeye çalışacağım.
Shaggy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.