Oy Oranına Cevap


18

Bu soru, eşit oy ve cevap sayıları ile soruları görmeyi sevmemden ilham alıyor ...


İşte size basit bir meydan okuması:

Meydan okuma:

Bir codegolf.stackexchangesoru kimliği verildiğinde , sorunun oyları ile cevap sayısı arasındaki oranı girin (örn. votes/answers).

Özellikleri:

  • İnternet'e erişebilirsiniz, ancak yalnızca stackexchange.comve çeşitli alt alanlarına erişebilirsiniz . URL kısaltıcılarını kullanamazsınız.

  • Herhangi bir standart biçimde girdi alabilir ve çıktı verebilirsiniz.

  • Oranı ondalık sayı olarak ondalık sayı olarak vermelisiniz ve ondalık basamaktan sonra en az 4 {doğru} basamak olmalıdır (sıfırlar kesilebilir).

  • Soru cevaplanmamışsa, programınız tanımlanmamış davranışlar üretebilir.

  • Sen kullanmalıdır scoreoy sayımı olarak sorunun, bkz burada .

Bu , her dilde en az bayt o dil için kazanır, en az bayt genel kazanır.

İşte bir örnek program Python 3 + requests:

import requests
import json

id = input("id> ")
url = "https://api.stackexchange.com/2.2/questions/" + id + "?site=codegolf"
content = requests.get(url).text
question = json.loads(content)["items"][0]

print(float(question["score"]) / question["answer_count"])

Oran, sıfır olsa bile ondalık noktadan sonra en az 4 ondalık basamağa ihtiyaç duyar mı? 41/4 = 10.25 veya 10.2500
pizzapantlar184 18:17

10.25 gayet iyi
Phoenix

Zorluk cevaplanmazsa ne olur? O zaman oran sonsuz olur mu?
Bay Xcoder

Yani soruya puan veya toplam oy mu demek istediniz ?
AdmBorkBork

@ Bu durumda Xcoder, tanımsız davranış tamam
Phoenix

Yanıtlar:


10

JavaScript (ES6), 103 102 bayt

Kök seviyesinden çalıştırılması gerekiyor api.stackexchange.com. Sonucu Promiseiçeren bir nesne döndürür .

n=>fetch(`questions/${n}?site=codegolf`).then(r=>r.json()).then(({items:[j]})=>j.score/j.answer_count)

Eğer belirli bir yoldan çalıştırılabilir gerektiren izin o olur 92 90 bayt.

n=>fetch(n+`?site=codegolf`).then(r=>r.json()).then(({items:[j]})=>j.score/j.answer_count)

Dene

Burada çalışmasını sağlamak için tam URL eklendi.

f=
n=>fetch(`//api.stackexchange.com/questions/${n}?site=codegolf`).then(r=>r.json()).then(({items:[j]})=>j.score/j.answer_count)
onchange=_=>f(+i.value).then(t=>o.innerText=t)
<input id=i type=number><pre id=o>


7
Bir bayt kaydetmek için i=>(j=i.items[0])ile değiştirin ({items:[j]})=>j.
kamoroso94

Güzel numara, teşekkürler, @ kamoroso94. Bunu hatırlamam gerekecek.
Shaggy

8

Stratos , 40 bayt

Shaggy sayesinde -4 bayt

f"¹⁵s/%²"r"⁷s"@0
{s"answer_⁰"
⁰s"score"/

Dene!

Stratos soruları konusunda uzmanlaşmıştır .

Açıklama:

Kod aşağıdakilere kadar açılır:

f"api.stackexchange.com/questions/%?site=codegolf"r"items"@0
{s"answer_count"
⁰s"score"/

İlk satırdan başlayarak Stratos, boyaları sağdan sola değerlendirir.

f"api.stackexchange.com/questions/%?site=codegolf"r"items"@0"" dyad'ı @sol f"api.stackexchange.com/questions/%?site=codegolf"r"items"ve sağdaki argümanlarla değerlendirin 0. JSON dizisinin n. elemanını @alır .

Değerlendirmek için f"api.stackexchange.com/questions/%?site=codegolf"r"items", daha sonra ikili olanı rsol f"api.stackexchange.com/questions/%?site=codegolf"ve sağdaki argümanlar ile değerlendireceğiz "items".rbelirtilen ada sahip JSON dizisini alır.

Sonra, değerlendirmemiz gerekecek f"api.stackexchange.com/questions/%?site=codegolf". İlk olarak, %girdi ile değiştirilir. f"bu URL'nin içeriğini al" anlamına gelir.

Şimdi ikinci satıra geçebiliriz. Yeni satır, "değerlendirdiklerimizi örtük argüman listesine ekle" anlamına gelir

Sonra, değerlendirmek sile (belli bir adla JSON nesnesi olsun dize) {ve "answer_count". {örtük argüman yığından bir öğe alır, döndürür ve yığına geri ekler.

Sonra, bunun çıktısını örtük argüman yığınına ekliyoruz.

Değerlendirmek için örtük argüman yığınına ⁰s"score"/dyad /(böl) ⁰s"score"ve bir element uyguluyoruz .

Değerlendirmek için ⁰s"score"dize "score", JSON nesnesinden implict argüman yığınındaki 0 ​​öğesinden alıyoruz .

Şimdi, çıktısı /yazdırılır ve program sona erer.


API sürümünü ( 2.2/) çıkararak 4 bayt kaydedin .
Shaggy

1
@Shaggy API sürümünün gerekli olmadığını fark etmediniz, teşekkürler. 44: P
Okx

5

R + jsonlit , 111 bayt

function(n,x=jsonlite::fromJSON(sprintf('http://api.stackexchange.com/questions/%s?site=codegolf',n))$i)x$s/x$a

R-keman bağlantısı

jsonlite oldukça iyi çalışan güzel bir JSON <-> R dönüşüm kütüphanesidir. Ben JS için bir JSON ayrıştırıcı golf değildi ...


httpProtokolü kullanarak bir bayt kaydedebilirsiniz . Ayrıca, 142729orada kodlanmış olmamalı sanırım ?
Shaggy

@ İyi bir çağrı, teşekkür ederim. Çok hızlı kopyalayıp yapıştırdım.
Giuseppe

4

T-SQL, 64 54 bayt

SQL'in diğer dilleri (çoğu) yenebilmesi nadirdir! API URL'si yerine doğrudan Stack Exchange Veri Gezgini'ne gittim :

SELECT 1.0*Score/AnswerCount FROM Posts WHERE Id=##i##

##i##Giriş için istemi için Yığın Exchange'in formatını var standart SQL, değil.

Veri gezgini kaynağının yalnızca her gece güncellendiğini unutmayın, bu nedenle değerler güncel değildir.

Cevap vermeyen sorulara sıfır hata ile bölünür.

Düzenleme : Kaydedilen 10 yerine açık bir dakika boyunca 1.0 ile çarpılarak bayt CONVERTiçin FLOAT.


diğerleri yenebilir, ama hepsi değil :)
Okx

Oh maaan, başka bir çözümüm vardı ama okuldaydım, bu yüzden hiç yayınlamadım ... Cevabım sizinkine çok mu benziyor? Benimkini silmeli miyim?
totallyhuman

@icrieverytim Ha, evet hemen hemen aynı sorguya benziyor, ancak 10 bayt daha tasarruf etmek için benimkini düzenledim.
BradC

@BradC Cevabımı Mathematica cevap lol olarak düzenledim.
totallyhuman

3

PowerShell , 130 bayt

($a=(ConvertFrom-Json(iwr("http://api.stackexchange.com/questions/"+$args+"?site=codegolf")).content).items).score/$a.answer_count

Gerçekleştirir bir Invoke- Web RURL'ye karşı equest, alır .content, bunun bir yapar ConvertFrom-Jsono içeriğin ve alır .itemso JSON nesnesinin. Bunu pay olarak saklar $ave çıkarır .score. Payda .answer_count. Bu değer ardışık düzende bırakılır ve çıktı örtüktür.

Soru cevaplanmamışsa, bu bir "Sıfıra böl" hatası vermelidir .


3

Japt , 83 82 bayt

Bunun nasıl çalışacağını görmek için denemek istedim, Japt'ın bunu doğal olarak başaramadığını görerek. Esasen tüm yaptığım JS çözümümüneval sıkıştırılmış bir versiyonudur . Japt olarak ise JS o zaman bu kök düzeyine çalıştırılabilir zorunlu kılabilir ve ayrıca bir dönüş sonucunu içeren nesneyi.api.stackexchange.comPromise

Ox`fet®("quÀËs/{U}?ÐÒ=¬¸golf").È(r=>r.js()).È(i=>(j=i.ems[0]).sÖ/j.s³r_Öt)
  • Görüntüle
  • Deneyin - bu sürümdeki fazladan baytlar //api.stackexchange.com/, URL'ye dahil edildiğinde hesaba katılır ve console.logböylece gerçekten çalıştığını görebilirsiniz

1
o0 Kodu neden bir bağlantı haline getirdiniz? Hatta usercript'in bayt sayısı ekran lol ile karışıklık. i.imgur.com/SO2zgAy.png
totallyhuman

2

Mathematica, 124 bayt

N@("score"/.(u="items"/.Import["http://api.stackexchange.com/questions/"<>#<>"?site=codegolf","JSON"]))/("answer_count"/.u)&

Mathematica adı verilen bir veri türüne sahiptir Ruleve bu da benim kafamı karıştırıyor. : P


1

Python 3 + istekleri, 149 bayt

Bay Xcoder sayesinde -1 bayt.

from requests import*
u=get('http://api.stackexchange.com/questions/%s?site=codegolf'%input()).json()['items'][0]
print(u['score']/u['answer_count'])

Bağlantı Python 2'ye aittir. Btw, hem Python 2'de hem de Python 3'te (TIO'da) bir hata atar.

TIO whoops internet erişimi yok. Ben sadece lol lol biçimlendirme için TIO kullandım.
tamamen insanlık

Bence (şimdilik) httpyeterli.
Bay Xcoder


0

PHP, 167 bayt

<?$f=json_decode(gzdecode(file_get_contents('https://api.stackexchange.com/2.2/questions/'.$argv[1].'?site=codegolf')))->items[0];echo $f->score/$f->answer_count;

Turbo hızlı çatlak. Bir dosya olarak kaydedin ve terminalde şöyle çalıştırın:

php -f file.php 143083

Bunu azaltmanın bir yolu olabilir.

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.