using System.Collections.Generic;
public static void Main()
Console.WriteLine("მოგესალმებით 2024 წლის ვირტუალურ არჩევნებზე"+
Environment.NewLine +"------------" +
var partiesProvider = new Cesco();
SeedCitizenDB context = new SeedCitizenDB(100000);
VoteProcessor vProcess = new VoteProcessor(partiesProvider);
vProcess.StartVoteProcess(context.Citizens);
partiesProvider.PublishTotalVotes();
string PersonaIdHashed {get;}
public int VotedPartyNumber {get;set;}
public Citizen(int age,string name,string personaIdHashed)
PersonaIdHashed = personaIdHashed;
public class PoliticalParty
public int CescoNumber {get;set;}
public string Name {get;set;}
public int TotalVotes {get;set;} = 0;
public class VoteProcessor
private IPartiesProvider _partiesProvider;
public VoteProcessor(IPartiesProvider partiesProvider)
_partiesProvider = partiesProvider;
public void StartVoteProcess(List<Citizen> citizens)
Console.WriteLine("გთხოვთ დაიცადოთ,მიმდინარეობს ხმის მიცემის პროცედურა"+
var pParties = _partiesProvider.ActiveParties.OrderByDescending(x=>x.CescoNumber);
foreach(var citizen in citizens)
citizen.VotedPartyNumber = GenerateVote();
var selectedParty = pParties.Where(x=>x.CescoNumber == citizen.VotedPartyNumber).First();
selectedParty.TotalVotes++;
Random rnd = new Random();
int voteNum = rnd.Next(4,42);
bool isValid(int voterSelectedNumber)
int[] validVoteNumbers = new int[]{4,5,9,25,36,41};
if(validVoteNumbers.Contains(voterSelectedNumber))
public class SeedCitizenDB
public List<Citizen> Citizens {get;set;}
public SeedCitizenDB(int totalCount)
throw new ArgumentOutOfRangeException("out of range)");
Console.WriteLine("მიმდინარეობს მონაცემების ჩატვირთვა"+ Environment.NewLine);
Console.WriteLine("too much count to process data(max 200000)");
Citizens = new List<Citizen>();
for (int i = 0; i < totalCount; i++)
Random rndAge = new Random();
int age = rndAge.Next(18,200);
Guid nameGuid = Guid.NewGuid();
Guid personalIdGuid = Guid.NewGuid();
Citizen c = new Citizen(age,nameGuid.ToString(),personalIdGuid.ToString());
public interface IPartiesProvider
public List<PoliticalParty> ActiveParties{get;set;}
public class Cesco : IPartiesProvider
public List<PoliticalParty> ActiveParties {get;set;}
ActiveParties = new List<PoliticalParty>
Name = "ნაციონალური მოძრაობა"
Name = "გახარია საქართველოსთვის"
Name = "გირჩი მეტი თავისუფლება"
public void PublishTotalVotes()
var parties = ActiveParties.OrderByDescending(x=>x.TotalVotes);
foreach(PoliticalParty p in parties)
Console.WriteLine($"პოლიტიკურმა პარტიამ:{p.Name} ნომერი {p.CescoNumber} ჯამში მიიღო:{p.TotalVotes}" + Environment.NewLine +"------------");
var winnerParty = parties.First();
Console.WriteLine(Environment.NewLine + $"ვულოცავთ პარტია:{winnerParty.Name} გამარჯვებას");