public static void Main()
var cukrarna = new Cukrarna();
TimeSpan soucet = cukrarna.SectiPole(cukrarna.celySortiment);
Console.WriteLine("Idealni cas tisku {0} souboru je: {1}d, {2}h a {3}m", cukrarna.celySortiment.Length, soucet.Days, soucet.Hours, soucet.Minutes);
Console.WriteLine("denni interval : " + cukrarna.Interval);
Console.WriteLine("nocni interval : " + cukrarna.IntervalNoc);
Console.WriteLine("-------------------------");
Console.WriteLine("------Tiskovy-plan-------");
Console.WriteLine("-------------------------");
cukrarna.RozradVseDoTiskovehoPlanu(cukrarna.celySortiment);
public const int zacatekTiskuV = 8;
public const int posledniTiskVe = 22;
public const int interval = posledniTiskVe - zacatekTiskuV;
public TimeSpan Interval = new TimeSpan(0, interval, 00, 00);
public TimeSpan IntervalNoc = new TimeSpan(0, 24 - interval, 00, 00);
public TimeSpan A = new TimeSpan(0, 4, 07, 00);
public TimeSpan B = new TimeSpan(0, 2, 17, 00);
public TimeSpan C = new TimeSpan(0, 1, 27, 00);
public TimeSpan D = new TimeSpan(0, 2, 59, 00);
public TimeSpan E = new TimeSpan(0, 0, 45, 00);
public TimeSpan F = new TimeSpan(0, 4, 11, 00);
public TimeSpan G = new TimeSpan(0, 14, 11, 00);
public TimeSpan H = new TimeSpan(0, 12, 11, 00);
public TimeSpan I = new TimeSpan(0, 21, 11, 00);
public TimeSpan J = new TimeSpan(0, 15, 11, 00);
public TimeSpan K = new TimeSpan(0, 13, 11, 00);
public TimeSpan[] celySortiment;
public TimeSpan[] tiskovyPlan;
public TimeSpan Prestavka = new TimeSpan(0, 0, 15, 00);
celySortiment = new TimeSpan[]{A, B, C, D, E, F, G, H, I, J, K};
tiskovyPlan = new TimeSpan[celySortiment.Length];
noci = new TimeSpan[SectiPole(celySortiment).Days];
public TimeSpan SectiPole(TimeSpan[] pole)
TimeSpan soucet = new TimeSpan();
for (int i = 0; i < pole.Length; i++)
soucet = soucet + pole[i];
public TimeSpan[] SetridPole(TimeSpan[] pole)
public void VypisPole(TimeSpan[] pole)
for (int i = 0; i < pole.Length; i++)
Console.WriteLine(pole[i].ToString());
Console.WriteLine("--------------");
public TimeSpan[] VyplnInterval(TimeSpan casovyInterval, TimeSpan[] pole)
TimeSpan[] novePole = new TimeSpan[pole.Length];
if (casovyInterval > SectiPole(pole))
TimeSpan prestavka = new TimeSpan(0, 0, j * 15, 0);
for (var i = 0; i < pole.Length; i++)
if (pole[i] <= (casovyInterval - SectiPole(novePole) - prestavka))
var poleBezNull = novePole.Where(c => c != new TimeSpan(0, 00, 00, 00)).ToArray();
public void RozradVseDoTiskovehoPlanu(TimeSpan[] pole)
for (int i = 0; i < noci.Length; i++)
TimeSpan[] pomocnePole = pole.Except(noci).ToArray();
for (int i = 0; i < noci.Length + 1; i++)
TimeSpan mujInterval = mujInterval = Interval;
var intervalovePole = VyplnInterval(new TimeSpan(0, 100, 0, 0), pomocnePole);
for (int j = 0; j < intervalovePole.Length; j++)
tiskovyPlan[indexTP] = intervalovePole[j];
Console.WriteLine("{0}. den {1} ", i + 1, tiskovyPlan[indexTP]);
int index = Array.IndexOf(tiskovyPlan, noci.Last());
TimeSpan a = new TimeSpan(0, 0, 0, 0);
for (int o = index; o < tiskovyPlan.Length; o++)
Console.WriteLine("\nCelkovy cas tisku pripraveneho planu je: {0}d, {1}h a {2}m", i + 1 + a.Days, a.Hours, a.Minutes);
if (noci[i] > IntervalNoc)
mujInterval = Interval - (noci[i] - IntervalNoc);
var intervalovePole = VyplnInterval(mujInterval, pomocnePole);
for (int j = 0; j < intervalovePole.Length; j++)
tiskovyPlan[indexTP] = intervalovePole[j];
Console.WriteLine("{0}. den {1} ", i + 1, tiskovyPlan[indexTP]);
TimeSpan[] pomocnePole2 = pomocnePole.Except(intervalovePole).ToArray();
pomocnePole = pomocnePole2;
tiskovyPlan[indexTP] = noci[i];
Console.WriteLine("{0}. noc {1} ", i + 1, tiskovyPlan[indexTP]);
Console.WriteLine("-------------------------");