Скільки відповідей на це запитання?


16

Напишіть програму або функцію, яка виводить цілу кількість відповідей на це запитання. Ваше рішення все одно має працювати, оскільки додано більше відповідей.

Мови, що працюють у веб-переглядачі, можуть бути запущені з консолі js, перебуваючи на цій сторінці. Інакше вам, мабуть, доведеться завантажити цю сторінку. Багатомовні рішення, наприклад, wgetкористування сторінкою та аналіз її за допомогою grepнормально. Просто підведіть підсумки командного рядка та всього використовуваного джерела.

Це код гольфу; найкоротша відповідь у байтах виграє.

Редагувати:

Дозвольмо хоча б одне виникнення URL-адреси цієї сторінки не вважатись ні вхідним, ні в вихідному. Немає скорочувачів URL, не зберігаються дані як параметри отримання тощо. Цитати навколо URL-адреси, якщо потрібно, все ще враховуються. Прийняття URL-адреси як введення також чудово. Якщо ви хочете видалити частину URL-адреси, наприклад /how-many-answers..., ви можете, але це, ймовірно, вам не допоможе.


Зараз, мабуть, занадто пізно, щоб прийняти рішення про це, але чи повинен підрахунок включати видалені відповіді?
Денніс

2
@Dennis Я не бачу видалених відповідей, тому я б сказав, що ніхто не повинен їх хвилювати. Порахуйте їх, якщо хочете. Я не буду їх рахувати, оскільки не можу їх побачити.
Філіп Хаглунд

Чи може функція приймати URL як вхідний? Чи враховуватиметься тоді вхід до рахунку?
JungHwan Min

2
@FilipHaglund, я думаю, що було б найрозумніше, щоб кількість байтів URL у коді була віднята від загального підрахунку чи була прийнята як вхідна, тому що такий спосіб унеможливлює використання мов, які не працюють у браузері. мати шанс на перемогу
Даніель

1
Це (хоча для деяких мов, які приймають дані, може вимагати ще більше байтів) або дозволяти віднімати лише, якщо URL-адреса http://...з’являється дослівно у вихідному коді.
Денніс

Відповіді:


14

Javascript + jQuery, 23 байти

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

Не могло це не вдатися, якщо h2>spanв тілі проблеми є?
Мартін Ендер

3
Може бути добре додати це до відповіді потім. :)
Мартін Ендер

1
Чи можна це зробити запущеним ("фрагмент запуску коду")?
Рудольф Джелін

13
Зауважте, що для цього використовується jQuery, який не є чистим JavaScript (тобто його не слід позначати як "JavaScript"). Використання бібліотеки, яка входить до верхньої частини мови, має бути принаймні чітко вказаною. Я не сперечаюся проти використання jQuery, просто про це слід сказати.
Макіен

1
Мережа @Makyen StackOverflow використовує jQuery. Питання говорить: "Мови, які працюють у браузері, можуть бути запущені з консолі js, перебуваючи на цій сторінці." jQuery не потрібно завантажувати, оскільки він вже був. Можливо, тому jQuery не вказаний.
Ісмаїл Мігель

4

Математика, 33 байти

Length@Import[#,"Data"][[4,2]]-1&

Вхід - URL-адреса цієї сторінки.


4

Python 2, 120 байт, 79 без вхідної 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, о, дякую!
Даніель

Якщо змінити рядок import urllibна, import urllib as uтоді ви можете зберегти 3 байти
sonrad10

@ sonrad10, як так? Це закінчується однакової довжини, ні?
Даніель

3

Javascript, 67 байт

alert($(".answers-subheader").children().first().children().html())

Цей погляд виглядає занадто довго


3

Javascript (ES5), 46 44 40 38 33 байт

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

5 байт збережено завдяки Ісмаелю Мігелю

Примітка. Це досить повільно і не спрацює, якщо у вас є сценарій користувача PPCG-Design.


Це не сильно відрізняється від інших відповідей Javascript . Насправді це просто неоптимізована його версія.
Ісмаїл Мігель

@IsmaelMiguel 1. Він був написаний перед іншим та 2. Він використовує елемент перед прихованим, який використовує інша відповідь.
Лише ASCII

Справедливо. Але можна використовувати parseInt($('#answers').text()), що спрацює. Це заощадить вам кілька байт.
Ісмаїл Мігель

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 байт bash + 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

Граф-граф щойно піднявся з 5 до 6 ;-)
Роман Чиборра

1
Ви можете замінити http:// ... наhttp://codegolf.stackexchange.com/q/96298
JungHwan Min

Я віддав перевагу нульовому переадресації, оскільки я все ще безнадійно відставатиму навіть зі 171-49 = 122.
Роман Чиборра

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-адрес для цього конкретного запиту api, а ще 13 байт - для згортання результату запиту, оскільки stackexchange відмовляється подавати нестиснені дані через api.

Справжня "логіка" походить від згортання api, щоб попросити відповідь json з відповідями на це повідомлення. Це розпаковується і потім передається в jq, json-аналізатор, який витягує масив "items" та виводить його довжину.

Ви можете наблизитись до того, що api просто поверне кількість відповідей, але з того, що я міг би придумати, ви не змогли пройти 100% шляху туди, а наближення обійдеться дорожче байтів, ніж просто проходження його через jq.

101 байт для повернення {"total":}:

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

Параметр фільтра в api-запитах дуже потужний, але він не вистачає для надання рішення "просто завити URL-адресу". Тут може бути середнє місце, де ви можете отримати коротший відгук, а потім просто порахувати рядки або витягнути число, але, на жаль, рядки фільтра мають задану довжину, і потрібна команда jq вже була більш ефективною.


Класно. Зауважте, що ви можете зберегти багато байтів, використовуючи скорочувач URL-адрес і додавши параметр -L, щоб згорнути наступні переадресації; наприкладcurl -sL --compressed bit.ly/2ebw404|jq .total
sergioFC


@ Деніс цього не знав, дякую.
sergioFC

1

PHP, 76 (код) + 41 (URL) = 117 байт

preg_match_all('<h2>(.*) answers<span',file_get_contents("http://codegolf.stackexchange.com/q/96298"),$o);
echo $o[0];

1

Java, 230 269-41 = 228 байт

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"));}}

(Враховує лише не видалені відповіді)


0

JavaScript + jQuery (вже входить у сторінку), 20 байт

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

Це програма, призначена для виконання в консолі для поточної сторінки (відкрито з F12). Він виводить кількість відповідей без лапок. Він працює в Chrome, Firefox, IE11 та Edge. Він повинен працювати в інших браузерах, але я протестував його лише в тих, що перераховані.

На відміну від інших рішень JavaScript тут, це програма сама по собі, а не вираз функції, використовуючи позначення функції ES6 стрілки . Крім того, на відміну від цих рішень, він фактично виробляє вихід (без лапок) на консолі з кількістю відповідей (а не просто вираз функції, який не дає результату). Виведення результату залежить від функції на консолі кожного браузера, що значення виразу виводиться після того, як це вираження було оцінено.

Це спирається на єдиний <span>на сторінці з батьком, який є <h2>елементом, є тим, що містить кількість відповідей як його текстовий вміст. Після експериментів це, мабуть, так і не представляється можливим навмисне створити анкету <h2>з <span>дитиною за допомогою редактора: всі явно вставлені <span>елементи знімаються, а відмітка Markdown , як використовується у Stack Exchange, не створює фактичного <span>в межах <h2>. Якщо хтось може продемонструвати випадок, коли сторінкою можна маніпулювати таким чином, що 'h2>span'селектор вже не є унікальним, то це потрібно буде переглянути.

Якщо оцінювання на рядок замість числа є прийнятним, значить

JavaScript + jQuery (вже входить у сторінку), 19 байт

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

Однак, хоча це не включається "", у всіх тестованих консолях він створює вихід, який укладений всередині "". Я читав коментарі Філіпа Хаглунда щодо цього питання, як це перешкоджає цьому результату.


0

R, 80 байт

Відповідь ґрунтується на пошуку вектора, повернутого за readLinesдопомогою регулярних виразів. Я здогадуюсь, що це може бути порушене текстом у коментарях / відповідях (можливо, навіть моїх власних). Якщо так, то буде видалено. Також шаблон може бути гофрованим, але не впевнений, чи збільшить це ймовірність отримання помилкового значення.

x=readLines(scan(,""));regmatches(x,regexpr("(?<=answerCount\">).*?(?=<)",x,,T))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.