using System.Collections.Generic;
var numberOfArticles = 5;
var startTime = new TimeSpan(9, 0, 0);
var random = new Random();
var scheduledTimes = new List<TimeSpan>();
for (int i = 0; i < numberOfArticles; i++)
var baseDelayHours = random.Next(2, 4);
var minutesToAdd = random.Next(0, 60);
var nextTime = startTime.Add(new TimeSpan(baseDelayHours, minutesToAdd, 0));
while (scheduledTimes.Exists(previousTime => Math.Abs((nextTime - previousTime).TotalMinutes) < 30))
nextTime = nextTime.Add(new TimeSpan(0, 30, 0));
scheduledTimes.Add(nextTime);
foreach (var time in scheduledTimes)
Console.WriteLine($"Article {scheduledTimes.IndexOf(time) + 1} Scheduled at: {TimeSpanToAMPM(time)}");
string TimeSpanToAMPM(TimeSpan time)
var minutes = time.TotalMinutes;
var hours12 = time.Hours % 12;
var period = time.Hours >= 12 ? "PM" : "AM";
return $"{hours12}:{time.Minutes:D2} {period}";