Задача:
Вы замечательный программист и отвечающий за Stackoverflow, и вы решаете ответить на каждый вопрос с вознаграждением за Stackoverflow. Вы настолько хороши, что вам удается получить все награды по всем вопросам. В то время как вы ожидаете, что представитель прибудет, вы пишете программу, которая выходит и выясняет, какова общая сумма повторений во всех этих наградах.
Правила:
- Когда беги,
- Ваша программа будет перемещаться по избранной вкладке в переполнении стека.
- Это соскребет ценность каждой награды,
- Затем он сложит его и покажет общее
- Он должен загружать данные из любого места на SO (и только на SO), но я бы порекомендовал использовать https://stackoverflow.com/questions?pagesize=50&sort=featured , так как это всего около 10 страниц.
- Это код-гольф , поэтому выигрывает самый короткий код
Ответы:
JavaScript -
176133130108106Редактировать 1: обрезать некоторые селекторы и использовать
?:
предложение от Google Closure Compiler (через @Sirko - спасибо)Редактировать 2: инициализировать
s
внутриd
и инициализироватьt
как0
вместо""
Редактировать 3: понял, что на самом деле мне не нужно нацеливаться на конкретный контейнер и я могу смести весь документ, который избавляется от кучки
.find
вызовов и ненужного селектора (плюс переменная, содержащая его)Редактировать 4: засунуть
t
инициализатор в вызов функции, чтобы избежать;
(он все равно будет поднят наверх), и раздвиньте функцию до одного оператора (объедините два оператора в один внутри условия троичного оператора), чтобы удалить{}
Примечание : я не уверен, что это мошенничество, но это должно быть запущено из окна консоли браузера, уже указывающего на
http://stackoverflow.com/questions?page=1&sort=featured
. Это опирается на тот факт, что JQuery и соответствующие ссылки на пейджинговые ссылки доступны на самой странице. Кроме того, он работает только в Firefox, а не в IE или Chrome.Вывод (на момент публикации):
Разнесено / прокомментировано :
источник
s=" #mainbar";d=$(s);t="";function a(){d.find(".bounty-indicator").each(function(){t+=this.innerHTML});(u=d.find("[rel=next]")[0])?d.load(u.href+s,a):alert(eval(t))}a();
169 - использовал Google Closure Compiler.(
пареном, это действительно работает?Python -
232,231,195,183,176174Разбирает HTML из https://stackoverflow.com/questions?sort=featured с использованием регулярных выражений.
Верхняя граница
range
вfor
цикл должен бытьnumber of pages + 1
или иначе код вызоветHTTPError
из 404 - х. Количество результатов на странице по умолчанию равно 15, что и используется в коде (исключение?pagesize=50
экономит на символах и столь же эффективно).Благодаря @Gabe за совет по дальнейшему снижению количества символов.
Golfed :
Выход (на момент публикации):
Un-golfed :
Вот несколько не играемая в гольф версия, которая должна быть немного легче для чтения и понимания.
источник
for
цикла и уменьшить его до 176:import urllib,re;print sum(sum(map(int,re.findall(r"<.*>\+(\d+)<.*>",urllib.urlopen("http://stackoverflow.com/questions?sort=featured&page=%u"%i).read())))for i in range(1,33))
+
после него число. Например, заголовок вопроса может соответствовать этому формату.Реболь -
164133130 (139 с проверкой 404)Разбирает HTML, используя
parse
язык Rebol. Проверяет первые 98 страниц. Я понял, что у меня такое же ограничение, как и у решения на python - слишком много повторов вызывают ошибки 404 и останавливают выполнение. Спасибо @rgchris за множество улучшений! Обновлено, чтобы проверить до 98 страниц.s: 0 repeat n 99[parse read join http://stackoverflow.com/questions?sort=featured&page= n[15[thru{>+}copy x to{<}(s: s + do x)]]]s
С проверкой ошибок на 404 с (139):
s: 0 repeat n 99[attempt[parse read join http://stackoverflow.com/questions?sort=featured&page= n[15[thru{>+}copy x to{<}(s: s + do x)]]]]s
Тест
объяснение
Rebol игнорирует пробелы, поэтому вы можете поместить все это в одну строку, если захотите. PARSE принимает два входа, и первый аргумент (
read join ...
) довольно понятен. Но вот некоторые комментарии к инструкциям разбора диалекта, в более традиционном отступе:источник
n
значению ... в настоящее время есть 28 страниц с наградами (для размера страницы 15). Хотя это не повлияет на количество символов.Рубин, 260
Использует Stack Exchange API.
Вывод (по состоянию на время исходного поста):
Я не
&pagesize=100
считаю количество символов, потому что оно работает без него, но я просто добавил это для удобства при тестировании. Если вы удалите это, он сделает то же самое (за исключением того, что съедает больше квоты и занимает немного больше времени).источник
require
s можно заменить на-r
флаг командной строки.Ребму -
108107Тест (в 19:05 AEST)
Rebmu выглядит довольно загадочно, но, когда вы освоите его , он станет вполне читабельным. Давайте начнем с того, что размешаем и раскладываем правильно.
Rebmu это диалект Rebol, так что вы можете увидеть сходство в решении. Rebmu пока не может уменьшить размер каждого утверждения, но это развивающийся язык. Еще раз спасибо @rgchris за улучшения моей первой попытки.
источник
ti
(целое число!) будет безопаснее, чемdo
в Rebmu, без изменения длины кода.Рубин - 197
Укороченная версия:
Человек дружественная версия:
И ответ -
39700
Рубин с параметрами скрипта - 139
Чтобы запустить это из Bash просто введите
источник
require
s можно заменить на-r
флаг командной строки.PHP - 121 байт
Использование регулярного выражения 'eval' модификатор, чтобы избежать использования
array_sum
или аналогичные. Кажется, самое короткое решение среди действительных записей.источник
e
модификатор был устаревшим PHP 5.5, но это все равно полезно для игры в гольф , тем не менее.PHP,
134,131, 127while($q=array_sum(preg_filter('#.*>\+#',0,file("http://stackoverflow.com/questions?sort=featured&page=".++$n))))$s+=$q;echo$s;
Будет проходить по всем страницам,
pagesize
не будет сохранять байтыGET
s.Очень Очень Грязно, но ... пользуясь
PHP
"недостатками"!echo
while
останавливается на заданииRegEx
замены является строка, начинающаяся с суммы вознагражденияarray_sum()
складывает строки$n
а также$s
инициализируются, но начинать с нуля эквивалентно. как начиная с нуляисточник
Баш 206
возможна оптимизация, слишком ленив
результат:
источник
seq 1 11
может быть уменьшен доseq 11
.Javascript -
129119110107 символовРЕДАКТИРОВАТЬ: НЕДЕЙСТВИТЕЛЬНЫЙ ОТВЕТ! Это обрабатывает только «Популярные вопросы», которые имеют лишь небольшую их часть. Ответ Alconja является более действительным.
Выполнить на https://stackoverflow.com/?tab=featured в окне консоли. Основано на решении Alconja.
Гольф это немного больше, удалив ненужные пробелы.
Используется eval для удаления вызова функции, очистки еще 9 символов.
убрал еще несколько ненужных пробелов.
источник
Ява, 540 символов
Предупреждение: количество активных бонусов составляет ~ 470. Этот код будет обращаться к странице в stackoverflow столько раз. Это может привести к проблемам с ними из-за большого количества запросов данных.
Мой вывод был
23400
, но когда я запустил код @ TonyH, я получил37550
. Плохие новости.Красивый код:
Это работает просто. Он читает из URL-адреса,
http://stackoverflow.com/questions"
чтобы определить количество вопросов, которые имеют награды (примечание: если число увеличивается, программа завершается ошибкой, но если она падает, она работает нормально). Он ищет этот номер , используя регулярное выражение:b.>(\\d+)
. До настоящего времени это работало во всех тестах, но если кто-то задал вопрос, соответствующий этому регулярному выражению, это может не сработать.Затем мы открываем URL
http://stackoverflow.com/questions?pagesize=1&sort=featured&page=
+current question #
. Другими словами, мы открываем новую страницу для каждого выбранного вопроса и устанавливаем только количество вопросов1
, чтобы получить их все. Репутация всегда будет совпадатьion.>.(\\d+)
, поэтому я использую ее, чтобы найти. Я разделил операцию на две части, чтобы я мог дешево проверить, не уменьшилось ли количество вопросов (т.е. возвращаемая строка не является целым числом).Затем мы суммируем всю репутацию и печатаем ее.
На моей машине потребовалось около 3 минут и 20 секунд.
Кто-нибудь знает, почему он не печатает правильный номер?
источник
C # - 407
Использование Stackoverflow.com. То же, что и ниже, за исключением отсутствия распаковки Gzip и другого регулярного выражения.
Тест
Странно, получая другое значение, чем ниже.
C # - 496
Это использует api.stackexchange, который является gzipped и json.
Unminified:
Тест
Размер страницы по умолчанию:
PAGESIZE = 100:
источник
JQuery 191
Он работает где угодно в stackexchange (и многих других сайтах), нет необходимости находиться на определенной странице, как в @ Alconja / @ NateKerkhofs answers
источник
$
PHP - 139
Golfed:
Ungolfed - 147
Простой
file_get_contents
/preg_match
/array_sum
Тест:
источник
Баш 174
На основании https://codegolf.stackexchange.com/a/25180/7664 :
источник
pagesize=50&
и просто зациклить больше (я думаю, размер страницы по умолчанию, если 15).Python (174 символа):
Развернемся с ответом Python выше (не хватает кармы, чтобы комментировать):
Запросы вместо urllib сокращает 2 символа.
источник
Рубин (176 символов):
Следуя примеру Тони Х. с использованием жестко закодированных номеров страниц, вот что я получил:
дал мне 35300 на момент написания.
источник