Какой была бы ваша репутация без шапки?

16

В этом задании вы рассчитаете, какой будет ваша репутация, если в PPCG не существует предела репутации.

Каждый может получить доступ к необработанным данным для изменения репутации по адресу: codegolf.stackexchange.com/reputation . Необработанные данные следуют такой настройке (это первые несколько строк моей версии страницы.

total votes: 2955
-- bonuses   (100)
 2     37663 (10)
-- 2014-09-11 rep +110  = 111       
 2     41751 (10)
-- 2014-11-23 rep +10   = 121       
 2     41751 (10)
 2     41751 (10)
-- 2014-11-24 rep +20   = 141       

Первая строка не имеет значения для этой задачи (она показывает общее количество голосов, полученных вами за все ваши ответы и вопросы). Вторая строка показывает «Бонус ассоциации». Если у вас нет бонуса, то этой линии вообще не будет.

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

В начале каждой строки есть идентификаторы (кроме ежедневных сводных строк). Они представляют следующие возможные причины изменения репутации:

1 : Accept (+2 if you accept, +15 if your answer is accepted)
2 : Upvote (+5 for question, +10 for answer)
3 : Downvote (-1 if you downvote answer, -2 if you get downvoted)
4 : Offensive (-100)
8 : Give bounty
9 : Receive bounty
12: Spam (-100)
16: Approved edit (+2)

Недостающие цифры ( 5,6,7,10,11,13,14,15не влияют на репутацию).


Ваша задача состоит в том, чтобы рассчитать репутацию, которую вы имели бы, если бы не предел репутации.


Как вы это сделаете:

Сохраните содержимое в codegolf.stackexchange.com/reputationвиде простого текста локально или в другом месте по вашему выбору (это потому, что вам необходимо войти в систему для доступа к информации). Вы можете получить данные с веб-сайта напрямую, если хотите, хотя я предполагаю, что это будет намного дольше.

Суммируйте все положительные и отрицательные изменения репутации. Голоса, которые не приводят к изменению репутации (из-за ограничения репутации), отображаются следующим образом (обратите внимание на квадратные скобки вместо обычных скобок):

 2    106125 [0]
 2    106125 [0]
 3    106125 [-2]
 2    106088 [2]
 2    106125 [0]
 2    106088 [0]

Вы должны включить представителя, которого бы вы получили, если бы не кепка.

Сообщение номер 106125является вопросом , а 106088является ответом . Как вы можете видеть, невозможно определить разницу между ними, используя только данные, приведенные в таблице. Поэтому вы должны зайти на сайт ( codegolf.stackexchange.com), чтобы проверить, является ли сообщение вопросом или ответом. Вы также можете использовать API для этого.


Правила:

  • Каждый должен иметь возможность запустить ваш скрипт так:
    • Вы должны включить все различные типы изменений репутации, даже если вы сами не сталкивались с этим.
    • Код должен работать, даже если вы не получили бонус Ассоциации (линия не будет там, если вы не получили)
    • Вы можете использовать несвободные языки (Mathematica, MATLAB и т. Д.), Если только другие пользователи с лицензией могут запускать код.
    • Вам не нужно предоставлять необработанные данные, поскольку каждый может протестировать ваш код на своей собственной версии страницы (будет интересно, если вы поделитесь результатами, но это не обязательно).
  • Вы можете использовать API или получить доступ к веб-сайту напрямую. URL-сокращения не допускаются.
  • Если есть другие способы найти представителя, который бы у вас был без шапки, вы не сможете его использовать. Вы должны использовать данные с указанной страницы.

Обратите внимание, что сообщения, которые являются ответами, получают другое расширение URL:

/codegolf/106088        // Answer: Notice the end of the url
/codegolf/106079/detect-ms-windows/106088#106088

/codegolf/106079/       // Question: Notice the end of the url
/codegolf/106079/detect-ms-windows

Выход:

Выход должен быть:

Rep w cap: 15440
Rep w/o cap: 16202

Формат не обязателен, [15440,16202]принимается. Rep w capможно взять прямо с линии: ** total rep 15440 :)в нижней части страницы.


Это поэтому выигрывает самый короткий код в байтах.

Стьюи Гриффин
источник
4
751. Разорви меня и мою жизнь
Кристофер
2
LOL Я никогда не попал в repcap раньше.
HyperNeutrino
Просто чтобы уточнить, ваша репутация с кепкой - это сумма вашего общего представителя, и репутация меняется в квадратных скобках?
Гравитон

Ответы:

3

Perl 5 (с curl), 209 + 1 (-n флаг) = 210 байт

if(/([0-9]+)\s*([0-9]+) \[([0-9]*)/){$_=`curl /codegolf//a/$2`;@p=(2,5,-1);$p[15]=2;@s=(13,5,-1);$x=$1;$r+=($p[--$x]//-100)-$3;$r+=$s[$x]if/#/;};$t=$1 if/([0-9]+) :/;END{say$t,$",$r+$t}

Злоупотребляет тем фактом, что URL для ответа есть #в нем. Можно добавить -sфлаг после, curlесли вам не нравится, когда stderr наводнен индикаторами выполнения. Я был бы признателен кому-то с более разнообразной страницей репутации, тестирующей это - я не могу быть уверен, что ничего не пропустил.

У меня 421, а между прочим 451.

Крис
источник
Я никогда раньше не использовал Perl, и я не вижу, откуда вы берете необработанные данные. Куда мне поместить необработанные данные, если я хочу это проверить? Примечание: я использую Strawberry в Windows 10. У меня нет Unix или OS X. И как бы я это назвал?
Стьюи Гриффин
@ Stewie Griffin Читает необработанные данные со стандартного ввода. Код является однострочным, и должен быть выполнен примерно так perl -nE 'code' < filename. Возможно, вам придется сделать несколько других цитат и экранирования вещей в Windows, я не очень знаком с окружающей средой там.
Крис
Небольшая оптимизация: вы можете убрать флаг, https://если вы передадите -Lфлаг curl, позволяя ему следовать перенаправлению 301
markasoftware
@Markasoftware Это будет следовать за несколькими перенаправлениями на настоящую страницу, правда? На самом деле мой код анализирует перенаправление 301, /codegolf//a/$2а не саму страницу.
Крис
Я получаю, Search pattern not terminated at -e line 1.когда я пытаюсь это. Я просто вставляю весь код, используя то, что вы написали в comment ( perl -nE ..), сохраняя файл в текущем рабочем каталоге. Есть идеи, почему это может быть?
Стьюи Гриффин