50 lines
1.5 KiB
C#
50 lines
1.5 KiB
C#
using Microsoft.Extensions.Logging;
|
|
using Services.Numbers;
|
|
using Services.Tickets;
|
|
using Services.Tickets.Models;
|
|
using System.Net.Sockets;
|
|
|
|
namespace Services.Games;
|
|
internal class GameService : IGameService
|
|
{
|
|
private readonly INumbersService _numbersService;
|
|
private readonly ITicketService _ticketService;
|
|
|
|
public GameService(ILogger<GameService> logger, INumbersService numbersService, ITicketService ticketService)
|
|
{
|
|
_numbersService = numbersService;
|
|
_ticketService = ticketService;
|
|
}
|
|
|
|
public async Task<List<(List<LotteryTicket> winTickets, int matches)>> GetWinnersTickets(byte[] winNumbers)
|
|
{
|
|
List<LotteryTicket> tickets = await _ticketService.GetAllTickets();
|
|
return CalculateWinners(tickets, winNumbers);
|
|
|
|
}
|
|
|
|
private List<(List<LotteryTicket> winTickets,int matches)> CalculateWinners(List<LotteryTicket> tickets, byte[] bytes)
|
|
{
|
|
List<(List<LotteryTicket> winTickets,int matches)> results = new();
|
|
for (int i = 0; i < bytes.Length; i++)
|
|
{
|
|
List<LotteryTicket> winners = new List<LotteryTicket>();
|
|
for (int j = 0; j < tickets.Count; j++)
|
|
{
|
|
if (bytes.Except(tickets[j].Numbers!).Count() == i)
|
|
{
|
|
winners.Add(tickets[j]);
|
|
tickets.RemoveAt(j);
|
|
}
|
|
}
|
|
results.Add((winners, bytes.Length - i));
|
|
}
|
|
return results;
|
|
}
|
|
|
|
public byte[] GetWinNumbers()
|
|
{
|
|
return _numbersService.GetNumbers(6);
|
|
}
|
|
}
|