Сколько ответов у этого вопроса?

16

Напишите программу или функцию, которая выводит целое число ответов на этот вопрос. Ваше решение должно все еще работать, поскольку добавлено больше ответов.

Языки, которые запускаются в браузере, могут быть запущены из консоли js на этой странице. В противном случае вам, вероятно, придется скачать эту страницу. Многоязычные решения, например, обработка wgetстраницы и ее синтаксический анализ - это grepнормально. Просто суммируйте командную строку и весь используемый источник.

Это код гольф; кратчайший ответ в байтах побеждает.

РЕДАКТИРОВАТЬ:

Допустим, что не более одного экземпляра URL этой страницы не будет учитываться ни в качестве входных данных, ни в источнике. Нет сокращений URL, нет данных, сохраняемых в качестве параметров получения и т. Д. Кавычки вокруг URL, если необходимо, все еще учитываются. Принимая URL-адрес в качестве ввода тоже хорошо. Если вы хотите удалить какую-то часть URL, например /how-many-answers..., можете, но это, вероятно, вам не поможет.

Филип Хаглунд
источник
Вероятно, уже слишком поздно принимать решение по этому вопросу, но должен ли счет включать удаленные ответы?
Деннис
2
@ Денис Я не вижу удаленных ответов, поэтому я бы сказал, что никто не должен беспокоиться о них. Подсчитайте их, если хотите. Я не буду считать их, так как я не могу их видеть.
Филипп Хаглунд
Может ли функция принять URL-адрес в качестве входа? Будет ли этот вклад засчитываться в счет байтаунта?
JungHwan Мин
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

Mathematica, 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
@TheInitializer, о да, спасибо!
Даниил
Если вы измените строку import urllibна, import urllib as uто вы можете сохранить 3 байта
sonrad10
@ sonrad10, как так? В итоге получается одинаковой длины, нет?
Даниил
3

Javascript, 67 байт

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

Это выглядит слишком долго

TuxCrafting
источник
3

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

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

5 байтов сэкономлено благодаря Исмаилу Мигелю

Примечание: это довольно медленно и не будет работать, если у вас есть пользовательский скрипт PPCG-Design.

ASCII-только
источник
Это не сильно отличается от другого ответа 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 байт Баш + 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 Мин
Я предпочел нулевую переадресацию, так как я все еще буду безнадежно отставать даже с 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 байтов для curl для распаковки результата запроса, потому что 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 уже была более эффективной.

LinusKrom
источник
Здорово. Обратите внимание, что вы можете сохранить много байтов, используя сокращение URL и добавив опцию -L, чтобы curl следовал за перенаправлениями; напримерcurl -sL --compressed bit.ly/2ebw404|jq .total
sergioFC
1
Сокращения URL
Деннис
@ Денис Не знал этого, спасибо.
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"));}}

(Учитывает только не удаленные ответы)

SuperJedi224
источник
0

JavaScript + jQuery (уже включен в страницу), 20 байт

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

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

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

Это полагается только <span>на страницу с родительским <h2>элементом, который является элементом, содержащим количество ответов в качестве текстового содержимого. После экспериментов, похоже, это так, и не представляется возможным преднамеренно создать объект <h2>с <span>дочерним <span>элементом с помощью редактора: все явно вставленные элементы удаляются, и никакая разметка , используемая в Stack Exchange, не создает факт в <span>пределах <h2>. Если кто-то может продемонстрировать случай, когда страницей можно манипулировать так, чтобы 'h2>span'селектор больше не был уникальным, то это нужно будет пересмотреть.

Если приемлемо вычисление строки вместо числа, то

JavaScript + jQuery (уже включен в страницу), 19 байт

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

Тем не менее, хотя это не дает оценки для включения "", во всех протестированных консолях он выдает выходные данные, которые заключены внутри "". Я прочитал комментарии Филиппа Хаглунда по этому вопросу как исключающие этот вывод.

Makyen
источник
0

R, 80 байт

Ответ основан на поиске вектора, возвращаемого с readLinesпомощью регулярных выражений. Я предполагаю, что это может быть разбито на текст в комментариях / ответах (возможно, даже на мой). Удалят если так. Кроме того, шаблон также может быть одурачен, но не уверен, что это увеличит вероятность получения ложного значения.

x=readLines(scan(,""));regmatches(x,regexpr("(?<=answerCount\">).*?(?=<)",x,,T))
Billywob
источник