O desafio
Seu objetivo é escrever o programa mais curto possível, com uma lista de eventos (como upvote, downvote, etc) e retornar a reputação do usuário e os privilégios que ele conquistou.
Que tipo de eventos?
Aqui está um gráfico dos eventos, listados em ordem de reputação conquistada:
-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
Que tipo de privilégios?
Aqui está uma lista de privilégios, em ordem de reputação necessária.
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
A entrada (no STDIN) será uma lista de eventos, um por linha, exatamente como eles aparecem no primeiro gráfico (exceto pela quantidade de reputação). Uma linha em branco representa o fim da entrada. Aqui está um exemplo (deve haver uma linha em branco no 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
Resultado
A primeira linha de saída (para STDOUT) deve nomear a quantidade de repetições acumuladas. Cada linha seguinte deve listar um privilégio conquistado, exatamente como eles aparecem e na mesma ordem que o segundo gráfico. A saída esperada para a entrada acima:
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
Regras, restrições e notas
Isso é código de golfe. Aplicam-se regras de código padrão de golfe.
(EDIT: Como tive duas entradas que acessam arquivos, gostaria de salientar que o tamanho do arquivo precisa ser adicionado ao comprimento do código como parte das regras padrão para o código de golfe)