iniciar-programa
define-nueva-instruccion gira-derecha como inicio
  repetir 3 veces gira-izquierda;
    fin;
define-nueva-instruccion media-vuelta como inicio
     gira-izquierda;
     gira-izquierda;
        fin;

define-nueva-instruccion vaciar como inicio
    si frente-bloqueado y orientado-al-norte entonces inicio
              media-vuelta;
              fin;
    mientras orientado-al-sur hacer  inicio
                  avanza;
    si frente-bloqueado y orientado-al-sur   entonces inicio
        gira-derecha;
        fin;
     mientras frente-libre y orientado-al-oeste  hacer
          avanza;
       mientras frente-bloqueado y algun-zumbador-en-la-mochila hacer inicio
             deja-zumbador;
             fin;
             fin;
             fin;
define-nueva-instruccion iniciar2 como inicio
     si frente-bloqueado y orientado-al-oeste entonces inicio
          media-vuelta;
          avanza;
     mientras frente-libre y no junto-a-zumbador hacer inicio
         avanza;
     si junto-a-zumbador entonces  inicio
        media-vuelta;
        avanza;
        gira-derecha;
           fin;
     mientras frente-libre y orientado-al-norte hacer inicio
        avanza;
     si junto-a-zumbador entonces
     gira-izquierda;
     fin;
     fin;
     fin;
     fin;
define-nueva-instruccion vaciar2 como inicio
    si frente-bloqueado y orientado-al-norte entonces inicio
              media-vuelta;
              fin;
    mientras orientado-al-sur hacer  inicio
                  avanza;
    si frente-bloqueado y orientado-al-sur   entonces inicio
        gira-derecha;
        fin;
     mientras frente-libre y orientado-al-oeste  hacer
          avanza;
      si frente-bloqueado y orientado-al-oeste entonces inicio
        iniciar2;
         fin;
         fin;
         fin;
define-nueva-instruccion muro como inicio
    si junto-a-zumbador y frente-bloqueado entonces inicio (**)
              gira-derecha;
              mientras izquierda-bloqueada hacer inicio
                 avanza;
                 fin;
               si izquierda-libre entonces
                  gira-izquierda;
                  avanza;
                  gira-izquierda;
                mientras frente-libre hacer
                  avanza;
                 si frente-bloqueado entonces
                    gira-derecha;
                    mientras frente-libre hacer inicio
                       avanza;
                      fin;
                      fin;
                 fin;


define-nueva-instruccion iniciar como inicio
    mientras frente-libre y no junto-a-zumbador hacer inicio
     avanza;
     fin;
    si junto-a-zumbador y frente-bloqueado entonces inicio
      gira-izquierda;
      avanza;
      gira-derecha;
       avanza;
     si derecha-libre y izquierda-libre y no junto-a-zumbador entonces inicio
         gira-izquierda;
         avanza;
         avanza;
         avanza;
         gira-derecha;
    si derecha-libre y izquierda-libre y no junto-a-zumbador entonces inicio
        gira-derecha;
         mientras orientado-al-sur hacer inicio
             avanza;
          si frente-bloqueado entonces inicio
             gira-derecha;
             muro;
             fin;
             fin;
          fin;
         fin;
       sal-de-instruccion;
      fin;
   si junto-a-zumbador  entonces inicio
     avanza;
     gira-izquierda;
  mientras frente-libre y orientado-al-norte y no junto-a-zumbador hacer
        avanza;
    si junto-a-zumbador entonces
       gira-derecha;
        vaciar2
       fin;
       fin;
define-nueva-instruccion sur como inicio
    si no-junto-a-zumbador y orientado-al-norte entonces inicio
        media-vuelta;
        fin;
        mientras orientado-al-sur y frente-libre y no junto-a-zumbador hacer  inicio
            avanza;
          si frente-bloqueado entonces
             gira-derecha;
           mientras no-junto-a-zumbador  y orientado-al-oeste hacer inicio
               avanza;
               fin;
           si junto-a-zumbador  entonces inicio
           muro;
             media-vuelta;
             iniciar;
             fin;
             fin;
             fin;
define-nueva-instruccion sur2 como inicio
       si no junto-a-zumbador y orientado-al-norte entonces inicio
          media-vuelta;
           fin;
       mientras orientado-al-sur y frente-libre y no-junto-a-zumbador hacer inicio
          avanza;
        si frente-bloqueado entonces
              gira-izquierda;
         mientras no-junto-a-zumbador y orientado-al-este hacer inicio
            avanza;
         si junto-a-zumbador entonces inicio
             media-vuelta;
        avanza;
        gira-derecha;
           fin;
     mientras frente-libre y orientado-al-norte hacer inicio
        avanza;
     si junto-a-zumbador entonces
     gira-izquierda;
            fin;
            fin;
            fin;
            fin;

define-nueva-instruccion L1 como inicio
     mientras junto-a-zumbador  y orientado-al-este hacer inicio
        coge-zumbador;
   si frente-bloqueado entonces inicio
      gira-izquierda;
       mientras junto-a-zumbador y orientado-al-norte hacer inicio
    coge-zumbador;
      avanza;
      sur;
      fin;
      fin;
        avanza;
   si no junto-a-zumbador entonces inicio
      media-vuelta;
      avanza;
      gira-derecha;
      avanza;
      fin;
    mientras junto-a-zumbador y orientado-al-norte hacer inicio
    coge-zumbador;
      avanza;
      sur;
      fin;
      fin;
      fin;

 define-nueva-instruccion L2 como inicio
     mientras junto-a-zumbador y orientado-al-oeste hacer inicio
         coge-zumbador;
      si frente-bloqueado entonces inicio      (**)
        gira-derecha;
       mientras junto-a-zumbador y orientado-al-norte hacer inicio
        coge-zumbador;
        avanza;
        fin;
        fin;
         avanza;
     si no-junto-a-zumbador entonces inicio
       media-vuelta;
       avanza;
       gira-izquierda;
       avanza;
       fin;
    mientras junto-a-zumbador y orientado-al-norte hacer inicio
        coge-zumbador;
        avanza;
        sur2;
        fin;
        fin;
        fin;




    inicia-ejecucion
  si orientado-al-norte entonces
     gira-derecha;
  si orientado-al-sur entonces
     gira-izquierda;
  si orientado-al-oeste entonces
      media-vuelta;
  si orientado-al-este entonces
       iniciar;
       L1;
       iniciar2;
       L2;
       vaciar;

       apagate;
    termina-ejecucion
finalizar-programa
