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

define-nueva-instruccion regresa como inicio
mientras no-orientado-al-este hacer gira-izquierda;
mientras frente-libre hacer avanza;
gira (3);
mientras frente-libre hacer avanza;
gira-izquierda;
avanza;
fin;



define-nueva-instruccion portero como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
   portero;
    avanza;
    fin
    sino inicio
    mientras frente-libre hacer avanza;
   gira (2);
  fin;
fin;


define-nueva-instruccion altura como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
   altura;
   si no-junto-a-zumbador entonces deja-zumbador;
    si frente-libre entonces avanza;
    fin
    sino inicio
    mientras frente-libre y no-junto-a-zumbador hacer avanza;
   gira (3);
  fin;
fin;


define-nueva-instruccion ancho  como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
   ancho;
    si no-junto-a-zumbador entonces deja-zumbador;
     si frente-libre entonces avanza;
     fin
    sino inicio
   mientras frente-libre y no-junto-a-zumbador hacer avanza;
  gira (2);
 fin;
fin;
(*-------------------------------------------------------------*)

define-nueva-instruccion mas-alejado como inicio
 si frente-libre entonces inicio
  avanza;
   mas-alejado;
    deja-zumbador;
     fin
     sino inicio
    regresa;
  fin;
fin;



define-nueva-instruccion compara2 (n) como inicio
 si junto-a-zumbador y no si-es-cero (n) entonces inicio
  coge-zumbador;
   compara2 (precede(n));
    fin
    sino inicio
     si no-junto-a-zumbador entonces inicio
      avanza;
       deja-zumbador;
      apagate;
    fin
     sino inicio
      avanza;
       gira (3);
        avanza;
         gira (3);
        avanza;
       gira-izquierda;
      mas-alejado;
     deja-zumbador;
    apagate;
   fin;

 fin;
fin;


define-nueva-instruccion compara (n) como inicio
 si junto-a-zumbador entonces inicio
  coge-zumbador;
   compara (sucede(n));
    fin
     sino inicio
     avanza;
     compara2 (n);

  fin;
fin;




                              (*---distancia a la DERECHA--*)
define-nueva-instruccion contar2 como inicio
 si no-junto-a-zumbador entonces inicio
  avanza;
   contar2;
   deja-zumbador;
    fin
    sino inicio
    regresa;
    gira-izquierda;
   avanza;
  fin;
fin;


                                (*--distacia a la IZQUIERDA--*)
define-nueva-instruccion contar (k) como inicio
 si no-junto-a-zumbador entonces inicio
  avanza;
   contar (sucede(k));
    fin
     sino inicio
      mientras frente-libre hacer avanza;
       gira (2);
        contar2;
        avanza;
       repetir k veces deja-zumbador;
      gira (2);
     compara (0);


  fin;
fin;

              (*---------------------------*)
    inicia-ejecucion

    gira (3);
    avanza;
    gira (2);

    portero;
     gira (2);
      si frente-libre entonces avanza;
     deja-zumbador;
    mientras frente-libre hacer avanza;
    gira (2);
     repetir 6 veces avanza;
     gira (2);

      si junto-a-zumbador entonces inicio
      altura;
       gira (2);
      mientras frente-libre hacer avanza;
      gira (3);
      mientras frente-libre hacer avanza;
      gira (2);
    repetir 7 veces avanza;
    gira (2);
   fin
   sino inicio
   gira (2);
   avanza;
   gira (2);
    fin;

    si junto-a-zumbador entonces inicio
    ancho;
    gira (2);
     si no-junto-a-zumbador entonces avanza;
     gira (3);
      si frente-libre entonces inicio
       avanza;
       gira-izquierda;
        mientras no-junto-a-zumbador hacer inicio
        si no-junto-a-zumbador entonces deja-zumbador;
        avanza;
        fin;
      fin;
    fin
   sino inicio
    mientras no-junto-a-zumbador hacer avanza;
     gira (3);
      avanza;
         fin;



    mientras no-orientado-al-oeste hacer gira-izquierda;
     mientras frente-libre hacer avanza;
      gira (2);
       contar (0);





        apagate;
    termina-ejecucion
finalizar-programa
