using System.Collections.Generic;
public static void Main()
var period_1 = new List<Period>();
var period_2 = new List<Period>();
var ItemList = new List<Item>();
period_1 = new List<Period>
new Period(new List<short>{1,1,1}),
new Period(new List<short>{1,1,1}),
new Period(new List<short>{1,1,1})
period_2 = new List<Period>
new Period(new List<short>{2,2,2,2,2}),
new Period(new List<short>{2,2,2,2,2}),
new Period(new List<short>{2,2,2,2,2}),
new Period(new List<short>{2,2,2,2,2})
ItemList = new List<Item>{ new Item(2, period_1), new Item(6, period_2)};
period_1 = new List<Period>
new Period(new List<short>{1,1,1}),
new Period(new List<short>{1,1,1}),
new Period(new List<short>{1,1,1})
period_2 = new List<Period>
new Period(new List<short>{2,2,2,2,2}),
new Period(new List<short>{2,2,2,2,2}),
new Period(new List<short>{2,2,2,2,2}),
new Period(new List<short>{2,2,2,2,2})
ItemList = new List<Item>{ new Item(2, period_1), new Item(13, period_2)};
var result = new List<short>();
while (ItemList.Count > counter)
var item = ItemList[counter];
var nextItem = ItemList[counter + 1];
if (GetItemEnd(item) > nextItem.Start && item.Start < nextItem.Start)
var localNexItemPeriodCount = 0;
foreach (var period in item.Period)
var localPeriodIndex = 0;
var localStart = item.Start;
if(localStart + period.ShortsData.Count() < nextItem.Start)
result.AddRange(period.ShortsData);
localStart = localStart + period.ShortsData.Count();
nextItem.Start = localStart;
var periodForMultiplyCount = item.Period.Count - localPeriodIndex;
for(int i = 0; i < periodForMultiplyCount; i++ )
var temp = AdjustPeriodLength(item.Period[localNexItemPeriodCount + i].ShortsData,
nextItem.Period[i].ShortsData);
nextItem.Period = nextItem.Period.GetRange(periodForMultiplyCount, nextItem.Period.Count() - periodForMultiplyCount);
else if (GetItemEnd(item) < nextItem.Start && item.Start < nextItem.Start)
result.AddRange(GetEmptyShorts(item.Start));
foreach (var period in item.Period)
result.AddRange(period.ShortsData);
Console.WriteLine("Unknown Case");
foreach (short x in result)
public static List<short> AdjustPeriodLength(List<short> period_1, List<short> period_2)
var result = new List<short>();
if(period_1.Count < period_2.Count)
foreach (short x in period_1)
result.Add(period_2[counter]);
result.AddRange(period_2);
foreach (short x in period_2)
public static int GetItemEnd(Item item)
foreach (var period in item.Period)
result = result + period.ShortsData.Count;
public static List<short> GetEmptyShorts(int num)
var result = new List<short>();
public Item(int start, List<Period> period)
public int Start { get; set; }
public List<Period> Period { get; set;}
public Period(List<short> shortsData)
public List<short> ShortsData { get; set;}