-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDefaultScoreFormula.cpp
More file actions
33 lines (26 loc) · 1.3 KB
/
DefaultScoreFormula.cpp
File metadata and controls
33 lines (26 loc) · 1.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <algorithm>
#include <string>
#include <map>
using namespace std;
bool IsParameterMissing(const map<string, int>& score_params, const string& parameterName) {
return score_params.find(parameterName) == score_params.end();
}
extern "C" int calc_score(const map<string, int>& score_params)
{
if (IsParameterMissing(score_params, "actual_position_in_competition")) return -1;
if (IsParameterMissing(score_params, "winner_num_steps")) return -1;
if (IsParameterMissing(score_params, "this_num_steps")) return -1;
if (IsParameterMissing(score_params, "sum_dirt_in_house")) return -1;
if (IsParameterMissing(score_params, "dirt_collected")) return -1;
if (IsParameterMissing(score_params, "is_back_in_docking")) return -1;
int position, afterWinner, dirtLeft, dockScore;
position = score_params.at("actual_position_in_competition");
afterWinner = score_params.at("winner_num_steps") - score_params.at("this_num_steps");
dirtLeft = score_params.at("sum_dirt_in_house") - score_params.at("dirt_collected");
dockScore = score_params.at("is_back_in_docking") == 1 ? 50 : -200;
//robot finished successfully
if (dirtLeft == 0 && dockScore == 50) position = min(position, 4);
else position = 10;
int score = 2000 - (position - 1) * 50 + afterWinner * 10 - dirtLeft * 3 + dockScore;
return max(0, score);
}