Skip to content

Instantly share code, notes, and snippets.

@cloudwalk-tests
Last active July 19, 2024 06:53
Show Gist options
  • Save cloudwalk-tests/704a555a0fe475ae0284ad9088e203f1 to your computer and use it in GitHub Desktop.
Save cloudwalk-tests/704a555a0fe475ae0284ad9088e203f1 to your computer and use it in GitHub Desktop.
Software Engineer - Project

Software Engineer test

Truth can only be found in one place: the code.
-- Robert C. Martin

1. Introduction

This test is intended for candidates applying to Software Engineering positions at CloudWalk.

You are welcome to use a programming language that you are comfortable with.

2. Requirements

  • Git
  • A development environment
  • Quake game log

3. Tasks

3.1. Log parser

Create a project to parse the Quake log file.

The log file was generated by a Quake 3 Arena server, including a great deal of information of every match.

The project should implement the following functionalities:

  • Read the log file
  • Group the game data of each match
  • Collect kill data

Example

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:

  1. When <world> kill a player, that player loses -1 kill score.
  2. Since <world> is not a player, it should not appear in the list of players or in the dictionary of kills.
  3. The counter total_kills includes player and world deaths.

3.2. Report

Create a script that prints a report (grouped information) for each match and a player ranking.

3.3. Plus

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;

Example

"game-1": {
  "kills_by_means": {
    "MOD_SHOTGUN": 10,
    "MOD_RAILGUN": 2,
    "MOD_GAUNTLET": 1,
    ...
  }
}

4. Deliverable

You can deliver the code by sharing the repository with the interviewer in any public service (Github, BitBucket, Gitlab), or by sending the zip git repository. Align with the interviewer which best fits you.

Enjoy :)

@cloudwalk-tests
Copy link
Author

Please, do not comment here.

If you have questions, you can reach out to your point of contact at CloudWalk.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment