unit zaisti;

interface

  procedure init (var didsuma : longint; var priesininko_ejimas : integer);
  {atliekamas ejimas ir suzinomas prisininko ejimas}
  procedure eiti (mano_ejimas : integer; var priesininko_ejimas : integer);

implementation

  var f : text;
      suma, dsuma : longint;
      laimejai : boolean;
      atsimink_priesininko_ejima : integer;

  procedure ZaidimoPabaiga;
  begin
    if (not laimejai)
      then writeln (f, 'pralaimejote')
      else writeln (f, 'laimejote');
    close (f);
    halt(0);
  end;

  function versti (svetimas : byte; suma, didsuma : longint) : byte;
    var mod7 : longint;
  begin
    mod7 := (didsuma - suma) mod 7;
    if mod7 <> 0
      then if mod7 = svetimas
        then if mod7 mod 2 = 0
          then versti := mod7 div 2
          else versti := (mod7 + 7) div 2
        else versti := mod7
      else versti := 7 - svetimas;
  end;

  function labai_gudrus_priesininko_ejimas (mano_ejimas : integer) : integer;
    var ejimas : integer;
  begin
    randomize;
    ejimas := versti (mano_ejimas, suma, dsuma);
    atsimink_priesininko_ejima := ejimas;
    labai_gudrus_priesininko_ejimas := ejimas;
    {writeln (f, 'priesininko ejimas: ', labai_gudrus_priesininko_ejimas);}
  end;

  procedure init (var didsuma : longint; var priesininko_ejimas : integer);
    var fi : text;
  begin

    assign (fi, 'losimas.in');
    {$I-}
    reset (fi);
    {$I+}
    if IOResult<>0 then
      begin
        writeln(f,'Failas nerastas');
	ZaidimoPabaiga;
      end;
    readln (fi, didsuma, priesininko_ejimas);
    close (fi);
    atsimink_priesininko_ejima := priesininko_ejimas;
    {writeln (f, 'didsuma = ', didsuma, ', pirmasis priesininko ejimas - ', priesininko_ejimas);}
    {writeln (f, 'init');}

    dsuma := didsuma;
    suma := priesininko_ejimas;
  end;

  {atliekamas ejimas ir suzinomas prisininko ejimas}
  procedure eiti (mano_ejimas : integer; var priesininko_ejimas : integer);
  begin
    {writeln (f, 'tavo ejimas: ', mano_ejimas);}
    {writeln (f, 'eiti');}
    if (mano_ejimas < 1) or (mano_ejimas > 6) or
       (mano_ejimas = atsimink_priesininko_ejima)
      then
        begin
          writeln (f, 'nekorektiskas ejimas!');
          ZaidimoPabaiga;
        end;
    suma := suma + mano_ejimas;
    if (suma > dsuma)
      then ZaidimoPabaiga;
    if (suma = dsuma)
      then
        begin
          laimejai := true;
          ZaidimoPabaiga;
        end;
    priesininko_ejimas := labai_gudrus_priesininko_ejimas (mano_ejimas);
    suma := suma + priesininko_ejimas;
    if (suma > dsuma)
      then
        begin
          laimejai := true;
          ZaidimoPabaiga;
        end;
    if (suma = dsuma)
      then ZaidimoPabaiga;
  end;

begin

  laimejai := false;
  {assign (f, 'losimas.log');}
  assign (f, 'losimas.out');
  {$I-}
  rewrite (f);
  {$I+}
  if IOResult<>0 then
      begin
        writeln('Neatidare failo');
	halt(0);
      end;
  {writeln (f, 'modulis');}
  {writeln (f, '--- zaidimas prasideda ---');}
end.
