El reto
Su objetivo es escribir el programa más corto posible que tomará una lista de eventos (como votos positivos, negativos, etc.) y devolverá la reputación del usuario y los privilegios que se ha ganado.
¿Qué tipo de eventos?
Aquí hay una tabla de los eventos, enumerados en orden de reputación ganada:
-15 answer unaccepted
-10 answer unupvoted
-5 question unupvoted
-2 answer downvoted
-2 question downvoted
-2 unaccept answer
-1 downvote answer
+1 join website
+1 undownvote answer
+2 accept answer
+2 question undownvoted
+2 answer undownvoted
+5 question upvoted
+10 answer upvoted
+15 answer accepted
+100 association bonus
¿Qué tipo de privilegios?
Aquí hay una lista de privilegios, en orden de reputación requerida.
1 create posts
5 participate in meta
10 remove new user restrictions
10 create wiki posts
15 vote up
15 flag posts
20 talk in chat
50 comment everywhere
75 set bounties
100 edit community wiki
100 create chat rooms
125 vote down
150 create tags
200 retag questions
250 view close votes
500 cast close and reopen votes
750 established user
1000 edit questions and answers
1000 create gallery chat rooms
1250 create tag synonyms
1500 approve tag wiki edits
2000 access to moderator tools
3500 protect questions
4000 trusted user
Entrada
La entrada (en STDIN) será una lista de eventos, uno por línea, exactamente como aparecen en el primer gráfico (excepto por la cantidad de reputación). Una línea en blanco representa el final de la entrada. Aquí hay un ejemplo (debe haber una línea en blanco al final):
join website
association bonus
answer upvoted
answer upvoted
question upvoted
answer accepted
answer upvoted
accept answer
unaccept answer
question unupvoted
accept answer
question upvoted
Salida
La primera línea de salida (a STDOUT) debe nombrar la cantidad de repeticiones acumuladas. Cada línea después de eso debe enumerar un privilegio obtenido, exactamente como aparecen y en el mismo orden que el segundo gráfico. La salida esperada para la entrada anterior:
153 reputation
1 create posts
5 participate in meta
10 remove new user restrictions
10 create wiki posts
15 vote up
15 flag posts
20 talk in chat
50 comment everywhere
75 set bounties
100 edit community wiki
100 create chat rooms
125 vote down
150 create tags
Reglas, restricciones y notas
Este es el código de golf. Se aplican las reglas estándar del código de golf.
(EDITAR: dado que he tenido dos entradas que acceden a los archivos, me gustaría señalar que la longitud del archivo debe agregarse a la longitud del código como parte de las reglas estándar para el golf de código)