Construa um parser para o arquivo de log games.log.
O arquivo games.log é gerado pelo servidor de quake 3 arena. Ele registra todas as informações dos jogos, quando um jogo começa, quando termina, quem matou quem, quem morreu pq caiu no vazio, quem morreu machucado, entre outros.
O parser deve ser capaz de ler o arquivo, agrupar os dados de cada jogo, e em cada jogo deve coletar as informações de morte.
21:42 Kill: 1022 2 22: <world> killed Isgalamido by MOD_TRIGGER_HURT
O player "Isgalamido" morreu pois estava ferido e caiu de uma altura que o matou.
2:22 Kill: 3 2 10: Isgalamido killed Dono da Bola by MOD_RAILGUN
O player "Isgalamido" matou o player Dono da Bola usando a arma Railgun.
Para cada jogo o parser deve gerar algo como:
game_1: {
total_kills: 45;
players: ["Dono da bola", "Isgalamido", "Zeh"]
kills: {
"Dono da bola": 5,
"Isgalamido": 18,
"Zeh": 20
}
}
- Quando o
<world>
mata o player ele perde -1 kill. <world>
não é um player e não deve aparecer na lista de players e nem no dicionário de kills.total_kills
são os kills dos games, isso inclui mortes do<world>
.
Após construir o parser construa um script que imprima um relatório de cada jogo (simplemente imprimindo o hash) e um ranking geral de kills por jogador.
Gerar um relatório de mortes agrupando pelo motivo da morte, por partida.
Causas de morte (retirado do código fonte)
// means of death
typedef enum {
MOD_UNKNOWN,
MOD_SHOTGUN,
MOD_GAUNTLET,
MOD_MACHINEGUN,
MOD_GRENADE,
MOD_GRENADE_SPLASH,
MOD_ROCKET,
MOD_ROCKET_SPLASH,
MOD_PLASMA,
MOD_PLASMA_SPLASH,
MOD_RAILGUN,
MOD_LIGHTNING,
MOD_BFG,
MOD_BFG_SPLASH,
MOD_WATER,
MOD_SLIME,
MOD_LAVA,
MOD_CRUSH,
MOD_TELEFRAG,
MOD_FALLING,
MOD_SUICIDE,
MOD_TARGET_LASER,
MOD_TRIGGER_HURT,
#ifdef MISSIONPACK
MOD_NAIL,
MOD_CHAINGUN,
MOD_PROXIMITY_MINE,
MOD_KAMIKAZE,
MOD_JUICED,
#endif
MOD_GRAPPLE
} meansOfDeath_t;
Exemplo:
"game-1": {
kills_by_means: {
"MOD_SHOTGUN": 10,
"MOD_RAILGUN": 2,
"MOD_GAUNTLET": 1,
"XXXX": N
}
}
- Use a linguagem que você tem mais habilidade.
- Faça testes unitários, suite de testes bem organizados.
- Use git e tente fazer commits pequenos e bem descritos.
- Faça pelo menos um README explicando como fazer o setup, uma explicação da solução proposta, o mínimo de documentação para outro desenvolvedor entender seu código.
- Siga o que considera boas práticas de programação, coisas que um bom desenvolvedor olhe no seu código e não ache "feio" ou "ruim".
HAVE FUN :)