-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLesson58.cs
More file actions
131 lines (101 loc) · 3.42 KB
/
Lesson58.cs
File metadata and controls
131 lines (101 loc) · 3.42 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
using System;
using System.Collections.Generic;
using System.Linq;
namespace Tired
{
public class Program
{
private static void Main(string[] args)
{
FightClub club = new FightClub();
club.UnionTeams();
}
}
public class FightClub
{
private List<Fighter> _teamA = new List<Fighter>();
private List<Fighter> _teamB = new List<Fighter>();
public void UnionTeams()
{
const char StartChar = 'Б';
Func<Fighter, bool> conditionToSelect = (fighter => fighter.Name.StartsWith(StartChar) == true);
OrganizeTeam(_teamA);
OrganizeTeam(_teamB);
Console.WriteLine("--Команда А--");
PrintTeam(_teamA);
Console.WriteLine("--Команда Б--");
PrintTeam(_teamB);
Console.WriteLine("--Команда Б с командой А--");
var resultTeam = _teamA.Where(conditionToSelect);
_teamB = _teamB.Union(resultTeam).ToList();
_teamA = _teamA.Except(resultTeam).ToList();
PrintTeam(_teamB);
Console.WriteLine("--Остатки команды А--");
PrintTeam(_teamA);
}
private void OrganizeTeam(List<Fighter> list)
{
const int MaxCount = 25;
StudyRandomizer randomizer = new StudyRandomizer();
CodePages codePages = new CodePages();
int randomCount = randomizer.GetRandomValue(0, MaxCount);
for (int i = 0; i < randomCount; i++)
{
list.Add(new Fighter(randomizer.GetRandomName(5, codePages.GetCodePage("RussianTest"))));
}
}
private void PrintTeam(IEnumerable<Fighter> list)
{
foreach (Fighter fighter in list)
{
Console.WriteLine(fighter.Name);
}
}
}
public class Fighter
{
public string Name { get; private set; }
public Fighter(string name) => Name = name;
}
public struct CodePage
{
public int PageStart { get; private set; }
public int PageEnd { get; private set; }
public string Name { get; private set; }
public CodePage(string name, int start, int end)
{
Name = name;
PageStart = start;
PageEnd = end;
}
}
public class CodePages
{
private List<CodePage> _pages = new List<CodePage>();
public CodePages()
{
InitDefaultPages();
}
private void InitDefaultPages()
{
_pages.Add(new CodePage("RussianUpper", 1040, 1071));
_pages.Add(new CodePage("RussianTest", 1040, 1044));
}
public CodePage GetCodePage(string name) => _pages.Find(codePage => codePage.Name == name);
}
public class StudyRandomizer
{
private Random _randomizer = new Random();
public int GetRandomValue(int minValue = 0, int maxValue = 1) => _randomizer.Next(minValue, maxValue + 1);
public string GetRandomName(int charCount, CodePage page)
{
string name = "";
for (int i = 0; i < charCount; i++)
{
name += GetRandomChar(page);
}
return name;
}
public char GetRandomChar(CodePage page) => (char)GetRandomValue(page.PageStart, page.PageEnd);
}
}