¿Cuál sería tu reputación sin el límite de repeticiones?


16

En este desafío, calculará cuál sería su reputación, si el límite de reputación no existiera en PPCG.

Todos pueden acceder a los datos sin formato para los cambios de reputación en la dirección: codegolf.stackexchange.com/reputation . Los datos en bruto siguen una configuración como esta (estas son las primeras líneas de mi versión de la página.

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 primera línea es irrelevante para este desafío (muestra el número total de votos que ha recibido en todas sus respuestas y preguntas). La segunda línea muestra el "Bono de asociación". Si no tiene la bonificación, esa línea no estará allí en absoluto.

Después de estas dos (o una, si no hay bonificación) líneas, tendrá una lista de cambios de reputación por pregunta, junto con un resumen de todas las repeticiones ganadas / perdidas en cada día. También obtendrá una lista de la reputación total que tiene al final de ese día. Solo los días en los que cambió su reputación se muestran en esta lista.

Hay identificadores al comienzo de cada línea (excepto las líneas de resumen diario). Estos representan los siguientes posibles motivos de cambio de reputación:

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)

Los números que faltan ( 5,6,7,10,11,13,14,15no afectan la reputación).


Su desafío es calcular la reputación que tendría, si no fuera por el límite de reputación.


Cómo harás esto:

Guarde el contenido codegolf.stackexchange.com/reputationcomo texto sin formato localmente, o en algún otro lugar de su elección (esto es porque necesita iniciar sesión para acceder a la información). Puede recuperar los datos del sitio web directamente si lo prefiere, aunque supongo que será mucho más largo.

Resuma todos los cambios de reputación positivos y negativos. Los votos que no resultan en un cambio de reputación (debido al límite de repeticiones) se muestran así (observe los corchetes, en lugar de paréntesis regulares):

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

Debe incluir el representante que habría recibido si no fuera por el límite.

El número de publicación 106125es una pregunta , mientras que 106088es una respuesta . Como puede ver, no hay forma de saber la diferencia entre los dos utilizando solo los datos dados en la tabla. Por lo tanto, debe acceder al sitio web ( codegolf.stackexchange.com) para verificar si una publicación es una pregunta o respuesta. También puede usar la API para esto.


Reglas:

  • Todos deben poder ejecutar su script para que:
    • Debe incluir todos los diferentes tipos de cambio de reputación, incluso si no lo ha encontrado usted mismo.
    • El código debe funcionar incluso si no ha recibido el bono de Asociación (la línea no estará allí si no lo ha hecho)
    • Puede usar idiomas no libres (Mathematica, MATLAB, etc.), siempre que otros con una licencia puedan ejecutar el código.
    • No tiene que proporcionar los datos sin procesar, ya que todos pueden probar su código en su propia versión de la página (sin embargo, será interesante si comparte los resultados, pero eso es opcional).
  • Puede usar la API o acceder al sitio web directamente. No se permiten acortadores de URL.
  • Si hay otras formas de encontrar el representante que tendría sin el límite de repeticiones, entonces no puede usarlo. Debe usar los datos de la página mencionada.

Tenga en cuenta que las publicaciones que son respuestas obtienen una extensión diferente de la 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

Salida:

La salida debe ser:

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

El formato es opcional, [15440,16202]se acepta. Rep w capse puede tomar directamente de la línea: ** total rep 15440 :)cerca de la parte inferior de la página.


Este es el por lo que gana el código más corto en bytes.



44
751. Rip me and my life
Christopher

2
jajaja, nunca he golpeado el repcap antes.
HyperNeutrino

Solo para aclarar, ¿su reputación con límite es la suma de su representante total, y la reputación cambia entre corchetes?
Graviton

Respuestas:


3

Perl 5 (con curl), 209 + 1 (-n flag) = 210 bytes

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}

Abusa del hecho de que la url de una respuesta tiene una #. Puede agregar una -sbandera después curlsi no desea que stderr se inunde con barras de progreso. Agradecería que alguien con una página de reputación más variada lo pruebe. No puedo estar seguro de que no me perdí nada.

El mío es 421 y sería 451, por cierto.


Nunca he usado Perl antes, y no puedo ver de dónde sacas los datos sin procesar. ¿Dónde pongo los datos brutos si quiero probar esto? Nota: Estoy usando Strawberry en Windows 10. No tengo Unix u OS X. ¿Y cómo llamaría a esto?
Stewie Griffin

@Stewie Griffin Lee los datos en bruto de stdin. El código es de una sola línea y debe ejecutarse de manera similar perl -nE 'code' < filename. Puede que tenga que hacer algunas citas diferentes y escapar de las cosas en Windows, no estoy muy familiarizado con el entorno allí.
Chris

Pequeña optimización: puede eliminar el https://si pasa la -Lbandera a curl, permitiendo que siga la redirección 301
markasoftware

@Markasoftware Eso seguirá los múltiples redireccionamientos a la página real, ¿verdad? Tal como están las cosas, mi código analiza la redirección 301 en /codegolf//a/$2lugar de la página en sí.
Chris

Me sale Search pattern not terminated at -e line 1.cuando intento esto. Simplemente pego todo el código usando lo que escribió en el comentario ( perl -nE ..), mientras guardo el archivo en el directorio de trabajo actual. ¿Alguna idea de por qué podría ser eso?
Stewie Griffin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.