# mission3a.adb

    with KakoRobot, Gada.Text_IO ;

    procedure Mission3a is

       package K renames KakoRobot ;
       package Txt renames GAda.Text_IO ;

       -- Fait avancer le robot jusqu'à sa cible
       procedure Sauvez_Willy (Num : Integer) is
       begin
          -- Tant que le robot n'est pas content, il avance.
          while K.Etat(Num) /= 2 loop
             K.Deplacer (Num, K.Nord) ;
          end loop ;
       end Sauvez_Willy ;

       -- Trouve le robot d'énergie minimale.
       function Trouver_Min return Integer is

          -- On part d'une valeur atrocement grande
          --   Integer'Last aurait été plus rigoureux
          Energie_Min : Integer := 1E9 ;
          Numero_Min : Integer := 1 ;
       begin
          for I in 1..K.Nombre_Robots loop
             -- Les robots contents ne sont pas pris en compte
             if K.Energie(I) < Energie_Min and K.Etat(I) /= 2 then
                Energie_Min := K.Energie(I) ;
                Numero_Min := I ;
             end if ;
          end loop ;

          return Numero_Min ;
       end Trouver_Min ;

    begin

       -- Afficher l'énergie de chaque robot
       for I in 1..K.Nombre_Robots loop
          Txt.Put_Line ("L'énergie du robot numéro " & Integer'Image(I) &
                        " est " & Integer'Image(K.Energie(I)) ) ;
       end loop ;

       -- Il y a Nombre_Robots à sauver
       for I in 1..K.Nombre_Robots loop
          Sauvez_Willy (Trouver_Min) ;
       end loop ;

    end Mission3a ;