iniciar-programa

define-nueva-instruccion avanze como inicio
   mientras no-orientado-al-este hacer inicio
        gira-izquierda;
   fin;
  mientras frente-libre y no-junto-a-zumbador hacer inicio
     avanza;
fin;
 si junto-a-zumbador entonces inicio
   mientras no orientado-al-norte hacer inicio
      gira-izquierda;
       avanza;
   fin;
 fin;
fin;

define-nueva-instruccion LI como inicio
     si orientado-al-oeste y junto-a-zumbador entonces inicio
        mientras junto-a-zumbador hacer inicio
             si junto-a-zumbador entonces inicio
                 coge-zumbador;
              fin;
            si frente-libre entonces inicio
               avanza;
              fin;
        fin;
        si frente-libre entonces inicio
         gira-izquierda;
          gira-izquierda;
            avanza;
        fin;
      si frente-bloqueado entonces inicio
       gira-izquierda;
        gira-izquierda;
      fin;
       gira-izquierda;
       avanza;
 si no junto-a-zumbador entonces inicio
      gira-izquierda;
      gira-izquierda;
      gira-izquierda;
       avanza;
      gira-izquierda;
 fin;
  mientras junto-a-zumbador hacer inicio
        si junto-a-zumbador entonces inicio
        coge-zumbador;

        fin;
        si frente-libre entonces inicio
        avanza;
        fin;
    fin;
 gira-izquierda;
 mientras frente-libre hacer inicio
 avanza;
 fin;
 gira-izquierda;
 mientras frente-libre hacer inicio
 avanza;
 fin;
 fin;
 avanze;
 fin;


 define-nueva-instruccion LD como inicio
    si junto-a-zumbador y orientado-al-este entonces inicio
      mientras junto-a-zumbador hacer inicio
         si junto-a-zumbador entonces inicio
           coge-zumbador;
         fin;
    si frente-libre entonces inicio
       avanza;
    fin;
     fin;
         gira-izquierda;
         gira-izquierda;
         avanza;
         gira-izquierda;
         gira-izquierda;
         gira-izquierda;
         avanza;
  mientras junto-a-zumbador hacer inicio
     si junto-a-zumbador entonces inicio
 coge-zumbador;
 fin;
 si frente-libre entonces inicio
 avanza;
 fin;
 fin;
 gira-izquierda;
 mientras frente-libre hacer inicio
 avanza;
 fin;
 gira-izquierda;
 mientras frente-libre hacer inicio
 avanza;
 fin;
 fin;
 avanze;
 fin;


 define-nueva-instruccion ins como inicio
 si junto-a-zumbador entonces inicio
 gira-izquierda;
 si frente-libre entonces inicio
 avanza;
 fin;
 si junto-a-zumbador y orientado-al-oeste entonces inicio
 LI;
 fin;
 si orientado-al-oeste y no-junto-a-zumbador entonces inicio
     gira-izquierda;
     gira-izquierda;
 si frente-libre entonces inicio
     avanza;
 fin;
 si frente-libre entonces inicio
     avanza;
 fin;
 fin;
 si frente-bloqueado entonces inicio
     gira-izquierda;
     gira-izquierda;
 avanza;
     gira-izquierda;
     gira-izquierda;
     gira-izquierda;
 fin;
 si junto-a-zumbador y orientado-al-este entonces inicio
 LD;
 fin;
 si orientado-al-este y no junto-a-zumbador entonces inicio
     gira-izquierda;
     gira-izquierda;
 avanza;
     gira-izquierda;
     gira-izquierda;
     gira-izquierda;
 avanza;
 fin;
 fin;

 fin;



    inicia-ejecucion

    avanze;
    mientras orientado-al-norte y junto-a-zumbador hacer inicio
    ins;
    fin;

    si orientado-al-norte y no-junto-a-zumbador entonces inicio
    gira-izquierda;
    mientras frente-libre hacer inicio
    avanza;
    fin;
    gira-izquierda;
    mientras frente-libre hacer inicio
    avanza;
    fin;
    mientras algun-zumbador-en-la-mochila hacer inicio
    deja-zumbador
    fin;
    fin;
        apagate;
    termina-ejecucion
finalizar-programa

