private static List<List<int>> Sliding(List<int> source, int win, int step)
{
var result = new List<List<int>>();
if (source.Count == 0)
return result;
if (source.Count <= win)
{
result.Add(source);
return result;
}
while (source.Any())
{
var window = source.Take(win).ToList();
result.Add(window);
if (source.Count <= win)
break;
source = source.Skip(step).ToList();
}
return result;
}