{$R+}
Unit Stromovk;

Interface
Const MaxAgents = 100;
Type TAgentID = Integer;
     TColor = (Red, Green, Yellow);
     TTicketIndex = 1 .. 5;

{ Zavolejte pred prvnim pouzitim unity Stromovka }
Procedure StromovkaInit;

{ Zavolejte po poslednim pouziti unity Stromovka }
Procedure StromovkaDone;

{ Pocet agentu ve Stromovce, maji ID 1 .. AgentCount,
  hodnota je vzdy mensi nebo rovna MaxAgents. }
Function AgentCount : Integer;

{ Jmeno agenta, jen pro potreby ladeni }
Function AgentName(A : TAgentID) : String;

{ ID agenta, jehoz jmeno je na vizitce barvy C ziskane od agenta A. }
Function NextAgent(A : TAgentID; C : TColor) : TAgentID;

{ Do X, Y nastavi pozici zadaneho agenta A. }
Procedure AgentPosition(A : TAgentID; Var X, Y : Real);

{ Pocatecni pozice tymu. }
Procedure TeamPosition(Var X, Y : Real);

{ Pozice sprateleneho (hlavniho) agenta, cilem je ziskat listky
  tri barev, s jeho jmenem a donest je k nemu. }
Function FriendAgent : TAgentID;

{ Vraci ID agentu jejichz jmena jsou napocatecnich peti listcich,
  parametr i nabyva hodnot 1 .. 5. }
Function InitialTickets(i : TTicketIndex) : TAgentID;

Implementation

Type TPosition = Record
       x, y : Real;
     End;
     TAgent = Record
       Pozice : TPosition;
       Vizitky : Array[TColor] Of TAgentID;
       Jmeno : String[30];
     End;

Var AgentCnt : Integer;
    FAgent : TAgentID; { Friend agent ID }
    Agents : Array[1 .. MaxAgents] Of TAgent;
    Tickets : Array[TTicketIndex] Of TAgentID;
    Team : TPosition;


Procedure StromovkaInit;
Var F : Text;
    I : TTicketIndex;
    J : Integer;
    A : TAgentID;
    C : TColor;
Begin
  Assign(F, 'vstup.txt');
  Reset(F);

  { komentare }
  For J := 1 To 3 Do ReadLn(F);

  { ctvrty radek }
  Read(F, AgentCnt, Team.X, Team.Y);
  For I := 1 To 5 Do Read(F, Tickets[I]);
  Readln(F);

  For A := 1 To AgentCnt Do With Agents[A] Do
    Begin
      Readln(F, Jmeno);
      Read(F, J, Pozice.X, Pozice.Y);
      If J = 1 Then FAgent := A;
      For C := Red To Yellow Do Read(F, Vizitky[C]);
      Readln(F);
    End;

  Close(F);
End;


Procedure StromovkaDone;
Begin
End;


Function AgentCount : Integer;
Begin
  AgentCount := AgentCnt;
End;


Function AgentName(A : TAgentID) : String;
Begin
  If A > AgentCnt Then RunError(201);
  AgentName := Agents[A].Jmeno;
End;


Function NextAgent(A : TAgentID; C : TColor) : TAgentID;
Begin
  If A > AgentCnt Then RunError(201);
  NextAgent := Agents[A].Vizitky[C];
End;


Procedure AgentPosition(A : TAgentID; Var X, Y : Real);
Begin
  If A > AgentCnt Then RunError(201);
  X := Agents[A].Pozice.X;
  Y := Agents[A].Pozice.Y;
End;


Procedure TeamPosition(Var X, Y : Real);
Begin
  X := Team.X;
  Y := Team.Y;
End;


Function FriendAgent : TAgentID;
Begin
  FriendAgent := FAgent;
End;


Function InitialTickets(i : TTicketIndex) : TAgentID;
Begin
  InitialTickets := Tickets[i];
End;


End.