5.3 KiB
5.3 KiB
System prototype
The prototype must be able to work with a configuration file and a set of external events of a certain format. Solution should contain golang (1.22 or newer) source file/files and unit tests (optional)
Description
A player is participating in a challenge. The goal is to completely clear a dungeon. The player navigates through floors and fights monsters. We need to process the events and compile the information into a final report
Rules
- Only registered players are allowed to participate in the challenge
- The challenge ends if:
- The player leaves the dungeon
- The player cannot continue the challenge
- The dungeon opening time has expired
- Player is dead (health drops to 0)
- When entering the boss's floor, the player receives a notification
- The boss floor does not contain any monsters
- The dungeon is considered complete if:
- All floors are cleared of monsters
- The boss is defeated
- A floor is considered complete when all monsters or the boss have been killed; any time spent in that floor is no longer counted
- The player's health cannot exceed 100
Events
- All events occur sequentially in time. (Time of event N+1) >= (Time of event N)
- Time format [HH:MM:SS]. Trailing zeros are required in input and output
- The ExtraParam parameter can be a string containing multiple words.
Incoming events
| EventID | ExtraParam | Comment |
|---|---|---|
| 1 | Player [id] registered |
|
| 2 | Player [id] entered the dungeon |
|
| 3 | Player [id] killed the monster |
|
| 4 | Player [id] went to the next floor |
|
| 5 | Player [id] went to the previous floor |
|
| 6 | Player [id] entered the boss's floor |
|
| 7 | Player [id] killed the boss |
|
| 8 | Player [id] left the dungeon |
|
| 9 | reason |
Player [id] cannot continue due to [reason] |
| 10 | health |
Player [id] has restored [health] of health |
| 11 | damage |
Player [id] recieved [damage] of damage |
Outgoing events
| EventID | ExtraParam | Comment |
|---|---|---|
| 31 | Player [id] disqualified |
|
| 32 | Player [id] is dead |
|
| 33 | Player [id] makes imposible move [eventID] |
Example
[14:00:00] 1 1
[14:00:00] 2 1
[14:10:00] 2 2
[14:10:00] 3 2
[14:11:00] 2 5
[14:12:00] 3 3
[14:14:00] 2 3
[14:27:00] 2 11 60
[14:29:00] 2 11 50
[14:40:00] 1 2
[14:41:00] 1 3
[14:44:00] 1 11 50
[14:45:00] 1 3
[14:48:00] 1 4
[14:48:00] 1 6
[14:49:00] 1 11 25
[14:49:02] 1 10 80
[14:50:00] 1 11 65
[14:59:00] 1 7
[15:04:00] 1 8
Output
[14:00:00] Player [1] registered
[14:00:00] Player [2] registered
[14:10:00] Player [2] entered the dungeon
[14:10:00] Player [3] is disqualified
[14:11:00] Player [2] makes imposible move [5]
[14:14:00] Player [2] killed the monster
[14:27:00] Player [2] recieved [60] of damage
[14:29:00] Player [2] recieved [50] of damage
[14:29:00] Player [2] is dead
[14:40:00] Player [1] entered the dungeon
[14:41:00] Player [1] killed the monster
[14:44:00] Player [1] recieved [50] of damage
[14:45:00] Player [1] killed the monster
[14:48:00] Player [1] went to the next floor
[14:48:00] Player [1] entered the boss's floor
[14:49:00] Player [1] recieved [25] of damage
[14:49:02] Player [1] has restored [80] of health
[14:50:00] Player [1] recieved [65] of damage
[14:59:00] Player [1] killed the boss
[15:04:00] Player [1] left the dungeon
Configuration (json)
- Floors - Number of floors in the dungeon
- Monsters - Number of monsters on each floor of the dungeon
- OpenAt - Dungeon opening time
- Duration - Time until the dungeon closes in hours
Example
{
"Floors": 2,
"Monsters": 2,
"OpenAt": "14:05:00",
"Duration": 2
}
States
| State | Comment |
|---|---|
| SUCCESS | All floors are cleared |
| FAIL | The player died or the dungeon is not considered completed |
| DISQUAL | The player cannot continue or has not completed registration |
Final report
- State
SUCCESS/FAIL/DISQUAL - Player ID
- Time spent in the dungeon (all the time until the player left the dungeon or the dungeon closed)
- Average time to clear a floor of monsters (the boss's floor is not included in the calculation)
- Time to kill the boss
- Player health at the end of the trial
Example
Final report:
[SUCCESS] 1 [00:24:00, 00:05:00, 00:11:00] HP:35
[FAIL] 2 [00:19:00, 00:00:00, 00:00:00] HP:0
[DISQUAL] 3 [00:00:00, 00:00:00, 00:00:00] HP:100