Quelle serait votre réputation sans le plafond des représentants?

16

Dans ce défi, vous calculerez votre réputation si le plafond de réputation n'existait pas sur PPCG.

Tout le monde peut accéder aux données brutes pour les changements de réputation sur l'adresse: codegolf.stackexchange.com/reputation . Les données brutes suivent une configuration comme celle-ci (ce sont les premières lignes de ma version de la page.

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       

La première ligne n'est pas pertinente pour ce défi (elle indique le nombre total de votes que vous avez reçus sur toutes vos réponses et questions). La deuxième ligne affiche le "Bonus d'association". Si vous n'avez pas le bonus, cette ligne ne sera plus là.

Après ces deux (ou une, si aucun bonus) lignes, vous aurez une liste des changements de réputation par question, ainsi qu'un résumé de tous les représentants gagnés / perdus chaque jour. Vous obtiendrez également une liste de la réputation totale que vous avez à la fin de cette journée. Seuls les jours où votre réputation a changé sont affichés dans cette liste.

Il y a des identifiants au début de chaque ligne (sauf les lignes récapitulatives quotidiennes). Ceux-ci représentent les raisons de changement de réputation potentielles suivantes:

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)

Les numéros manquants ( 5,6,7,10,11,13,14,15n'affectent pas la réputation).


Votre défi consiste à calculer la réputation que vous auriez, sans le plafond de réputation.


Comment allez-vous faire cela:

Enregistrez le contenu de codegolf.stackexchange.com/reputationsous forme de texte brut localement, ou à un autre endroit de votre choix (c'est parce que vous devez être connecté pour accéder aux informations). Vous pouvez récupérer les données directement sur le site Web si vous préférez, bien que je suppose que ce sera beaucoup plus long.

Résumez tous les changements de réputation positifs et négatifs. Les votes qui n'entraînent pas de changement de réputation (en raison du plafond des représentants) sont affichés comme ceci (notez les crochets, au lieu des parenthèses régulières):

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

Vous devez inclure le représentant que vous auriez reçu sans le plafond.

Numéro de message 106125est une question , tout 106088est une réponse . Comme vous pouvez le voir, il n'y a aucun moyen de faire la différence entre les deux en utilisant uniquement les données fournies dans le tableau. Vous devez donc accéder au site ( codegolf.stackexchange.com) pour vérifier si un message est une question ou une réponse. Vous pouvez également utiliser l'API pour cela.


Règles:

  • Tout le monde doit pouvoir exécuter votre script pour:
    • Vous devez inclure tous les différents types de changement de réputation, même si vous ne l'avez pas rencontré vous-même.
    • Le code doit fonctionner même si vous n'avez pas reçu le bonus Association (la ligne ne sera pas là si vous ne l'avez pas)
    • Vous pouvez utiliser des langues non libres (Mathematica, MATLAB etc.), tant que d'autres avec une licence peuvent exécuter le code.
    • Vous n'êtes pas obligé de fournir les données brutes, car tout le monde peut tester votre code sur sa propre version de la page (ce sera intéressant si vous partagez les résultats, mais c'est facultatif).
  • Vous pouvez utiliser l'API ou accéder directement au site Web. les raccourcisseurs d'url ne sont pas autorisés.
  • S'il existe d'autres façons de trouver le représentant que vous auriez sans le capuchon de représentant, vous ne pouvez pas l'utiliser. Vous devez utiliser les données de la page mentionnée.

Notez que les messages qui sont des réponses reçoivent une extension différente de l'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

Production:

La sortie doit être:

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

Le format est facultatif, [15440,16202]est accepté. Rep w cappeut être pris directement à partir de la ligne: ** total rep 15440 :)près du bas de la page.


Il s'agit de donc le code le plus court en octets l'emporte.

Stewie Griffin
la source
4
751. Rip me and my life
Christopher
2
lol je n'ai jamais frappé le repcap avant.
HyperNeutrino
Juste pour clarifier, votre réputation avec cap est la somme de votre total de représentants, et la réputation change entre crochets?
Graviton

Réponses:

3

Perl 5 (avec curl), 209 + 1 (indicateur -n) = 210 octets

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}

Abuse le fait que l'url d'une réponse contient un #. Peut ajouter un -sindicateur après curlsi vous n'aimez pas que stderr soit inondé de barres de progression. J'apprécierais quelqu'un avec une page de réputation plus variée le testant - je ne peux pas être sûr de ne rien avoir manqué.

Le mien est 421 et serait 451, soit dit en passant.

Chris
la source
Je n'ai jamais utilisé Perl auparavant, et je ne vois pas d'où vous tirez les données brutes. Où dois-je mettre les données brutes si je veux tester cela? Remarque: j'utilise Strawberry sous Windows 10. Je n'ai pas Unix ou OS X. Et comment pourrais-je appeler cela?
Stewie Griffin
@Stewie Griffin Il lit les données brutes de stdin. Le code est à une ligne et devrait être exécuté quelque chose comme perl -nE 'code' < filename. Vous devrez peut-être faire des citations différentes et échapper à des choses sur Windows, je ne suis pas très familier avec l'environnement là-bas.
Chris
Petite optimisation: vous pouvez supprimer le https://si vous passez le -Ldrapeau à curl, lui permettant de suivre la redirection 301
markasoftware
@Markasoftware Cela suivra les multiples redirections vers la page réelle, non? En l'état, mon code analyse la redirection 301 /codegolf//a/$2plutôt que la page elle-même.
Chris
Je reçois Search pattern not terminated at -e line 1.quand j'essaye. Je colle simplement tout le code en utilisant ce que vous avez écrit dans le commentaire ( perl -nE ..), tout en ayant le fichier enregistré dans le répertoire de travail actuel. Une idée pourquoi cela pourrait être?
Stewie Griffin