ตอบอัตราส่วนโหวต


18

คำถามนี้ได้รับแรงบันดาลใจจากความจริงที่ว่าฉันรักที่จะเห็นคำถามที่มีคะแนนเท่ากันและคำตอบนับ


ดังนั้นนี่เป็นความท้าทายแบบสำหรับ y'all:

ท้าทาย:

ให้codegolf.stackexchangeรหัสคำถามเอาท์พุทอัตราส่วนระหว่างคะแนนโหวตของคำถามและจำนวนคำตอบ (เช่นvotes/answers)

ข้อมูลจำเพาะ:

  • คุณสามารถเข้าถึงอินเทอร์เน็ต แต่คุณสามารถเข้าถึงได้stackexchange.comและโดเมนย่อยต่างๆเท่านั้น คุณไม่สามารถใช้เครื่องมือย่อ URL

  • คุณสามารถรับอินพุตและให้เอาต์พุตในรูปแบบมาตรฐานใด ๆ

  • คุณต้องส่งออกอัตราส่วนเป็นตัวเลขทศนิยมในฐาน 10 โดยมีตัวเลขอย่างน้อย 4 {ถูกต้อง} หลังจากทศนิยม (ศูนย์อาจถูกตัดทอน)

  • หากคำถามยังไม่ได้ตอบโปรแกรมของคุณอาจมีพฤติกรรมที่ไม่ได้กำหนด

  • คุณควรใช้scoreคำถามเป็นเสียงนับดูที่นี่

นี่คืออย่างน้อยไบต์ในแต่ละภาษาที่ชนะสำหรับภาษานั้น ๆ โดยรวมไบต์อย่างน้อยก็จะชนะโดยรวม

นี่คือตัวอย่างโปรแกรมใน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"])

อัตราส่วนจำเป็นต้องมีอย่างน้อย 4 หลักทศนิยมหลังจากจุดที่กำหนดแม้ว่าจะเป็นศูนย์หรือไม่? เช่น 41/4 = 10.25 หรือ 10.2500
pizzapants184

@ pizzapants184 10.25 ใช้ได้
Socratic Phoenix

เกิดอะไรขึ้นถ้าความท้าทายไม่ได้รับคำตอบ? แล้วอัตราส่วนจะไม่มีที่สิ้นสุด?
Mr. Xcoder

คุณหมายถึงคะแนนหรือคะแนนรวมของคำถามหรือไม่
AdmBorkBork

@ Mr.Xcoder ในกรณีดังกล่าวพฤติกรรมที่ไม่ได้กำหนดไม่เป็นไร
Socratic Phoenix

คำตอบ:


10

JavaScript (ES6), 103 102 ไบต์

api.stackexchange.comจะต้องมีการเรียกใช้จากระดับรากของ ส่งคืนPromiseวัตถุที่มีผลลัพธ์

n=>fetch(`questions/${n}?site=codegolf`).then(r=>r.json()).then(({items:[j]})=>j.score/j.answer_count)
  • 1 ไบต์บันทึกขอบคุณที่kamoroso94

หากต้องการให้เรียกใช้จากเส้นทางที่ระบุจะได้รับอนุญาตนั่นจะกลายเป็น92 90 ไบต์

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

ลองมัน

เพิ่ม URL แบบเต็มเพื่อให้สามารถใช้งานได้ที่นี่

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
แทนที่i=>(j=i.items[0])ด้วย({items:[j]})=>jเพื่อบันทึกไบต์
kamoroso94

กลอุบายดีขอบคุณ @ kamoroso94 ฉันจะต้องจำไว้
Shaggy

8

Stratos , 40 ไบต์

-4 ไบต์ต้องขอบคุณ Shaggy

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

ลองมัน!

Stratos เชี่ยวชาญด้าน คำถาม

คำอธิบาย:

รหัสคลายการบีบอัดข้อมูลต่อไปนี้:

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

เริ่มจากบรรทัดแรก Stratos ทำการประเมินสีย้อมจากขวาไปซ้าย

f"api.stackexchange.com/questions/%?site=codegolf"r"items"@0หมายถึง "การประเมินคู่@กับอาร์กิวเมนต์ซ้ายมือf"api.stackexchange.com/questions/%?site=codegolf"r"items"และข้อโต้แย้งขวามือ0. @ได้รับที่ nองค์ประกอบของอาร์เรย์ JSON

เพื่อประเมินf"api.stackexchange.com/questions/%?site=codegolf"r"items"เราจะประเมินต่อไปคู่rกับอาร์กิวเมนต์ซ้ายมือและข้อโต้แย้งขวามือf"api.stackexchange.com/questions/%?site=codegolf" รับอาร์เรย์ JSON ด้วยชื่อที่ระบุ"items"r

f"api.stackexchange.com/questions/%?site=codegolf"ต่อไปเราจะต้องมีการประเมินผลการศึกษา ก่อน%จะถูกแทนที่ด้วยอินพุต fหมายถึง "รับเนื้อหาของ URL นี้"

ตอนนี้เราสามารถไปยังบรรทัดที่สอง บรรทัดใหม่หมายถึง "เพิ่มสิ่งที่เราประเมินไปยังรายการอาร์กิวเมนต์โดยนัย"

ต่อไปเราประเมินs(สตริงในวัตถุ JSON ที่มีชื่อบางอย่าง) ด้วยและ{ นำองค์ประกอบจากสแต็กอาร์กิวเมนต์โดยปริยายส่งคืนและเพิ่มกลับไปยังสแต็ก"answer_count"{

จากนั้นเราจะเพิ่มผลลัพธ์ของมันลงในสแต็กอาร์กิวเมนต์โดยปริยาย

ในการประเมิน⁰s"score"/เรากำลังใช้ dyad /(หาร) กับ⁰s"score"องค์ประกอบจากสแต็กอาร์กิวเมนต์โดยปริยาย

ในการประเมินว่า⁰s"score"เราได้รับสตริง"score"จากวัตถุ JSON จากองค์ประกอบที่ 0 ในสแต็กอาร์กิวเมนต์ implict

ตอนนี้เอาต์พุตของ/ถูกพิมพ์และโปรแกรมจะสิ้นสุดลง


บันทึก 4 ไบต์โดยการทิ้งรุ่น API ( 2.2/)
Shaggy

1
@Shaggy ไม่ทราบว่าไม่จำเป็นต้องใช้เวอร์ชัน API ขอบคุณ ไม่ข้าม 44: P
Okx

5

R + jsonlite , 111 ไบต์

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

ลิงค์ซอดเดอร์

jsonlite เป็นไลบรารีการแปลง JSON ที่ดีซึ่งทำงานได้ค่อนข้างดี ฉันไม่เกี่ยวกับการเล่นกอล์ฟเป็นเครื่องมือแยกวิเคราะห์ JSON สำหรับ R ...


คุณสามารถบันทึกไบต์โดยใช้httpโปรโตคอล นอกจากนี้ฉันเดา142729ว่าไม่ควรฮาร์ดโค้ดในนั้น?
Shaggy

@ Shaggy โทรดีขอบคุณ ฉันคัดลอกและวางเร็วเกินไป
Giuseppe

4

T-SQL, 64 54 ไบต์

เป็นเรื่องยากที่ SQL สามารถเอาชนะภาษาอื่น ๆ ได้ (ส่วนใหญ่)! แทนที่จะเป็น API URL ฉันไปที่Stack Exchange Data Explorerโดยตรง:

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

##i##ไม่ SQL มาตรฐานว่าเป็นรูปแบบการแลกเปลี่ยนชุดเพื่อความพร้อมในการป้อนข้อมูล

โปรดทราบว่าแหล่งข้อมูล data explorer จะอัปเดตทุกคืนดังนั้นค่าจึงไม่เป็นปัจจุบัน

จะโยนข้อผิดพลาดเป็นศูนย์โดยหารคำถามที่ไม่มีคำตอบ

แก้ไข : บันทึกไว้ 10 ไบต์โดยคูณด้วย 1.0 แทนอย่างชัดเจนไปCONVERTFLOAT


สามารถเอาชนะผู้อื่นได้ แต่ไม่ใช่ทุกคน :)
Okx

โอ้แม่ฉันมีวิธีแก้ไขปัญหาอื่น แต่ฉันอยู่ในโรงเรียนดังนั้นฉันไม่เคยลงรายการบัญชี ... คำตอบของฉันคล้ายกับของคุณหรือไม่ ฉันควรจะลบของฉันหรือไม่
สิ้นเชิงมนุษย์

@icrieverytim Ha, yep ดูเหมือนแบบสอบถามเดียวกันมากแม้ว่าฉันเพิ่งแก้ไขฉันเพื่อประหยัด 10 ไบต์เพิ่มเติม
BradC

@BradC ฉันแก้ไขคำตอบของฉันเป็น Mathematica คำตอบ lol
สิ้นเชิงมนุษย์

3

PowerShellขนาด 130 ไบต์

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

ดำเนินการInvoke- WEB REquest กับ URL ที่ได้รับ.contentดังกล่าวไม่ได้ConvertFrom-Jsonของเนื้อหาที่และได้รับ.itemsจากการที่วัตถุ JSON เก็บที่เข้า$aและดึงออก.scoreเป็นตัวเศษ .answer_countตัวหารเป็น ค่านั้นจะถูกทิ้งไว้บนไปป์ไลน์และเอาท์พุทก็เป็นนัย

หากคำถามยังไม่ได้รับคำตอบควรโยนข้อผิดพลาด "หารด้วยศูนย์"


3

Japt , 83 82 ไบต์

อยากลองใช้วิธีนี้ดูว่ามันจะได้ผลอย่างไรโดยที่ Japt ไม่สามารถทำให้สำเร็จได้ หลักทั้งหมดนี้จะทำคือevalไอเอ็นจีเวอร์ชันบีบอัดแก้ปัญหา JS ของฉัน ในฐานะที่เป็น Japt คือ JS เราสามารถกำหนดให้สิ่งนี้ถูกเรียกใช้จากระดับรากของapi.stackexchange.comและส่งคืนPromiseวัตถุที่มีผลลัพธ์

Ox`fet®("quÀËs/{U}?ÐÒ=¬¸golf").È(r=>r.js()).È(i=>(j=i.ems[0]).sÖ/j.s³r_Öt)
  • ดูมัน
  • ลองใช้ - ไบต์พิเศษในรุ่นนี้มีการรวมไว้//api.stackexchange.com/ใน URL console.logดังนั้นคุณจึงสามารถเห็นว่ามันใช้งานได้จริง

1
o0 ทำไมคุณถึงสร้างรหัสเชื่อมโยง? มันยังยุ่งอยู่กับการแสดงผลไบต์ของ userscript lol i.imgur.com/SO2zgAy.png
เต็มเปา

2

Mathematica, 124 ไบต์

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

Mathematica มีชนิดข้อมูลที่เรียกว่าRuleและมันทำให้เกิดความสับสน heck จากฉัน : P


1

Python 3 3+ ร้องขอ, 149 ไบต์

-1 ไบต์ขอบคุณ Mr. Xcoder

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

ลิงก์คือ Python 2 Btw มันโยนข้อผิดพลาดทั้งใน Python 2 และ Python 3 (บน TIO)

ไม่มีการเชื่อมต่ออินเทอร์เน็ตกับ TIO ฉันเพิ่งใช้ TIO สำหรับการจัดรูปแบบคำตอบ lol
สิ้นเชิง

ฉันคิดว่าhttpพอแล้วสำหรับตอนนี้
Mr. Xcoder


0

PHP, 167 ไบต์

<?$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;

การแตกเร็วของเทอร์โบในครั้งนี้ บันทึกเป็นไฟล์และดำเนินการในเทอร์มินัลเช่น:

php -f file.php 143083

อาจเป็นวิธีที่จะลดสิ่งนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.