Truth can only be found in one place: the code.
-- Robert C. Martin
This test is intended for candidates applying to Software Engineering positions at Carpool.
You are welcome to use JavaScript or TypeScript for the implementation.
- Git
- A development environment for React Native
- Quake game (attatched in this repository)
Create a React Native project to parse the Quake log file.
The log file was generated by a Quake 3 Arena server, including a great deal of information for every match.
The project should implement the following functionalities:
- Read the log file
- Group the game data of each match
- Collect kill data
- render on react a native screen
21:42 Kill: 1022 2 22: <world> killed Isgalamido by MOD_TRIGGER_HURT
The player "Isgalamido" died because he was wounded and fell from a height enough to kill him.
2:22 Kill: 3 2 10: Isgalamido killed Dono da Bola by MOD_RAILGUN
The player "Isgalamido" killed the player "Dono da Bola" using the Railgun weapon.
Example of grouped information for each match:
"game_1": {
"total_kills": 45,
"players": ["Dono da bola", "Isgalamido", "Zeh"],
"kills": {
"Dono da bola": 5,
"Isgalamido": 18,
"Zeh": 20
}
} Additional notes:
- When
<world>
kills a player, that player loses -1 kill score. - Since
<world>
is not a player, it should not appear in the list of players or in the dictionary of kills. - The counter
total_kills
includes player and world deaths.
Create a script that prints a report (grouped information) for each match and a player ranking.
Generate a report of deaths grouped by death cause for each match.
Death causes (extracted from source code) // 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;
"game-1": {
"kills_by_means": {
"MOD_SHOTGUN": 10,
"MOD_RAILGUN": 2,
"MOD_GAUNTLET": 1,
...
}
The final output must be displayed as a very basic layout on the user app, with three sections:
- Games
- Player Rankings
- Total Deaths by Means (if included)
Create a React Native screen that displays this information as described. The developer must send a link with all of their commits on a git service (GitHub, GitLab, Bitbucket, etc.).