iniciar-programa
define-nueva-instruccion gira (r) como inicio
repetir r veces gira-izquierda;
fin;



define-nueva-instruccion mayor (p) como inicio
 si junto-a-zumbador y no si-es-cero (p) entonces inicio
  coge-zumbador;
   mayor (precede(p));
    si orientado-al-sur entonces deja-zumbador;
    fin
    sino inicio
     si no-junto-a-zumbador y si-es-cero (p) entonces gira-izquierda;
   si frente-libre y orientado-al-oeste entonces avanza;
 fin;
fin;



define-nueva-instruccion compara (p) como inicio
 si junto-a-zumbador y no si-es-cero (p) entonces inicio
  coge-zumbador;
   compara (precede(p));
    deja-zumbador;
    fin
   sino inicio
  si si-es-cero (p) y junto-a-zumbador entonces gira (2);
 fin;
fin;



define-nueva-instruccion busca (p) como inicio
 si junto-a-zumbador y orientado-al-oeste entonces inicio
  coge-zumbador;
   si no-junto-a-zumbador entonces gira-izquierda;
   busca (sucede(p));
    fin
     sino inicio
      si no-junto-a-zumbador y orientado-al-sur entonces inicio
       repetir p veces deja-zumbador;
        si orientado-al-sur entonces gira-izquierda;
        si frente-libre entonces avanza;
        fin;
        compara (p);
       si orientado-al-oeste entonces inicio
      busca (0);
     fin
    sino inicio
   si frente-libre entonces inicio
    avanza;
     fin
      sino inicio
       gira (2);
      mientras frente-libre y orientado-al-oeste hacer mayor (p);
      apagate;
    fin;
   busca (p);
  fin;

 fin;
fin;



(*------------------------------------------------------*)
define-nueva-instruccion destruye-der (k) como inicio
 si junto-a-zumbador y frente-libre entonces inicio
  avanza;
   destruye-der (sucede(k));
    fin
    sino inicio
    mientras frente-libre hacer avanza;
    gira-izquierda;
    avanza;
   gira (2);
  repetir k veces deja-zumbador;
 fin;
fin;



define-nueva-instruccion destruye-izq (k) como inicio
 si junto-a-zumbador y frente-libre entonces inicio
  avanza;
   destruye-izq (sucede(k));
    fin
    sino inicio
     mientras frente-libre hacer avanza;
     gira (3);
     avanza;
     gira (3);
     mientras no-junto-a-zumbador y frente-libre hacer avanza;
    si frente-libre entonces avanza;
    gira-izquierda;

    si frente-libre entonces inicio
     avanza;
      gira-izquierda;
     destruye-der (k);
  fin
   sino inicio
    gira-izquierda;
     mientras frente-libre hacer avanza;
     repetir k veces deja-zumbador;

   fin;

 fin;
fin;



    inicia-ejecucion

    mientras orientado-al-este hacer inicio
     gira (3);

      mientras frente-libre y no-junto-a-zumbador hacer avanza;
       si frente-libre entonces inicio
       avanza;
        gira (3);
                                     (*Contar destruccion*)
       si frente-libre entonces inicio
        avanza;
         gira (3);
          destruye-izq (2);
         fin
         sino inicio
        gira (2);
      si frente-libre entonces inicio
       avanza;
        gira-izquierda;
         destruye-der (2);
          fin
           sino inicio
           gira-izquierda;
           mientras frente-libre hacer avanza;
         repetir 2 veces deja-zumbador;
        fin;
      fin;

        fin
        sino inicio
         si junto-a-zumbador entonces inicio
          gira (3);
           si frente-libre entonces inicio
            avanza;
            gira (3);
           destruye-izq (1);
          fin
         sino inicio
       gira (2);
        si frente-libre entonces inicio
         avanza;
           gira-izquierda;
            destruye-der (1);
             fin
            sino inicio
            gira-izquierda;
            mientras frente-libre hacer avanza;
          deja-zumbador;
         fin;
        fin;


         fin
          sino inicio
           gira (3);
           si frente-libre entonces inicio
            avanza;
            gira (3);
           destruye-izq (0);
          fin
         sino inicio
       gira (2);
      si frente-libre entonces inicio
        avanza;
         gira-izquierda;
          destruye-der (0);
           fin
            sino inicio
            gira-izquierda;
            mientras frente-libre hacer avanza;
          fin;
       fin;

      fin;
    fin;
   si frente-libre entonces avanza;

 fin;
  (*----------  ENCUENTRA EL MAYOR  ---------------*)

   gira-izquierda;
   mientras frente-libre hacer avanza;
   gira (2);
   mientras no-junto-a-zumbador y frente-libre hacer avanza;
   si frente-bloqueado y no-junto-a-zumbador entonces apagate;
   gira (2);

   busca (0);


        apagate;
    termina-ejecucion
finalizar-programa
