2. Savaitgalių skaičius. 
Pirmiausia reikia nustatyti, kokie atsakymai yra galimi. Tarkime, kad metai yra paprastieji, o sausio 1-oji yra pirmadienis. Tie metai turi 365 dienas, 52 (365 div 7 = 52) pilnas savaites. Per šias savaites bus 104 (52  2 = 104) savaitgalio dienos. Paskutiniojoje metų savaitėje bus likusi 1 diena: (365 - 7  52 = 365 - 364 = 1). Ta diena bus pirmadienis, taigi ne savaitgalis, ir iš viso per metus bus 104 savaitgalio dienos.
Išnagrinėjus paprastųjų ir keliamųjų metų, prasidedančių įvairiomis savaitės dienomis, galimus atvejus, sudaroma tokia savaitgalių skaičių lentelė:

Savaitės diena,	Savaitgalių skaičius	
kuria prasideda metai	paprastaisiais metais	keliamaisiais metais	
Pirmadienis	104	104	
Antradienis	104	104	
Trečiadienis	104	104	
Ketvirtadienis	104	104	
Penktadienis	105	105	
Šeštadienis	105	106	
Sekmadienis	105	105	
Dabar uždavinį suskaidome į dvi dalis: 1) nustatyti, ar duotieji metai keliamieji, ar paprastieji ir 2) kurią savaitės dieną jie prasideda. Pirmoji uždavinio dalis elementari. Sunkiausia nustatyti duotųjų metų pirmąją savaitės dieną. Paprasčiausias būdas – pasirinkti metus, kurių savaitės diena žinoma, o toliau pridėdinėti (ar atiminėti, jei duotieji metai ankstesni už pasirinktus) po vienerius metus. Savaitės dienos pasislenka į priekį per vieną arba dvi dienas, priklausomai nuo to, ar metai paprastieji, ar keliamieji.

type metai = 1583..10000;

function savaitgalių_skaičius (m: metai): integer;
  var šs_sk: integer;  { šeštadienių ir sekmadienių skaičius }
  function kel (m: metai): boolean;
  { ar metai m keliamieji }
  begin
   kel := (m mod 400 = 0) or (m mod 100 <> 0) and (m mod 4 = 0)
  end;
  function sav_dien (m: metai): integer;
  { nustatoma, kuria savaitės diena prasideda metai }
  { savaitės dienos numeruojamos }
  { 1-pirmadienis, 2-antradienis, …, 7-sekmadienis }
    var met: metai; { pasirenkami metai, kurių pirmoji diena – sekmadienis }
        d, i: integer;
  begin
    met := 1978; { pasirenkami metai, prasidedantys sekmadieniu }
    d := 7;
    for i := met-1 downto m do { jei duoti metai yra ankstesni }
        if kel(i)
           then d := ((d - 2) + 7) mod 7
           else d := ((d - 1) + 7) mod 7;
    for i := met to m-1 do  { jei duoti metai yra vėlesni }
        if kel(i)
           then d := (d + 2) mod 7
           else d := (d + 1) mod 7;
    if d = 0
       then d := 7;
    sav_dien := d
  end;
begin  { savaitgalių skaičius }
  šs_sk := 0;
  case sav_dien(m) of
    1..4: šs_sk := 104;
    5, 7: šs_sk := 105;
    6   : if kel(m)
              then šs_sk := 106
              else šs_sk := 105
  end;
  savaitgalių_skaičius := šs_sk
end;

Testo nr.	Pradinis duomuo	Rezultatas		Paaiškinimai	
1	1974	104	1974.01.01 – antradienis, 	Paprastieji metai prasideda darbo diena – antradieniu	
2	1982	105	1982.01.01 – penktadienis	Paprastieji metai prasideda darbo diena – penktadieniu	
3	1978	105	– sekmadienis	Paprastieji metai prasideda savaitgaliu	
4	1968	104	– pirmadienis	Keliamieji metai, pirmoji metų savaitė pilna	
5	1972	106	– šeštadienis	Vienintelis kartas, kai savaitgalių dienų skaičius lygus 106	
6	1984	105	1984.01.01 – sekmadienis	Keliamieji metai prasideda savaitgaliu – sekmadieniu