Qual seria sua reputação sem o representante?

16

Nesse desafio, você calculará qual seria sua reputação se o limite de reputação não existisse no PPCG.

Todos podem acessar os dados brutos para alterações de reputação no endereço: codegolf.stackexchange.com/reputation . Os dados brutos seguem uma configuração como esta (estas são as primeiras linhas da minha versão da 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       

A primeira linha é irrelevante para esse desafio (mostra o número total de votos que você recebeu em todas as suas respostas e perguntas). A segunda linha mostra o "bônus de associação". Se você não tiver o bônus, essa linha não estará lá.

Após essas duas linhas (ou uma, se não houver bônus), você terá uma lista de alterações de reputação por pergunta, juntamente com um resumo de todo o representante ganho / perdido em cada dia. Você também receberá uma lista da reputação total que possui no final desse dia. Apenas os dias em que sua reputação mudou são mostrados nesta lista.

Existem identificadores no início de cada linha (exceto as linhas de resumo diárias). Eles representam os seguintes motivos potenciais de mudança de reputação:

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)

Os números ausentes ( 5,6,7,10,11,13,14,15não afetam a reputação).


Seu desafio é calcular a reputação que você teria, se não fosse o limite de reputação.


Como você fará isso:

Salve o conteúdo codegolf.stackexchange.com/reputationcomo texto simples localmente ou em algum outro local de sua escolha (isso ocorre porque você precisa fazer login para acessar as informações). Você pode recuperar os dados diretamente do site, se preferir, embora eu assuma que isso será muito mais demorado.

Resuma todas as mudanças positivas e negativas na reputação. Os votos que não resultam em uma alteração na reputação (devido ao limite de representantes) são mostrados assim (observe os colchetes, em vez de parênteses regulares):

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

Você deve incluir o representante que receberia se não fosse o limite.

O número da postagem 106125é uma pergunta , enquanto 106088é uma resposta . Como você pode ver, não há como diferenciar os dois usando apenas os dados fornecidos na tabela. Portanto, você deve acessar o site ( codegolf.stackexchange.com) para verificar se uma postagem é uma pergunta ou resposta. Você também pode usar a API para isso.


Regras:

  • Todos devem poder executar seu script para:
    • Você deve incluir todos os diferentes tipos de alteração de reputação, mesmo que você não a tenha encontrado.
    • O código deve funcionar mesmo que você não tenha recebido o bônus de associação (a linha não estará lá se você não tiver)
    • Você pode usar idiomas não livres (Mathematica, MATLAB etc.), desde que outros com uma licença possam executar o código.
    • Você não precisa fornecer os dados brutos, pois todos podem testar seu código em sua própria versão da página (será interessante se você compartilhar os resultados, mas isso é opcional).
  • Você pode usar a API ou acessar o site diretamente. encurtadores de URL não são permitidos.
  • Se houver outras maneiras de encontrar o representante que você teria sem a tampa do representante, não poderá usá-lo. Você precisa usar os dados da página mencionada.

Observe que as postagens que são respostas têm uma extensão diferente para o 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

Resultado:

A saída deve ser:

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

O formato é opcional, [15440,16202]é aceito. Rep w cappode ser obtido diretamente da linha: ** total rep 15440 :)próximo à parte inferior da página.


Isso é portanto o código mais curto em bytes vence.

Stewie Griffin
fonte
Relacionado.
precisa saber é
4
751. Rasgue a mim e à minha vida
Christopher
2
lol Eu nunca bati no repcap antes.
HyperNeutrino
Só para esclarecer, sua reputação com limite é a soma do seu representante total e a reputação muda entre colchetes?
Graviton 5/05

Respostas:

3

Perl 5 (com ondulação), 209 + 1 (-n sinalizador) = 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 do fato de que o URL para uma resposta tem um #. Pode adicionar uma -sbandeira depois curlse você não gostar do stderr sendo inundado com barras de progresso. Eu apreciaria alguém com uma página de reputação mais variada testando - não posso ter certeza de que não perdi nada.

A minha é 421 e seria 451, a propósito.

Chris
fonte
Eu nunca usei Perl antes e não consigo ver de onde você obtém os dados brutos. Onde coloco os dados brutos se quiser testar isso? Nota: Estou usando Strawberry no Windows 10. Não tenho Unix ou OS X. E como eu chamaria isso?
Stewie Griffin
@ Stewie Griffin Lê os dados brutos do stdin. O código é de uma linha e deve ser executado de forma semelhante perl -nE 'code' < filename. Você pode ter que fazer algumas citações e escapar de coisas diferentes no Windows, não estou muito familiarizado com o ambiente lá.
7777 Chris
Otimização pequena: você pode remover o https://se você passar a -Lbandeira de onda, permitindo-lhe seguir o redirecionamento 301
markasoftware
@ Markasoftware Isso seguirá os vários redirecionamentos para a página real, certo? Como é, meu código analisa o redirecionamento 301 em /codegolf//a/$2vez da própria página.
7777 Chris
Recebo Search pattern not terminated at -e line 1.quando tento isso. Simplesmente colo o código inteiro usando o que você escreveu no comentário ( perl -nE ..), enquanto o arquivo é salvo no diretório de trabalho atual. Alguma idéia do porquê disso?
Stewie Griffin