demo210525/Library/Class1.cs

44 lines
1.2 KiB
C#
Raw Normal View History

2025-05-23 07:28:18 +00:00
namespace Library;
public class Calculations
{
public static string[] AvailablePeriods(
TimeSpan[] startTimes,
int[] durations,
TimeSpan beginWorkingTime,
TimeSpan endWorkingTime,
int consultationTime)
{
var busy = new List<(DateTime Start, DateTime End)>();
for (int i = 0; i < startTimes.Length; i++)
{
var start = DateTime.Today.Add(startTimes[i]);
var end = start.AddMinutes(durations[i]);
busy.Add((start, end));
}
var workStart = DateTime.Today.Add(beginWorkingTime);
var workEnd = DateTime.Today.Add(endWorkingTime);
var result = new List<string>();
var current = workStart;
while (current.AddMinutes(consultationTime) <= workEnd)
{
var slotEnd = current.AddMinutes(consultationTime);
bool isOverlapping = busy.Any(b =>
current < b.End && slotEnd > b.Start
);
if (!isOverlapping)
{
result.Add($"{current:HH:mm}-{slotEnd:HH:mm}");
}
current = slotEnd;
}
return result.ToArray();
}
}