คำถามนี้มีคำตอบกี่คำ?


16

เขียนโปรแกรมหรือฟังก์ชั่นที่ส่งออกจำนวนตอบจำนวนคำถามที่มี โซลูชันของคุณยังควรทำงานเมื่อมีการเพิ่มคำตอบเพิ่มเติม

ภาษาที่ทำงานในเบราว์เซอร์อาจถูกเรียกใช้จากคอนโซล js ขณะที่อยู่ในหน้านี้ มิฉะนั้นคุณอาจต้องดาวน์โหลดหน้านี้ โซลูชันหลายภาษาเช่นwgetการใช้หน้าเว็บและการแยกวิเคราะห์โดยใช้grepก็โอเค เพียงสรุปบรรทัดคำสั่งและแหล่งที่มาทั้งหมดที่ใช้

นี่คือรหัสกอล์ฟ คำตอบที่สั้นที่สุดในการชนะไบต์

แก้ไข:

ให้อย่างน้อยหนึ่งครั้งที่ URL ของหน้านี้จะไม่นับรวมเป็นอินพุตหรือในแหล่งที่มา ไม่มีตัวย่อ URL ไม่มีข้อมูลที่เก็บไว้เช่นรับพารามิเตอร์เป็นต้นราคารอบ URL ยังคงนับถ้าจำเป็น การใช้ URL เป็นอินพุตก็ไม่เป็นไร หากคุณต้องการลบบางส่วนของ URL เช่น/how-many-answers...คุณทำได้ แต่อาจไม่ช่วยคุณได้


มันอาจจะสายเกินไปที่จะปกครองในตอนนี้ แต่จำนวนที่ควรจะรวมคำตอบที่ถูกลบ?
Dennis

2
@Dennis ฉันไม่เห็นคำตอบที่ถูกลบดังนั้นฉันจะบอกว่าไม่มีใครต้องกังวลเกี่ยวกับพวกเขา นับถ้าคุณต้องการ ฉันจะไม่นับพวกเขาเพราะฉันไม่เห็นพวกเขา
Filip Haglund

ฟังก์ชั่นสามารถรับ url เป็นอินพุตได้หรือไม่? การป้อนข้อมูลจะนับรวมเป็นจำนวน bytecount หรือไม่
JungHwan Min

2
@FilipHaglund ฉันคิดว่าการลบ URL ไบต์ในโค้ดจะถูกลบออกจากการนับทั้งหมดหรือถูกใช้เป็นอินพุตเนื่องจากการเรียงลำดับนั้นทำให้เป็นไปไม่ได้สำหรับภาษาที่ไม่ได้ทำงานในเบราว์เซอร์ เพื่อมีโอกาสชนะ
Daniel

1
(แม้ว่าในบางภาษาการรับอินพุตอาจต้องใช้ไบต์มากกว่า) หรืออนุญาตให้ลบได้เฉพาะถ้า URL http://...ปรากฏเป็นคำต่อคำในรหัสที่มา
Dennis

คำตอบ:


14

Javascript + jQuery, 23 ไบต์

_=>+$("h2>span").text()

สิ่งนี้อาจล้มเหลวหรือไม่ถ้ามีh2>spanสิ่งที่ท้าทายอยู่ในร่างกาย?
Martin Ender

3
อาจจะดีที่จะเพิ่มเข้าไปในคำตอบแล้ว :)
Martin Ender

1
สิ่งนี้จะทำให้ runnable ("เรียกใช้ข้อมูลโค้ด")?
RudolfJelin

13
โปรดทราบว่านี่ใช้ jQuery ซึ่งไม่ใช่ JavaScript ที่แท้จริง (เช่นไม่ควรมีข้อความว่า "JavaScript") การใช้ห้องสมุดที่มีอยู่ด้านบนของภาษาอย่างน้อยควรมีการระบุไว้อย่างชัดเจน ฉันไม่ได้โต้เถียงกับการใช้ jQuery เพียง แต่ควรระบุไว้
Makyen

1
เครือข่ายของ @Makyen StackOverflow ใช้ jQuery คำถามบอกว่า "ภาษาที่ทำงานในเบราว์เซอร์อาจถูกเรียกใช้จากคอนโซล js ขณะที่อยู่ในหน้านี้" ไม่ต้องโหลด jQuery เนื่องจากเป็นแบบเดิมแล้ว บางทีนั่นอาจเป็นเหตุผลว่าไม่ได้ระบุ jQuery
Ismael Miguel


4

Python 2, 120 ไบต์, 79 w / o URL

ฉันไม่สามารถพูดได้ว่า Python ถูกสร้างขึ้นเพื่อการท้าทาย

import urllib
print[l for l in urllib.urlopen("http://codegolf.stackexchange.com/q/96298")if"answerCount"in l][0][83:-9]

น่าเสียดายที่การนำเข้าแบบอินไลน์มีความยาวเท่ากัน :(

ความช่วยเหลือเกี่ยวกับการเล่นกอล์ฟเพิ่มเติมนี้จะได้รับการชื่นชมอย่างมาก

หาก URL (ขนาดมหึมา 41 ไบต์มากกว่า 1/3 ไบต์ของฉัน) สามารถใช้เป็นอินพุตก็คือ 82 ไบต์:

import urllib
lambda u:[l for l in urllib.urlopen(u)if"answerCount"in l][0][83:-9]

1
ลองใช้requestsห้องสมุด
noɥʇʎԀʎzɐɹƆ

ฉันคิดว่าไม่สามารถข้ามเครื่องหมายสแลชต่อท้าย ...
TheInitializer

@TheInitializer โอ้ใช่ขอบคุณ!
Daniel

หากคุณเปลี่ยนสายimport urllibเป็นimport urllib as uคุณสามารถบันทึก 3 ไบต์
sonrad10

@ sonrad10 เป็นไงเหรอ? มันกลายเป็นความยาวเท่ากันใช่มั้ย
Daniel


3

Javascript (ES5), 46 44 40 38 33 ไบต์

_=>parseInt($('#answers').text())

บันทึก 5 ไบต์ด้วยIsmael Miguel

หมายเหตุ:นี่ค่อนข้างช้าและจะไม่ทำงานหากคุณมีผู้ใช้งาน PPCG-Design


นี่ไม่ต่างจากคำตอบ Javascript อื่น ๆมากนัก อันที่จริงนี่เป็นเพียงเวอร์ชันที่ไม่ได้รับการปรับปรุงให้ดีที่สุด
Ismael Miguel

@IsmaelMiguel 1. มันถูกเขียนต่อหน้าอีกอันหนึ่งและ 2 มันใช้องค์ประกอบก่อนที่จะซ่อนสิ่งหนึ่งที่คำตอบอื่นใช้
ASCII เท่านั้น

ยุติธรรมพอสมควร แต่คุณสามารถใช้parseInt($('#answers').text())ซึ่งจะทำงาน ที่ช่วยให้คุณประหยัดไม่กี่ไบต์
Ismael Miguel

3

CJam, 15 ไบต์

lg"2>"/1=A>S/0=

คาดว่า URL ของหน้านี้เป็นอินพุต

มันทำงานอย่างไร

l                e# Read a line (the URL) from STDIN.
 g               e# Fetch the resource the URL points to.
  "2>"/          e# Split the source at occurrences of "2>".
       1=        e# Select the second chunk, i.e., everything between the first
                 e# <h2> and the first </h2>.
         A>      e# Discard the first 10 characters (a linefeed and 9 tabs).
           S/0=  e# Split at spaces and select the first chunk.

1

171 bytes ทุบตี + 3 คีย์คม

lynx -cfg=<(echo PRINTER:Answercount:grep [0-9]*.Answers %s|less:FALSE:999') http://codegolf.stackexchange.com/questions/96298/how-many-answers-does-this-question-have

Count Count เพิ่มขึ้นจาก 5 เป็น 6 ;-)
Roman Czyborra

1
คุณสามารถแทนที่http:// ... ด้วยhttp://codegolf.stackexchange.com/q/96298
JungHwan Min

ฉันต้องการให้การเปลี่ยนเส้นทางเป็นศูนย์เพราะฉันยังคงสิ้นหวังแม้จะเป็น 171-49 = 122
Roman Czyborra

1

99 ไบต์ sh + curl + jq + stackexchange API

curl -s --compressed api.stackexchange.com/questions/96298/answers?site=codegolf|jq .items\|length

เมื่อใช้ API ฉันสามารถหลีกเลี่ยงปัญหาที่เกี่ยวข้องกับการจัดรูปแบบหน้าและ html ได้ น่าเสียดายที่ 60 ไบต์ของคำตอบของฉันคือ url golfed สูงสุดสำหรับการสืบค้น api นี้โดยเฉพาะและอีก 13 ไบต์สำหรับ curl เพื่อ unzip ผลลัพธ์ของการค้นหาเนื่องจาก stackexchange ปฏิเสธที่จะให้บริการข้อมูลที่ไม่มีการบีบอัดผ่าน api

"ตรรกะ" จริงมาจากการดัด api เพื่อขอคำตอบ json กับคำตอบของโพสต์นี้ ที่คลายซิปแล้วจึงส่งไปยัง jq ซึ่งเป็น json parser ซึ่งแยกอาร์เรย์ "items" และส่งออกความยาวของมัน

คุณสามารถเข้าใกล้ api ได้อย่างน่าประทับใจเพียงแค่ส่งกลับจำนวนคำตอบ แต่จากสิ่งที่ฉันได้มากับคุณคุณไม่สามารถรับ 100% ของวิธีการที่นั่น

101 ไบต์เพื่อส่งกลับ {"ทั้งหมด":}:

curl -s --compressed api.stackexchange.com/questions/96298/answers?site=codegolf&filter=!)V)MSZJUgX_

พารามิเตอร์ตัวกรองในการสืบค้น api นั้นมีประสิทธิภาพมาก แต่มันสั้นเกินไปที่จะให้โซลูชัน "just curl a url" อาจมีจุดศูนย์กลางตรงกลางที่นี่ซึ่งคุณสามารถรับการตอบสนองที่สั้นลงแล้วนับจำนวนบรรทัดหรือแยกตัวเลข แต่น่าเสียดายที่สตริงตัวกรองเป็นความยาวชุดและคำสั่ง jq ที่ต้องการมีประสิทธิภาพมากขึ้นแล้ว


เย็น. โปรดทราบว่าคุณสามารถบันทึกไบต์จำนวนมากโดยใช้ตัวย่อ URL และเพิ่มตัวเลือก -L เพื่อให้การติดตามการเปลี่ยนเส้นทางของขด ตัวอย่างเช่นcurl -sL --compressed bit.ly/2ebw404|jq .total
sergioFC


@Dennis Didn't knew that, thank you.
sergioFC


1

Java, 230 269-41=228 bytes

interface A{static void main(String[]a)throws Exception{System.out.print(new java.util.Scanner(new java.net.URL("http://codegolf.stackexchange.com/q/96298").openStream()).useDelimiter("\\Z").next().replaceAll("\n|\r","").replaceAll("^.+?\\s+(\\d+) Answers.+$","$1"));}}

(Only counts non-deleted answers)


0

JavaScript + jQuery (already included in page), 20 bytes

+$('h2>span').text()

นี่คือโปรแกรมที่ต้องการดำเนินการในคอนโซลสำหรับหน้าปัจจุบัน (เปิดด้วยF12) มันส่งออกจำนวนคำตอบโดยไม่มีเครื่องหมายคำพูด สามารถใช้งานได้กับ Chrome, Firefox, IE11 และ Edge มันควรจะทำงานในเบราว์เซอร์อื่น ๆ แต่ฉันได้ทดสอบเฉพาะในรายการที่ระบุไว้

แตกต่างจากโซลูชั่น JavaScript อื่น ๆ ที่นี่ก็เป็นโปรแกรมด้วยตัวเองมากกว่าการแสดงออกของฟังก์ชั่นการใช้ES6 ลูกศรสัญกรณ์ฟังก์ชั่น แตกต่างจากโซลูชันเหล่านั้นซึ่งจะสร้างเอาต์พุต (โดยไม่ใส่เครื่องหมายอัญประกาศ) ในคอนโซลที่มีจำนวนคำตอบ (แทนที่จะเป็นเพียงนิพจน์ฟังก์ชันที่ไม่สร้างเอาต์พุต) การสร้างเอาต์พุตขึ้นอยู่กับคุณลักษณะในคอนโซลของเบราว์เซอร์แต่ละตัวที่ค่าของนิพจน์นั้นเป็นเอาต์พุตหลังจากที่นิพจน์นั้นได้รับการประเมิน

สิ่งนี้อาศัยเฉพาะ<span>เพจที่มีพาเรน<h2>ต์ซึ่งเป็นองค์ประกอบหนึ่งที่มีจำนวนคำตอบเป็นเนื้อหาข้อความ หลังจากการทดลองปรากฏขึ้นนี้จะเป็นกรณีและจะไม่ปรากฏไปได้ที่จะจงใจสร้าง<h2>กับ<span>เด็กโดยใช้เครื่องมือแก้ไข: แทรกอย่างชัดเจนทุก<span>องค์ประกอบจะปล้นและไม่มีMarkdownที่ใช้ในการแลกเปลี่ยนชุดสร้างที่เกิดขึ้นจริงภายใน<span> <h2>หากใครบางคนสามารถแสดงให้เห็นถึงกรณีที่หน้าสามารถจัดการกับ'h2>span'ตัวเลือกที่ไม่ซ้ำกันแล้วจะต้องมีการแก้ไข

หากประเมินเป็นสตริงแทนที่จะเป็นตัวเลขก็ยอมรับได้

JavaScript + jQuery (รวมอยู่ในหน้าแล้ว), 19 ไบต์

$('h2>span').text()

However, while this does not evaluate to include "", in all tested consoles it produces output which is enclosed within "". I read Filip Haglund's comments on the question as precluding this output.


0

R, 80 bytes

Answer is based on searching the vector returned by readLines using regular expressions. I'm guessing that this could be broken by text in comments/answers (possibly even my own). Will delete if so. Also the pattern could also be gofled but not sure if that would increase the likelihood of getting a false value.

x=readLines(scan(,""));regmatches(x,regexpr("(?<=answerCount\">).*?(?=<)",x,,T))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.