Генерация еженедельных списков задач
Мне необходима программа, которая генерировала бы еженедельные  списки задач. Программа должна просто показывать количество недель в списке  задач и организовывать мероприятия, не совпадающие по времени. В моем текущем  планировщике у меня имеется 12 групп и планы на 11 недель. 
 Мне нужен простой алгоритм, чтобы решить эту проблему. Какие идеи?
Вот рабочий код (но вы должны просто понять алгоритм работы):
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,  Dialogs,
 StdCtrls;
type
 TForm1 = class(TForm)
 ListBox1: TListBox;
 Edit1: TEdit;
 Button1: TButton;
 procedure Button1Click(Sender: TObject);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
var
 Form1: TForm1;
implementatios=O2>{$R  *.DFM}
const
 maxTeams = 100;
 var
 Teams: Array[1..maxTeams] of  integer;
 nTeams,ix,week,savix: integer;
function WriteBox(week: integer):string;
 var
 str: string;
 ix: integer;
 begin
 Result := Format('Неделя=%d  ',[week]);
 for ix := 1 to nTeams do  begin
 if odd(ix) then Result := Result+'  '
 else Result := Result+'v';
 Result := Result+IntToStr(Teams[ix]);
 end;
 end;
procedure TForm1.Button1Click(Sender: TObject);
 begin
 nTeams := StrToInt(Edit1.Text);
 if Odd(nTeams) then inc(nTeams);  {должны иметь номера каждой группы}
 ListBox1.Clear;
 for ix := 1 to nTeams  do Teams[ix] := ix;
 ListBox1.Items.Add(WriteBox(1));
for week := 2 to  nTeams-1 do begin
 Teams[1] := Teams[nTeams-1]; {используем Teams[1] в качестве  временного хранилища}
 for ix := nTeams downto 2  do
 if not Odd(ix) then begin
 savix := Teams[ix];
 Teams[ix] := Teams[1];
 Teams[1] := savix;
 end;
 for ix := 3 to nTeams-1 do
 if Odd(ix) then begin
 savix := Teams[ix];
 Teams[ix] := Teams[1];
 Teams[1] := savix;
 end;
 Teams[1] := 1;  {восстанавливаем известное значение}
 ListBox1.Items.Add(WriteBox(week));
 end;
 end;
end.
	