Há alguns meses, tivemos uma discussão sobre meta sobre como aumentar a reputação concedida por upvotes em perguntas. Aqui estão os princípios básicos do nosso sistema de reputação atual para votos: 1
- Uma pergunta votada
U
vale 5 reputação. - Uma resposta upvote
u
vale 10 reputação. - Uma pergunta ou resposta com voto negativo
d
vale -2 de reputação.
Houve muitas sugestões diferentes para um novo sistema, mas o atual mais popular é idêntico ao acima, mas com upvotes de perguntas escalados para 10 repetições. Esse desafio consiste em calcular quanto mais você ganharia se esse sistema fosse implementado.
Vejamos um exemplo. Se a atividade de votação fosse UUUUuuuuUUUUUduuudUU
, você ganha 121 no sistema atual:
U x 4 x 5 = 20 = 20
u x 4 x 10 = 40 = 60
U x 5 x 5 = 25 = 85
d x 1 x -2 = -2 = 83
u x 3 x 10 = 30 = 113
d x 1 x -2 = -2 = 111
U x 2 x 5 = 10 = 121
Total: 121
Mas a mesma atividade ganharia 176 sob o novo sistema:
U x 4 x 10 = 40 = 40
u x 4 x 10 = 40 = 80
U x 5 x 10 = 50 = 130
d x 1 x -2 = -2 = 128
u x 3 x 10 = 30 = 158
d x 1 x -2 = -2 = 156
U x 2 x 10 = 20 = 176
Total: 176
Você obteria 55 representantes neste cenário.
Até agora, calcular o representante alterado não é tão difícil; basta contar o número de se U
multiplicar por 5. Felizmente, o sistema de representantes não é tão simples: também existe um limite de representantes , que é a maior reputação que você pode ganhar com votos em um dia UTC. Isso está definido como 200 em todos os sites.
Além disso, o limite de representantes se aplica em tempo real: se você já ganhou 196 representantes e recebeu uma resposta positiva, agora terá 200 representantes. Se você receber um voto negativo logo após isso, os 2 representantes serão subtraídos de 200, então você terá 198 representantes.
Com a atividade de votação UUUuuuuUUUUuuuuUUUUUUUd
, você ganharia 148 representantes no sistema atual:
U x 3 x 5 = 15 = 15
u x 4 x 10 = 40 = 55
U x 4 x 5 = 20 = 75
u x 4 x 10 = 40 = 115
U x 7 x 5 = 35 = 150
d x 1 x -2 = -2 = 148
Total: 148
Mas você ganharia 198 sob o novo sistema:
U x 3 x 10 = 30 = 30
u x 4 x 10 = 40 = 70
U x 4 x 10 = 40 = 110
u x 4 x 10 = 40 = 150
U x 7 x 10 = 70 = 200 (rep capped)
d x 1 x -2 = -2 = 198
Total: 198
Assim, o aumento é de 50 repetições .
Desafio
Seu desafio é escrever um programa ou função que utilize uma sequência de linhas múltiplas e produza o representante total que seria ganho com o algoritmo acima. Cada linha conta como 1 dia UTC, portanto, o limite de representantes se aplica apenas uma vez por linha.
Casos de teste
(Uma ou mais linhas de entrada, seguidas pelo número inteiro de saída.)
UUUuudd
15
UUUuUUUUuUuuUUUUudUUUUuU
57
UUUuUUUUuUuuUUUUudUUUUuU
UUUuudd
72
uuuuuuu
uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
uuuuuuuuuuuuuuuuuuuu
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
0
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
5
(empty string)
0
UUUuuuuuUUUuuUUUUUUuuuUUUuuUUUUuuuuUUUdddddddUU
4
UUUuuuuuUUUuuUUUUUUuuuUUUuuUUUUuuuuUUUdddddddUU
UuuUUUudUU
UUUUUUUUUuuuuuuUUUUUUuuUUUUUUuuuuuUUUUUUUUuUUUuuuuUUUUuuuUUUuuuuuuUUUUUUUUuuUUUuuUU
UUu
U
d
UU
UUUUUUUUUUUU
119
Este é o código golf, pelo que o código mais curto em bytes vence.
Desafios relacionados: Calcule a soma acumulada limitada de um vetor , Calcule sua reputação de troca de pilhas
1 Esta é uma versão altamente simplificada do sistema. Você também perde 1 representante por votar com uma resposta negativa, e não existem votos positivos, que são estranhos e seguem regras próprias ; e votos não declarados, que nem sequer têm regras a seguir .
fonte
Respostas:
Perl,
10491 + 2 = 93 bytesRequer a
-p
bandeira:Demolir:
fonte
ES6, 104 bytes
Calcula o representante antes e depois de cada linha. Meu primeiro uso de
eval
!fonte
Haskell,
9893 bytesGraças ao BlackCap, você ainda pode jogar golfe. Agora, penso em experimentar o lambda em desafios posteriores, agora.
As três primeiras linhas são a pontuação, a & b é a pontuação, f é a diferença eg é a função que simplifica a especificação.
Uso:
fonte
Lua, 196 bytes
Este programa usa um único argumento de várias linhas como entrada e imprime a diferença total em rep '
Eu assumi que tenho permissão para solicitar uma nova linha à direita na entrada, se não estiver, aqui está uma solução de 204 bytes que não precisa dela.
Ungolfed e explicações
fonte