-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCalculationSettings.cs
More file actions
140 lines (128 loc) · 5.08 KB
/
CalculationSettings.cs
File metadata and controls
140 lines (128 loc) · 5.08 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GradesAssignment
{
public enum enResultGradeCalcMethod
{
None = -1,
/// <summary>
/// Это место и выше (округление "вниз")
/// </summary>
Floor = 0,
/// <summary>
/// Это место и выше ("математическое" округление до целых)
/// </summary>
Round = 1,
}
public enum enCompetitionStatus
{
None = -1,
/// <summary>
/// На соревнованиях не могут быть выполнены МС и КМС
/// </summary>
BeforeMasterAndMasterCouldNotBeAssigned = 0,
/// <summary>
/// Первенство мира,
/// Юношеские Олимпийские игры
/// </summary>
YourthWorldChampionship_YourthOlimpicGames,
/// <summary>
/// Всемирная универсиада
/// </summary>
WorldUniversiade,
/// <summary>
/// Первенство Европы
/// </summary>
YourthEuropeanChampionship,
/// <summary>
/// Другие международные спортивные соревнования, включенные в ЕКП
/// </summary>
OtherInternationalCompetitions,
/// <summary>
/// Первенство мира среди студентов
/// </summary>
StudentsWorldChampionship,
/// <summary>
/// Чемпионат России
/// </summary>
RussianChampionship,
/// <summary>
/// Кубок России
/// </summary>
RussianCup,
/// <summary>
/// Первенство России,
/// Всероссийская спартакиада между субъектами Российской Федерации
/// </summary>
RussianYourthChampionship_AllRussianSportsDay,
/// <summary>
/// Другие всероссийские спортивные соревнования, включенные в ЕКП
/// </summary>
OtherRussianCompetitions,
/// <summary>
/// Чемпионат федерального округа, двух и более федеральных округов,
/// чемпионаты г. Москвы и г. Санкт-Петербурга
/// </summary>
RussainRegionsChampionship_MoscowOrStPetersburgChampionship,
/// <summary>
/// Первенство федерального округа, двух и более федеральных округов,
/// Спартакиада одного или двух и более федеральных округов,
/// первенства г. Москвы и г. Санкт-Петербурга
/// </summary>
RussainFederalRegionsYouthChampionship_RussainFederalRegionsSportsDay_MoscowOrStPetersburgYouthChampionship,
/// <summary>
/// Чемпионат субъекта Российской Федерации (кроме г. Москвы и г. Санкт-Петербурга)
/// </summary>
RussainRegionChampionshipExceptMoscowAndStPetersburg,
}
public class CalculationSettings
{
public int MaxYear = -1;
public enResultGradeCalcMethod CalcMethod = enResultGradeCalcMethod.None;
public enCompetitionStatus CompetitionStatus = enCompetitionStatus.None;
public bool ChangeJuniorGradesToAdultForAdults = true;
public bool UseOnly75Percent = true;
public int CompetitionYear = DateTime.Today.Year;
}
public class Range
{
public int Min { get; } = 0;
public int Max { get; } = 0;
public Range(int min, int max)
{
Min = min;
Max = max;
}
public bool IsInRange(int value)
{
return Min <= value && value <= Max;
}
}
/// <summary>
/// Одна строка в листе "МС и КМС"
/// </summary>
public class OneRule
{
public Range PlacesRange { get; } = null;
/// <summary>
/// Список: [разряд, сколько минимально чиловек должно быть].
/// Правила объединяются через ИЛИ
/// </summary>
public List<KeyValuePair<enGrade, int>> GradesCountRequirements { get; set; } = new List<KeyValuePair<enGrade, int>>();
public OneRule(int minPlace, int maxPlace)
{
PlacesRange = new Range(minPlace, maxPlace);
}
}
public class BeforeMasterOrMasterAssignmentRules
{
public Range GroupAgesRange { get; } = null;
public List<OneRule> Rules { get; set; } = new List<OneRule>();
public BeforeMasterOrMasterAssignmentRules(int minGroupAge, int maxGroupAge)
{
GroupAgesRange = new Range(minGroupAge, maxGroupAge);
}
}
}