Hace un par de meses, tuvimos una discusión sobre meta sobre aumentar la reputación otorgada por los votos a favor en las preguntas. Aquí están los conceptos básicos de nuestro sistema de reputación actual para los votos: 1
- Una votación positiva
U
vale 5 reputación. - Un voto de respuesta
u
vale 10 reputación. - Un downvote de preguntas o respuestas
d
vale -2 reputación.
Ha habido muchas sugerencias diferentes para un nuevo sistema, pero el actual más popular es idéntico al anterior, pero con los votos a favor de la pregunta escalados a +10 rep. Este desafío consiste en calcular la cantidad de repeticiones que ganaría si este sistema se implementara.
Veamos un ejemplo. Si la actividad de votación fuera UUUUuuuuUUUUUduuudUU
, entonces ganaría 121 con el sistema actual:
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
Pero la misma actividad ganaría 176 con el nuevo 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
Ganarías 55 repeticiones de este escenario.
Hasta ahora, calcular el representante cambiado no es tan difícil; solo cuente el número de U
sy multiplique por 5. Afortunadamente, el sistema de repeticiones no es tan simple: también hay un límite de repeticiones , que es la mayor reputación que puede obtener de los votos en un día UTC. Esto se establece en 200 en todos los sitios.
Además, el límite de repeticiones se aplica en tiempo real: si ya ha obtenido 196 repeticiones y recibe un voto de respuesta, ahora tendrá 200 repeticiones. Si obtiene un voto negativo justo después de eso, las 2 repeticiones se restarán de 200, por lo que tendrá 198 repeticiones.
Con la actividad de votación UUUuuuuUUUUuuuuUUUUUUUd
, ganaría 148 repeticiones bajo el sistema actual:
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
Pero ganarías 198 con el nuevo 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
Por lo tanto, el aumento es de 50 rep .
Desafío
Su desafío es escribir un programa o función que tome una cadena de varias líneas y genere la repetición total que se obtendría con el algoritmo anterior. Cada línea cuenta como 1 día UTC, por lo que el límite de repeticiones solo se aplica una vez por línea.
Casos de prueba
(Una o más líneas de entrada, seguidas del número entero de salida).
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 es el código de golf, por lo que gana el código más corto en bytes.
Desafíos relacionados: calcule la suma acumulativa limitada de un vector , calcule su reputación de intercambio de pila
1 Esta es una versión altamente simplificada del sistema. También pierdes 1 repetición por rechazar una respuesta, y existen unupvotes, que son raros y siguen sus propias reglas ; y undownvotes, que ni siquiera tienen reglas a seguir .
fuente
Respuestas:
Perl,
10491 + 2 = 93 bytesRequiere la
-p
bandera:Descompostura:
fuente
ES6, 104 bytes
Calcula el representante anterior y posterior para cada línea. Mi primer uso de
eval
!fuente
Haskell,
9893 bytesGracias a BlackCap por jugar golf más allá. Ahora, pienso probar lambda en desafíos posteriores, ahora.
Las primeras 3 líneas son la puntuación, a & b es la puntuación, f es la diferencia y g es la función que amplía la especificación.
Uso:
fuente
Lua, 196 bytes
Este programa toma un solo argumento de varias líneas como entrada e imprime la diferencia total en rep '
Supuse que se me permite solicitar una nueva línea final en la entrada, si no lo estoy, aquí hay una solución de 204 Bytes que no la necesita.
Sin golfos y explicaciones
fuente