Jawaban Rasio Pemungutan Suara

18

Pertanyaan ini terinspirasi oleh fakta bahwa saya suka melihat pertanyaan dengan jumlah suara dan jawaban yang sama ...


Jadi, inilah tantangan untuk kalian:

Tantangan:

Diberikan codegolf.stackexchangeid pertanyaan, output rasio antara suara pertanyaan dan jumlah jawaban (misalnya votes/answers).

Spesifik:

  • Anda dapat mengakses internet, tetapi Anda hanya dapat mengakses stackexchange.comdan berbagai sub-domainnya. Anda tidak boleh menggunakan penyingkat URL.

  • Anda dapat mengambil input dan memberikan output dalam format standar apa pun.

  • Anda harus menampilkan rasio sebagai angka desimal di basis 10, dengan setidaknya 4 {akurat} digit setelah desimal (nol dapat terpotong).

  • Jika pertanyaan tidak dijawab, program Anda dapat menghasilkan perilaku yang tidak terdefinisi.

  • Anda harus menggunakan scorepertanyaan sebagai penghitungan suara, lihat di sini .

Ini adalah , setidaknya byte dalam setiap bahasa menang untuk bahasa itu, paling tidak keseluruhan byte menang secara keseluruhan.

Berikut adalah contoh program di 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"])
Phoenix Sokrates
sumber
Apakah rasio memerlukan setidaknya 4 digit desimal setelah titik desinal bahkan jika mereka nol? Misalnya 41/4 = 10,25 atau 10,2500
pizzapants184
@ pizzapants184 10.25 tidak masalah
Socratic Phoenix
Bagaimana jika tantangannya tidak dijawab? Lalu rasionya akan tak terbatas?
Tn. Xcoder
Apakah yang Anda maksud skor atau total suara pada pertanyaan?
AdmBorkBork
@ Mr.Xcoder dalam hal itu, perilaku yang tidak jelas tidak apa
Socratic Phoenix

Jawaban:

10

JavaScript (ES6), 103 102 byte

Perlu dijalankan dari tingkat root api.stackexchange.com . Mengembalikan Promiseobjek yang berisi hasil.

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

Jika mengharuskan dijalankan dari jalur tertentu diizinkan maka itu menjadi 92 90 byte.

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

Cobalah

URL lengkap ditambahkan untuk mengaktifkannya di sini.

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>

Shaggy
sumber
7
Ganti i=>(j=i.items[0])dengan ({items:[j]})=>juntuk menyimpan byte.
kamoroso94
Trik yang bagus, terima kasih, @ kamoroso94. Saya harus ingat yang itu.
Shaggy
8

Stratos , 40 byte

-4 byte terima kasih kepada Shaggy

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

Cobalah!

Stratos berspesialisasi dalam pertanyaan .

Penjelasan:

Kode ini didekompresi menjadi sebagai berikut:

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

Mulai dari baris pertama, Stratos mengevaluasi angka dua dari kanan ke kiri.

f"api.stackexchange.com/questions/%?site=codegolf"r"items"@0berarti "mengevaluasi angka dua @dengan argumen kiri f"api.stackexchange.com/questions/%?site=codegolf"r"items"dan argumen kanan 0. @mendapatkan elemen ke - n dari array JSON.

Untuk mengevaluasi f"api.stackexchange.com/questions/%?site=codegolf"r"items", kita selanjutnya akan mengevaluasi angka dua rdengan argumen kiri f"api.stackexchange.com/questions/%?site=codegolf"dan argumen kanan "items".rmendapatkan array JSON dengan nama yang ditentukan.

Selanjutnya, kita perlu mengevaluasi f"api.stackexchange.com/questions/%?site=codegolf". Pertama, %diganti dengan input. fberarti "dapatkan isi dari URL ini".

Sekarang, kita bisa beralih ke baris kedua. Baris baru berarti "tambahkan apa yang kami evaluasi ke daftar argumen implisit"

Selanjutnya, kami mengevaluasi s(mendapatkan string dalam objek JSON dengan nama tertentu) dengan {dan "answer_count". {mengambil elemen dari stack argumen implisit, mengembalikannya, dan menambahkannya kembali ke stack.

Kemudian, kami menambahkan output itu ke tumpukan argumen implisit.

Untuk mengevaluasi ⁰s"score"/, kami menerapkan angka dua /(bagi)⁰s"score" dan elemen dari tumpukan argumen implisit.

Untuk mengevaluasi ⁰s"score"kita mendapatkan string "score"dari objek JSON dari elemen 0 dalam tumpukan argumen implisit.

Sekarang, output /dicetak dan program berakhir.

Okx
sumber
Simpan 4 byte dengan membuang versi API ( 2.2/).
Shaggy
1
@Shaggy Tidak menyadari versi API tidak diperlukan, terima kasih. Tidak mencoret 44: P
Okx
5

R + jsonlite , 111 byte

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

Tautan r-biola

jsonlite adalah pustaka konversi JSON <-> R bagus yang berfungsi dengan baik. Saya tidak akan golf parser JSON untuk R ...

Giuseppe
sumber
Anda dapat menyimpan byte dengan menggunakan httpprotokol. Juga, saya kira 142729tidak seharusnya hardcode di sana?
Shaggy
@Shaggy panggilan yang bagus, terima kasih. Saya menyalin dan menempel terlalu cepat.
Giuseppe
4

T-SQL, 64 54 byte

Jarang SQL bisa mengalahkan (sebagian besar) bahasa lain! Alih-alih URL API, saya langsung pergi ke Stack Exchange Data Explorer :

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

The ##i##tidak SQL standar, itu format yang Stack Exchange untuk cepat untuk masukan.

Perhatikan bahwa sumber data explorer hanya diperbarui setiap malam, sehingga nilainya tidak terkini.

Akan membagi kesenjangan dengan nol pada pertanyaan tanpa jawaban.

Sunting : Disimpan 10 byte dengan mengalikan dengan 1,0 bukannya eksplisit CONVERTke FLOAT.

BradC
sumber
bisa mengalahkan yang lain, tapi tidak semua :)
Okx
Oh maaan, saya punya solusi lain tetapi saya masih di sekolah jadi saya tidak pernah mempostingnya ... Apakah jawaban saya terlalu mirip dengan jawaban Anda? Haruskah saya menghapus milik saya?
totallyhuman
@icrieverytim Ha, ya sepertinya permintaan yang hampir sama, meskipun saya baru saja mengedit milik saya untuk menyimpan 10 byte lebih banyak.
BradC
@BradC Saya mengedit jawaban saya menjadi lol jawaban Mathematica.
totallyhuman
3

PowerShell , 130 byte

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

Melakukan Invoke- Web Request terhadap URL, memperolehnya .content, melakukan ConvertFrom-Jsonkonten itu, dan mendapatkan .itemsobjek JSON itu. Simpan itu ke dalam $adan tarik keluar .scoresebagai pembilang. Penyebutnya adalah .answer_count. Nilai itu ditinggalkan di jalur pipa dan hasilnya tersirat.

Jika pertanyaan tidak dijawab, ini harus melemparkan kesalahan "Bagi dengan nol".

AdmBorkBork
sumber
3

Japt , 83 82 byte

Ingin mencoba ini untuk melihat bagaimana itu akan berhasil, mengingat Japt tidak bisa menyelesaikannya secara asli. Pada dasarnya semua ini dilakukan adalah evalversi terkompresi dari solusi JS saya . Karena Japt adalah JS maka kita dapat meminta agar ini dijalankan dari level root api.stackexchange.comdan juga mengembalikan Promiseobjek yang berisi hasilnya.

Ox`fet®("quÀËs/{U}?ÐÒ=¬¸golf").È(r=>r.js()).È(i=>(j=i.ems[0]).sÖ/j.s³r_Öt)
  • Lihat ini
  • Cobalah - byte tambahan dalam versi ini dicatat dengan dimasukkannya //api.stackexchange.com/URL dan console.logagar Anda dapat melihatnya bekerja
Shaggy
sumber
1
o0 Mengapa Anda membuat kode tautan? Bahkan mengacaukan tampilan jumlah byte byte script pengguna. i.imgur.com/SO2zgAy.png
totallyhuman
2

Mathematica, 124 byte

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

Mathematica memiliki tipe data yang dipanggil Ruledan membingungkan saya. : P

benar-benar manusiawi
sumber
1

Python 3 + permintaan, 149 byte

-1 byte terima kasih kepada Tn. Xcoder.

from requests import*
u=get('http://api.stackexchange.com/questions/%s?site=codegolf'%input()).json()['items'][0]
print(u['score']/u['answer_count'])
benar-benar manusiawi
sumber
Tautannya adalah ke Python 2. Btw, ia melempar kesalahan baik di Python 2 dan Python 3 (di TIO).
Tidak ada akses internet di TIO whoops. Saya hanya menggunakan TIO untuk lol pemformatan jawaban.
totallyhuman
Saya pikir (untuk saat ini) httpsudah cukup.
Tn. Xcoder
125 byte
LyricLy
0

PHP, 167 byte

<?$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-fast crack saat ini. Simpan sebagai file dan jalankan di terminal seperti:

php -f file.php 143083

Mungkin ada cara untuk mengurangi ini.

Orpheus
sumber