iniciar-programa
Define-nueva-instruccion avanzar(n) como inicio
   Si frente-libre y no(si-es-cero(n)) entonces
    inicio
        Si no-junto-a-zumbador entonces
          Repetir 2 veces deja-zumbador;
        avanza;
        Avanzar(precede(n));
         avanza;
    fin
    sino
      inicio
        si no si-es-cero(n) y no-junto-a-zumbador entonces
         Repetir 2 veces deja-zumbador;
        Repetir 2 veces gira-izquierda;
      fin;
fin;
Define-nueva-instruccion infeccion(n) como inicio
    Si frente-libre y no(si-es-cero(n)) entonces inicio
        avanza;
        Repetir 3 veces gira-izquierda;
        Avanzar(n);
        Repetir 3 veces gira-izquierdA;
        infeccion(precede(n));
           avanza;
    fin  sino
    si frente-bloqueado o si-es-cero(n) entonces
       Repetir 2 veces gira-izquierda;
  Fin;


define-nueva-instruccion Recorre(n) como inicio
  Mientras Frente-libre y no-junto-a-zumbador hacer
    avanza;
   Si junto-a-zumbador entonces inicio
      coge-zumbador;
   Si no-junto-a-zumbador entonces inicio
    deja-zumbador;
   Repetir 4 veces inicio
    Infeccion(n);

    Repetir 3 veces gira-izquierda;
   Fin;
  Fin
   sino deja-zumbador;
  Fin;
 Fin;

Define-nueva-instruccion Busqueda(n) como inicio
 Mientras derecha-libre hacer inicio
    Recorre(n);
    Si frente-bloqueado entonces inicio
     Repetir 2 veces gira-izquierda;
     Mientras frente-libre hacer avanza;
     gira-izquierda;
     si frente-libre entonces
     avanza;
     gira-izquierda;
  Fin
  sino avanza;
 Fin;
 si frente-libre entonces
 Mientras Frente-libre hacer inicio
    Recorre(n);
    si frente-libre entonces
     avanza;
 Fin
 sino
   recorre(n);
Fin;
define-nueva-instruccion ubica como inicio
 Repetir 2 veces gira-izquierda;
      Mientras frente-libre hacer  avanza;
      Repetir 3  veces gira-izquierda;
      mientras frente-libre hacer
      avanza;
      repetir 3 veces gira-izquierda;
fin;
Define-nueva-instruccion Levanta-zumbador(n) como inicio
  si junto-a-zumbador entonces inicio
     Coge-zumbador;
     Levanta-zumbador(sucede(n));
  Fin
  sino
   inicio
      Busqueda(n);
      ubica;
   Fin;
Fin;
Define-nueva-instruccion Levanta(n) como inicio
 Si frente-libre o derecha-libre o junto-a-zumbador entonces inicio
   Si Frente-libre y no-junto-a-zumbador entonces inicio
      Avanza;
      Levanta(n);
   Fin;
   Si Junto-a-zumbador entonces inicio
      Mientras junto-a-zumbador hacer coge-zumbador;
      Levanta(sucede(n));
   Fin;
   si frente-bloqueado y derecha-libre entonces inicio
      Repetir 2 veces gira-izquierda;
      Mientras frente-libre hacer avanza;
      gira-izquierda;
      Si frente-libre entonces
       avanza;
      gira-izquierda;
      Levanta(n);
   Fin;
 Fin
 Sino inicio
   Ubica;
   Repetir n veces deja-zumbador;
   apagate;
 Fin;
Fin;
    inicia-ejecucion
    Mientras no-orientado-al-norte hacer
     gira-izquierdA;
    Levanta-zumbador(0);
    Levanta(0);
        apagate;
    termina-ejecucion
finalizar-programa
